No menu items!
No menu items!
More

    [Docker] Phần 6 – Dockerfile

    Mở Đầu

    Trong cuộc hành trình tiếp theo của chúng ta trong thế giới Docker, phần 6 này sẽ khám phá một công cụ quan trọng và mạnh mẽ trong việc tạo và quản lý Docker Container – đó là Dockerfile. Dockerfile là một công cụ tự động hóa và cấu hình cho việc xây dựng Docker Images. Chúng ta sẽ tìm hiểu cách Dockerfile hoạt động, cách tạo Docker Images từ nó và tại sao nó quan trọng trong quy trình triển khai ứng dụng với Docker.

    Dockerfile – Cơ Sở Cho Docker Images

    Dockerfile là một file cấu hình có cấu trúc chứa tất cả các hướng dẫn để xây dựng một Docker Image. Nó mô tả các bước cụ thể để tạo ra image, bao gồm việc chọn base image, cài đặt các gói phần mềm, cấu hình biến môi trường, sao chép file tin và thực hiện các tùy chỉnh khác. Dockerfile cho phép bạn tự động hóa quy trình xây dựng image, đảm bảo rằng mọi người trong đội làm việc với cùng một môi trường ứng dụng.

    Dockerfile Trong Quy Trình Triển Khai

    Dockerfile là một phần quan trọng trong quy trình triển khai ứng dụng với Docker. Nó giúp đảm bảo rằng ứng dụng của bạn có thể được triển khai một cách đáng tin cậy trên bất kỳ môi trường Docker nào. Bằng cách sử dụng Dockerfile, bạn có thể đảm bảo rằng ứng dụng của bạn có thể được tái tạo và mở rộng dễ dàng.

    Cách viết các chỉ thị trong Dockerfile như RUN, FROM, CMD … để thi hành các tác vụ tự động tạo ra image Docker

    Ở các phần trước ta đã sử dụng các lệnh Docker tương tác trực tiếp hết lệnh này đến lệnh khác để lấy image về, tạo container, chạy và cài đặt các thành phần vào container … Rất nhiều thao tác trong quá trình này bạn có thể lưu vào một file gọi là Dockerfile, và ra lệnh cho Docker đọc file đó, chạy từng lệnh theo chỉ thị trong file đó để cuối cùng có được image theo nhu cầu.

    Sử dụng Dockerfile

    Dockerfile là một file text, trong đó chứa các dòng chỉ thị để Docker đọc và chạy theo chỉ thị đó để cuối cùng bạn có một image mới theo nhu cầu. Khi đang có một Dockerfile giả sử có tên là Dockerfile để ra lệnh cho Docker chạy nó bạn có thể gõ:

    docker build -t image_name:image_version --force-rm -f Dockerfile .

    Bạn chú ý dấu . ở cuối lệnh docker build ở trên, có nghĩa tìm file có tên Dockerfile ở thư mục hiện tại và -t image_name:image_version là đặt tên và tag được gán cho image mới tạo ra.

    Tạo Dockerfile đơn gian đầu tiên

    Dockerfile là file text, bạn dùng bất kỳ trình soạn thảo text nào tạo ra file này, và đưa vào nội dung là các chỉ thị. Giờ ta sẽ vừa thực hành vừa học từng bước. Ví dụ tạo file có tên Dockerfile nhập nội dung sau:

    Đầu tiên hãy tạo file cấu hình nginx.conf

    vi /home/nginx/nginx.conf

    Copy nội dung dưới vào file nginx.conf và lưu lại

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
    }
    
    http {
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
            gzip on;
            include /etc/nginx/conf.d/*.conf;
    }

    Tạo file hoanghd.com.conf, bạn hãy xem phần cấu hình nginx để rõ các bước cấu hình trong config ở dưới

    server {
        listen 8099;
        root /var/www/html/hoanghd.com/;
        index index.html index.htm index.nginx-debian.html;
    }
    
    server {
        listen 443 ssl;
        server_name hoanghd.com;
        proxy_redirect off;
        ssl_certificate /etc/nginx/ssl/hoanghd.com.pem; #fullchain.pem
        ssl_certificate_key /etc/nginx/ssl/hoanghd.com.pem; #privkey.pem
        ssl_trusted_certificate /etc/nginx/ssl/hoanghd.com.pem;  #chain.pem
    
        location / {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_buffering on;
            proxy_connect_timeout  3600s;
            proxy_read_timeout  3600s;
            proxy_send_timeout  3600s;
            send_timeout  3600s;
            client_max_body_size 10m;
            proxy_set_header X-Forwarded-Proto $scheme;
            add_header Content-Security-Policy upgrade-insecure-requests;
            proxy_pass http://127.0.0.1:8099/;
        }
    }

    Tạo thư mục chứa source web

    mkdir -p /home/sourceweb/

    Tạo file index.html trong thư mục chứa source để lát chúng ta sử dụng Dockerfile copy source web vào imgage

    echo 'Chao mung ban den voi website cua toi' > /home/sourceweb/index.html

    Tạo Dockerfile với nội dung dưới

    vi /home/Dockerfile

    Đưa nội dung dưới vào Dockerfile, mình đã chú thích các thành phần rõ ràng ở dưới nên mình không giải thích gì thêm

    # xây dựng image mới từ image ubuntu:latest (Ubuntu 20.04)
    FROM ubuntu:20.04
    
    # Cập nhật các gói và cài vào đó nginx, vim
    RUN apt update -y
    RUN apt install nginx -y
    RUN apt update -y \
        && apt install vim -y \ 
        && apt install systemctl -y
    
    #Thiết lập thư mục hiện tại
    WORKDIR /etc/nginx
    
    # Copy tất cả các file trong thư mục hiện tại (./sourceweb)  vào WORKDIR
    ADD ./sourceweb /var/www/html/hoanghd.com/
    
    #Thiết lập khi tạo container từ image sẽ mở cổng 443
    EXPOSE 443
    
    # Khi chạy container tự động chạy ngay nginx
    CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

    Sau khi hoàn thành tạo các file và thư mục, bạn sẽ có 1 cây thư mục như dưới

    ├── Dockerfile
    ├── nginx
    │   ├── conf.d
    │   │   └── hoanghd.com.conf
    │   ├── nginx.conf
    │   └── ssl
    │       └── hoanghd.com.pem
    └── sourceweb
        └── index.html
    
    4 directories, 5 files

    Chạy lệnh docker build để tiến hành build 1 image mới

    docker build -t web-hoanghd:version1 --force-rm -f Dockerfile .

    Sau khi build xong image, hãy list image và bạn sẽ thấy image web-hoanghd đã được tạo, ngoài ra còn có thêm image ubuntu 20.04 vì đây chính là image cơ sở để tạo ra image web-hoanghd

    $ docker image ls
    REPOSITORY    TAG        IMAGE ID       CREATED         SIZE
    web-hoanghd   version1   81096b77d218   5 minutes ago   248MB
    ubuntu        20.04      680e5dfb52c7   10 days ago     72.8MB

    Bây giờ bạn hay run image web-hoanghd mà mount một số file và thư mục đã tạo để nginx có thể chạy được web của bạn

    $ docker run -it --name=web-hoanghd \
        -v /home/nginx/ssl:/etc/nginx/ssl \
        -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
        -v /home/nginx/conf.d:/etc/nginx/conf.d \
        -p 443:443 \
        web-hoanghd:version1

    Kết quả khi run xong

    $ docker ps 
    CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS         PORTS                                   NAMES
    57eba5da9000   web-hoanghd:version1   "/usr/sbin/nginx -g …"   38 seconds ago   Up 3 seconds   0.0.0.0:443->443/tcp, :::443->443/tcp   web-hoanghd

    Và đây là kết quả

    Kết Luận

    Trong phần này, chúng ta đã bắt đầu khám phá Dockerfile và tìm hiểu tại sao nó là một công cụ quan trọng trong việc tạo và quản lý Docker Images. Chúng ta đã thấy cách Dockerfile được sử dụng để định nghĩa môi trường của ứng dụng và làm cho việc triển khai ứng dụng trở nên dễ dàng và đáng tin cậy.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email