Có bao giờ bạn cảm thấy việc viết Dockerfiles, và docker-compose.yml thật sự rất đau khổ không?

Với cá nhân tôi thì tôi chưa bao giờ thích việc đó. Tôi luôn tự hỏi liệu mình đã tuân theo các tiêu chuẩn tốt nhất chưa và có vô tình đưa lỗ hổng bảo mật vào khi viết các file Dockerfile, docker-compose hay không?

May mắn thay, tôi không cần phải lo lắng về điều đó nữa, nhờ những chuyên gia tại Docker đã đưa Generative AI vào sử dụng và tạo ra một công cụ tiện ích CLI - docker init.

1. Docker init là gì?

docker init là một tiện ích dòng lệnh giúp khởi tạo tài nguyên Docker trong một dự án. Nó tạo Dockerfiles, Compose file và .dockerignore dựa trên yêu cầu của dự án.

Điều này đơn giản hóa quá trình cấu hình Docker cho dự án của bạn, tiết kiệm thời gian và giảm độ phức tạp.

Phiên bản mới nhất của docker init hỗ trợ Go, Python, Node.js, Rust, ASP.NET, PHP và Java. Phiên bản này có sẵn với Docker Desktop.

2. Làm thế nào để sử dụng docker init?

Việc sử dụng docker init rất dễ dàng và chỉ cần một vài bước đơn giản. Đầu tiên, hãy vào thư mục dự án nơi bạn muốn thiết lập Docker assets.

Tạo một ứng dụng Flask cơ bản.

touch app.py requirements.txt

Sao chép code bên dưới vào các tệp tương ứng

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_docker():
return '<h1> hello world </h1'

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')

# requirements.txt
Flask

3. Hãy cùng xem sự kỳ diệu của docker init

docker init sẽ quét dự án của bạn và yêu cầu bạn xác nhận và chọn mẫu phù hợp nhất với ứng dụng của bạn. Sau khi bạn chọn mẫu, docker init yêu cầu bạn cung cấp một số thông tin cụ thể về dự án, tự động tạo các tài nguyên Docker cần thiết cho dự án của bạn.

docker init

Việc tiếp theo bạn làm là chọn nền tảng ứng dụng, trong ví dụ này chúng ta đang sử dụng python. Nó sẽ gợi ý các giá trị được đề xuất cho dự án của bạn như phiên bản Python, lệnh portentrypoint.

Bạn có thể chọn các giá trị mặc định hoặc cung cấp các giá trị bạn muốn và nó sẽ tạo các tệp cấu hình Docker cùng với hướng dẫn để chạy ứng dụng ngay lập tức.

Hãy cùng xem cấu hình tự động tạo này trông như thế nào.

  • Dockerfile

# syntax=docker/dockerfile:1

# Comments are provided throughout this file to help you get started.
# If you need more help, visit the Dockerfile reference guide at
# https://docs.docker.com/engine/reference/builder/

ARG PYTHON_VERSION=3.11.7
FROM python:${PYTHON_VERSION}-slim as base

# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1

# Keeps Python from buffering stdout and stderr to avoid situations where
# the application crashes without emitting any logs due to buffering.
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/go/dockerfile-user-best-practices/
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser

# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.
# Leverage a bind mount to requirements.txt to avoid having to copy them into
# into this layer.
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,source=requirements.txt,target=requirements.txt \
python -m pip install -r requirements.txt

# Switch to the non-privileged user to run the application.
USER appuser

# Copy the source code into the container.
COPY . .

# Expose the port that the application listens on.
EXPOSE 5000

# Run the application.
CMD gunicorn 'app:app' --bind=0.0.0.0:5000

Và hãy xem, nó đã viết Dockerfile tốt hơn với những gì tôi từng viết.

  • compose.yaml

Nó đã viết cấu hình docker-compose để chạy ứng dụng. Vì ứng dụng của chúng ta không bao gồm bất kỳ kết nối nào đến cơ sở dữ liệu, nên nó đã chú thích code mà ta có thể cần cho vùng chứa cơ sở dữ liệu.

Nếu bạn muốn sử dụng cơ sở dữ liệu với ứng dụng Flask của mình, hãy bỏ chú thích cấu hình dịch vụ db khỏi tệp docker-compose, tạo tệp cục bộ có secrets và chạy ứng dụng. Ngoài ra, nó cũng tạo tệp .dockerignore.

4. Tại sao nên sử dụng docker init?

Các docker init  làm cho dockerization trở nên dễ dàng, đặc biệt là đối với người mới sử dụng Docker. Nó loại bỏ nhiệm vụ thủ công là viết Dockerfiles và các tệp cấu hình khác, tiết kiệm thời gian và giảm thiểu lỗi.

Nó sử dụng các mẫu để tùy chỉnh thiết lập Docker dựa trên loại ứng dụng của bạn, đồng thời tuân thủ các tiêu chuẩn của ngành.

Lời kết

Tóm lại, Docker Init là một công cụ hữu ích giúp đơn giản hóa quy trình thiết lập Docker cho các dự án mới. Nó giúp bạn tiết kiệm thời gian, giảm thiểu lỗi và tạo ra các file cấu hình Docker nhất quán và dễ quản lý.

>> Tuyên bố miễn trừ trách nhiệm: Giống như bất kỳ công cụ AI nào khác, công cụ này cũng không hoàn hảo. Đừng tin tưởng mù quáng vào cấu hình mà nó tạo ra. Tôi khuyên bạn nên xem lại cấu hình trước khi đưa nó vào sử dụng.

Nguồn: Akhilesh Mishra

VietnamWorks inTECH

TẠO TÀI KHOẢN MỚI: XEM FULL “1 TÁCH CODEFEE” - NHẬN SLOT TƯ VẤN CV TỪ CHUYÊN GIA - CƠ HỘI RINH VỀ VOUCHER 200K