Docker là công nghệ ảo hóa cấp hệ điều hành chủ yếu dành cho các nhà phát triển và quản trị viên hệ thống. Docker giúp tạo và triển khai ứng dụng dễ dàng hơn trong môi trường biệt lập.
Dockerfile là một tập lệnh chứa các tập hợp lệnh và hướng dẫn sẽ được tự động thực thi theo trình tự trong môi trường docker để xây dựng một hình ảnh docker mới.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tạo hình ảnh Docker của riêng bạn bằng Dockerfile. Chúng tôi sẽ giải thích chi tiết liên quan đến Dockerfile để cho phép bạn xây dựng hình ảnh Docker của riêng mình.
Điều kiện tiên quyết
Đối với hướng dẫn này, chúng tôi sẽ sử dụng Ubuntu 18.04 với 1GB RAM, 25 GB dung lượng đĩa trống và 2 CPU. Ngoài ra, chúng ta sẽ sử dụng Ubuntu 18.04 làm ảnh cơ sở để xây dựng ảnh Docker tùy chỉnh.
Trước khi tạo Dockerfile đầu tiên, bạn nên làm quen với hướng dẫn Dockerfile. Dưới đây là một số hướng dẫn Dockerfile mà bạn phải biết.
TỪ
Đặt ảnh cơ sở cho ảnh mới mà bạn muốn tạo. Lệnh FROM sẽ khởi tạo giai đoạn xây dựng mới và phải nằm ở đầu Dockerfile.
LABEL
Với lệnh này, bạn có thể thêm thông tin bổ sung về hình ảnh Docker của mình, chẳng hạn như phiên bản, mô tả, người bảo trì, v.v. Lệnh LABEL là một cặp khóa-giá trị cho phép bạn thêm nhiều nhãn và giá trị nhiều dòng.
RUN
Lệnh này được sử dụng để thực thi lệnh trong quá trình xây dựng hình ảnh Docker. Bạn có thể cài đặt các gói bổ sung cần thiết cho hình ảnh Docker của mình.
ADD
Lệnh ADD được sử dụng để sao chép các tệp, thư mục hoặc tệp từ xa từ URL đến hình ảnh Docker của bạn, từ 'src' đến đường dẫn tuyệt đối 'dest'. Ngoài ra, bạn có thể thiết lập quyền sở hữu mặc định cho tệp của mình.
ENV
Lệnh ENV được sử dụng để định nghĩa một biến môi trường có thể được sử dụng trong giai đoạn xây dựng và cũng có thể được thay thế trực tuyến trong nhiều giai đoạn.
CMD
Lệnh CMD được sử dụng để định nghĩa lệnh mặc định để thực thi khi chạy vùng chứa. Và Dockerfile chỉ được chứa một lệnh CMD và nếu có nhiều lệnh CMD, lệnh CMD cuối cùng sẽ được chạy.
EXPOSE
Lệnh này được sử dụng để hiển thị cổng vùng chứa trên các cổng mạng cụ thể khi chạy. Giao thức mặc định được hiển thị là TCP, nhưng bạn có thể chỉ định TCP hoặc UDP.
ARG
Lệnh ARG được sử dụng để xác định một biến mà người dùng có thể truyền vào tại thời điểm dựng. Bạn có thể sử dụng lệnh này trong lệnh 'build command' của docker trong thời gian dựng bằng tùy chọn '--build-arg variable=value' và có thể truyền qua Dockerfile. Ngoài ra, bạn có thể sử dụng nhiều ARG tại Dockerfile.
ENTRYPOINT
Lệnh ENTRYPOINT được sử dụng để xác định lệnh đầu tiên và lệnh mặc định sẽ được thực thi khi container đang chạy. Xác định lệnh để khởi động ứng dụng của bạn bằng lệnh ENTRYPOINT.
WORKDIR
Lệnh WORKDIR được sử dụng để xác định thư mục làm việc mặc định của hình ảnh Docker của bạn. Các lệnh RUN, CMD, ENTRYPOINT và ADD tuân theo lệnh WORKDIR. Bạn có thể thêm nhiều lệnh WORKDIR vào Dockerfile của mình và nếu lệnh đó chưa tồn tại, lệnh đó sẽ tự động được tạo.
USER
Lệnh USER được sử dụng để xác định người dùng hoặc gid mặc định khi chạy hình ảnh. RUN, CMD và ENTRYPOINT tuân theo lệnh USER trong Dockerfile.
VOLUME
Lệnh VOLUME được sử dụng để cho phép truy cập/liên kết thư mục giữa vùng chứa và máy chủ.
Bây giờ, chúng ta hãy bắt đầu tạo Dockerfile đầu tiên.
Cập nhật chỉ mục gói Ubuntu và cài đặt một số gói bằng lệnh apt bên dưới.
Tiếp theo, thêm GPG khóa của kho lưu trữ Docker chính thức.
Tiếp theo, thêm kho lưu trữ Docker CE Community Edition bằng lệnh sau.
Lệnh sẽ tự động cập nhật lại chỉ mục gói.
Tiếp theo, cài đặt các gói CE Docker bằng lệnh apt bên dưới.
Sau khi hoàn tất quá trình cài đặt, hãy khởi động dịch vụ Docker và thêm dịch vụ này vào hệ thống khởi động.
Dịch vụ Docker đã hoạt động, bây giờ hãy chạy lệnh docker bên dưới để đảm bảo cài đặt chính xác.
Dưới đây là kết quả bạn sẽ nhận được.
Như có thể thấy, bạn nhận được thông báo hello-world từ Docker và quá trình cài đặt Docker CE đã hoàn tất thành công.
Đầu tiên, hãy tạo một thư mục dự án mới và tạo một Dockerfile trống.
Bây giờ hãy chỉnh sửa tập lệnh 'Dockerfile' bằng trình soạn thảo của riêng bạn (trong ví dụ này, chúng tôi đang sử dụng vim).
Trên cùng của dòng, hãy thêm ảnh cơ sở Ubuntu 18.04 bằng lệnh FROM như bên dưới.
Bây giờ hãy thêm thông tin chi tiết về ảnh tùy chỉnh bằng lệnh LABEL.
Đối với quá trình cài đặt các gói apt, chúng tôi sẽ bỏ qua mọi bước tương tác sau khi cài đặt bằng cách sử dụng biến môi trường 'DEBIAN_FRONTEND=noninteractive'.
Tiếp theo, chạy lệnh 'apt update' trước khi cài đặt bất kỳ gói nào.
Bây giờ hãy cài đặt các gói Nginx, PHP-FPM và supervisor. Sau khi hoàn tất quá trình cài đặt, hãy xóa tất cả bộ đệm gói để giảm kích thước của ảnh tùy chỉnh.
Định nghĩa một biến môi trường mới có thể được truyền vào hình ảnh tùy chỉnh.
Bây giờ hãy sao chép cấu hình mặc định của Nginx vào biến 'nginx_vhost', thay thế cấu hình PHP 'cgi.fix_pathinfo=1' bằng 'cgi.fix_pathinfo=0' trên tệp cấu hình php.ini, sau đó thêm tùy chọn 'daemon off' vào biến 'nginx_conf' mặc định.
Sao chép cấu hình tùy chỉnh của supervisord vào biến 'supervisor_conf'.
Tạo một thư mục mới cho tệp sock PHP-FPM, thay đổi quyền sở hữu của thư mục gốc web '/var/www/html' và thư mục PHP-FPM '/run/php' thành người dùng mặc định 'www-data'.
Xác định ổ đĩa cho hình ảnh tùy chỉnh để chúng ta có thể gắn tất cả các thư mục đó vào máy chủ.
Bây giờ hãy thêm tập lệnh 'start.sh' và xác định lệnh chứa mặc định bằng lệnh CMD như bên dưới.
Và cuối cùng, mở các cổng HTTP và HTTPS mặc định trên chứa bằng lệnh EXPOSE.
Lưu và đóng.
Dưới đây là tập lệnh Dockerfile hoàn chỉnh mà chúng ta vừa đã tạo.
Tiếp theo, chúng ta sẽ tạo một cấu hình bổ sung mới cho Nginx, supervisord và tập lệnh start.sh.
Cấu hình máy chủ ảo Nginx 'mặc định' sẽ chứa phần dành cho PHP-FPM. Trên thực tế, bạn có thể chạy tập lệnh PHP bằng cách sử dụng hình ảnh Tùy chỉnh mà không cần bất kỳ thay đổi nào.
Tạo cấu hình máy chủ ảo 'mặc định' Nginx mới bằng trình soạn thảo của bạn.
Dán cấu hình sau vào đó.
Lưu và đóng.
Tiếp theo, chúng ta sẽ tạo Cấu hình 'supervisrod.conf' chứa cả chương trình Nginx và PHP-FPM sẽ chạy tự động.
Tạo tệp 'supervisrod.conf' bằng trình soạn thảo của bạn.
Dán cấu hình sau vào đó.
Lưu và đóng.
Bây giờ hãy tạo tập lệnh 'start.sh' bằng cách sử dụng t=trình soạn thảo của bạn, tập lệnh này sẽ chứa lệnh supervisord để bắt đầu.
Dán cấu hình sau vào nó.
Lưu và đóng.
Làm cho tập lệnh 'start.sh' có thể thực thi.
Kết quả là, tất cả cấu hình cho hình ảnh Docker tùy chỉnh của chúng tôi đã được tạo, bên dưới là tất cả các cấu hình mà chúng tôi đã tạo.
Bây giờ chúng ta đã sẵn sàng để tạo một hình ảnh tùy chỉnh mới dựa trên các cấu hình này.
Lệnh này sẽ tải xuống hình ảnh cơ sở Ubuntu 18.04 và tạo một hình ảnh tùy chỉnh mới có tên 'nginx-image.
Sau khi tất cả quá trình hoàn tất, kiểm tra danh sách hình ảnh Docker khả dụng trên hệ thống của bạn bằng lệnh sau.
Dưới đây là kết quả bạn sẽ nhận được.
Như có thể thấy, hình ảnh Docker tùy chỉnh mới 'nginx-image' đã được tạo.
Tiếp theo, chúng ta sẽ chạy vùng chứa Docker mới dựa trên 'nginx-image'.
Trên máy cục bộ của bạn, hãy tạo một thư mục mới có tên 'webroot' sẽ được sử dụng để lưu trữ tất cả các tệp web.
Bây giờ hãy tạo một vùng chứa mới có tên là test-container bằng lệnh docker run bên dưới.
Lưu ý:
Dưới đây là kết quả bạn sẽ nhận được.
Kết quả là, container mới có tên 'test-container' dựa trên 'nginx-image' và hiển thị cổng 8080 đã hoạt động.
Tạo tệp index.html trên thư mục '/webroot' bằng lệnh sau.
Bây giờ hãy kiểm tra quyền truy cập vào container của bạn bằng lệnh curl trên cổng 8080.
Kết quả là, bạn sẽ nhận được trang index.html mặc định mà chúng ta vừa tạo.
Tiếp theo, tạo một tệp PHP mới 'info.php' trong thư mục '/webroot' để đảm bảo rằng dịch vụ PHP-FPM đang chạy.
Tạo tệp 'info.php' bằng lệnh sau.
Tiếp theo, mở trình duyệt web và nhập địa chỉ IP máy chủ của bạn với cổng '8080' theo sau là đường dẫn đến tệp 'info.php'.
Bây giờ bạn sẽ nhận được trang phpinfo như bên dưới.
Như có thể thấy, 'test-container' đã tải thành công tập lệnh PHP.
Và kết quả là chúng ta đã tạo thành công một hình ảnh Docker tùy chỉnh mới và chạy container mới dựa trên nó mà không có bất kỳ lỗi nào.
Dockerfile là một tập lệnh chứa các tập hợp lệnh và hướng dẫn sẽ được tự động thực thi theo trình tự trong môi trường docker để xây dựng một hình ảnh docker mới.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tạo hình ảnh Docker của riêng bạn bằng Dockerfile. Chúng tôi sẽ giải thích chi tiết liên quan đến Dockerfile để cho phép bạn xây dựng hình ảnh Docker của riêng mình.
Điều kiện tiên quyết
Đối với hướng dẫn này, chúng tôi sẽ sử dụng Ubuntu 18.04 với 1GB RAM, 25 GB dung lượng đĩa trống và 2 CPU. Ngoài ra, chúng ta sẽ sử dụng Ubuntu 18.04 làm ảnh cơ sở để xây dựng ảnh Docker tùy chỉnh.
Giới thiệu về lệnh Dockerfile
Dockerfile là một tập lệnh chứa tất cả các lệnh để xây dựng ảnh Docker. Dockerfile chứa tất cả các hướng dẫn sẽ được sử dụng để tạo ảnh Docker bằng lệnh 'docker build'.Trước khi tạo Dockerfile đầu tiên, bạn nên làm quen với hướng dẫn Dockerfile. Dưới đây là một số hướng dẫn Dockerfile mà bạn phải biết.
TỪ
Đặt ảnh cơ sở cho ảnh mới mà bạn muốn tạo. Lệnh FROM sẽ khởi tạo giai đoạn xây dựng mới và phải nằm ở đầu Dockerfile.
LABEL
Với lệnh này, bạn có thể thêm thông tin bổ sung về hình ảnh Docker của mình, chẳng hạn như phiên bản, mô tả, người bảo trì, v.v. Lệnh LABEL là một cặp khóa-giá trị cho phép bạn thêm nhiều nhãn và giá trị nhiều dòng.
RUN
Lệnh này được sử dụng để thực thi lệnh trong quá trình xây dựng hình ảnh Docker. Bạn có thể cài đặt các gói bổ sung cần thiết cho hình ảnh Docker của mình.
ADD
Lệnh ADD được sử dụng để sao chép các tệp, thư mục hoặc tệp từ xa từ URL đến hình ảnh Docker của bạn, từ 'src' đến đường dẫn tuyệt đối 'dest'. Ngoài ra, bạn có thể thiết lập quyền sở hữu mặc định cho tệp của mình.
ENV
Lệnh ENV được sử dụng để định nghĩa một biến môi trường có thể được sử dụng trong giai đoạn xây dựng và cũng có thể được thay thế trực tuyến trong nhiều giai đoạn.
CMD
Lệnh CMD được sử dụng để định nghĩa lệnh mặc định để thực thi khi chạy vùng chứa. Và Dockerfile chỉ được chứa một lệnh CMD và nếu có nhiều lệnh CMD, lệnh CMD cuối cùng sẽ được chạy.
EXPOSE
Lệnh này được sử dụng để hiển thị cổng vùng chứa trên các cổng mạng cụ thể khi chạy. Giao thức mặc định được hiển thị là TCP, nhưng bạn có thể chỉ định TCP hoặc UDP.
ARG
Lệnh ARG được sử dụng để xác định một biến mà người dùng có thể truyền vào tại thời điểm dựng. Bạn có thể sử dụng lệnh này trong lệnh 'build command' của docker trong thời gian dựng bằng tùy chọn '--build-arg variable=value' và có thể truyền qua Dockerfile. Ngoài ra, bạn có thể sử dụng nhiều ARG tại Dockerfile.
ENTRYPOINT
Lệnh ENTRYPOINT được sử dụng để xác định lệnh đầu tiên và lệnh mặc định sẽ được thực thi khi container đang chạy. Xác định lệnh để khởi động ứng dụng của bạn bằng lệnh ENTRYPOINT.
WORKDIR
Lệnh WORKDIR được sử dụng để xác định thư mục làm việc mặc định của hình ảnh Docker của bạn. Các lệnh RUN, CMD, ENTRYPOINT và ADD tuân theo lệnh WORKDIR. Bạn có thể thêm nhiều lệnh WORKDIR vào Dockerfile của mình và nếu lệnh đó chưa tồn tại, lệnh đó sẽ tự động được tạo.
USER
Lệnh USER được sử dụng để xác định người dùng hoặc gid mặc định khi chạy hình ảnh. RUN, CMD và ENTRYPOINT tuân theo lệnh USER trong Dockerfile.
VOLUME
Lệnh VOLUME được sử dụng để cho phép truy cập/liên kết thư mục giữa vùng chứa và máy chủ.
Bây giờ, chúng ta hãy bắt đầu tạo Dockerfile đầu tiên.
Bước 1 - Cài đặt Docker CE (Phiên bản cộng đồng)
Trước khi tạo Dockerfile, chúng ta sẽ cài đặt Docker CE vào hệ thống Ubuntu 18.04 của mình.Cập nhật chỉ mục gói Ubuntu và cài đặt một số gói bằng lệnh apt bên dưới.
Mã:
sudo apt update
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
Mã:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Mã:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Tiếp theo, cài đặt các gói CE Docker bằng lệnh apt bên dưới.
Mã:
sudo apt install docker-ce docker-ce-cli containerd.io
Sau khi hoàn tất quá trình cài đặt, hãy khởi động dịch vụ Docker và thêm dịch vụ này vào hệ thống khởi động.
Mã:
systemctl start docker
systemctl enable docker
Mã:
docker run hello-world
Mã:
Xin chào từ Docker!
Thông báo này cho thấy cài đặt của bạn có vẻ đang hoạt động bình thường.
Để tạo thông báo này, Docker đã thực hiện các bước sau:
1. Máy khách Docker đã liên hệ với daemon Docker.
2. Daemon Docker đã kéo hình ảnh "hello-world" từ Docker Hub.
(amd64)
3. Daemon Docker đã tạo một vùng chứa mới từ hình ảnh đó để chạy tệp thực thi
tạo ra đầu ra mà bạn đang đọc.
4. Chương trình nền Docker đã truyền phát đầu ra đó đến máy khách Docker, sau đó máy khách này đã gửi nó
đến thiết bị đầu cuối của bạn.
Để thử một điều gì đó tham vọng hơn, bạn có thể chạy một vùng chứa Ubuntu với:
$ docker run -it ubuntu bash
Chia sẻ hình ảnh, tự động hóa quy trình làm việc và nhiều hơn nữa với ID Docker miễn phí:
https://hub.docker.com/
Để biết thêm ví dụ và ý tưởng, hãy truy cập:
[URL=https://docs.docker.com/get-started/?utm_source=diendancongnghe.com]https://docs.docker.com/get-started/[/URL]
Bước 2 - Tạo Dockerfile và các cấu hình khác
Trong bước này, chúng tôi sẽ chỉ cho bạn cách xây dựng hình ảnh Docker tùy chỉnh cho ứng dụng của mình bằng Dockerfile. Chúng tôi sẽ tạo một hình ảnh Docker tùy chỉnh mới dựa trên hình ảnh Ubuntu 18.04, cho các dịch vụ PHP-FPM và Nginx, sau đó chạy vùng chứa mới bằng một tập lệnh phpinfo đơn giản.Đầu tiên, hãy tạo một thư mục dự án mới và tạo một Dockerfile trống.
Mã:
mkdir -p nginx-image; cd nginx-image/
touch Dockerfile
Mã:
vim Dockerfile
Mã:
#Tải xuống ảnh cơ sở ubuntu 18.04
FROM ubuntu:18.04
Mã:
# NHÃN về ảnh tùy chỉnh
NHÃN maintainer="[emailprotected]"
NHÃN version="0.1"
NHÃN description="Đây là ảnh Docker tùy chỉnh cho \
Dịch vụ PHP-FPM và Nginx."
Mã:
# Vô hiệu hóa lời nhắc trong khi cài đặt các gói
ARG DEBIAN_FRONTEND=noninteractive
Mã:
# Cập nhật kho lưu trữ phần mềm Ubuntu
CHẠY apt update
Mã:
# Cài đặt nginx, php-fpm và supervisord từ kho lưu trữ ubuntu
CHẠY apt install -y nginx php-fpm supervisor && \
rm -rf /var/lib/apt/lists/* && \
apt clean
Mã:
#Định nghĩa biến ENV
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.2/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf
Mã:
# Bật PHP-fpm trên cấu hình máy chủ ảo nginx
SAO CHÉP mặc định ${nginx_vhost}
CHẠY sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && \
echo "\ndaemon off;" >> ${nginx_conf}
Mã:
#Sao chép cấu hình của supervisor
SAO CHÉP supervisord.conf ${supervisor_conf}
Mã:
RUN mkdir -p /run/php && \
chown -R www-data:www-data /var/www/html && \
chown -R www-data:www-data /run/php
Mã:
# Cấu hình ổ đĩa
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
Mã:
# Sao chép tập lệnh start.sh và xác định lệnh mặc định cho chứa
COPY start.sh /start.sh
CMD ["./start.sh"]
Mã:
# Expose Port cho Ứng dụng
EXPOSE 80 443
Dưới đây là tập lệnh Dockerfile hoàn chỉnh mà chúng ta vừa đã tạo.
Mã:
# Tải xuống hình ảnh cơ sở ubuntu 18.04
TỪ ubuntu:18.04
# NHÃN về hình ảnh tùy chỉnh
NHÃN maintainer="[emailprotected]"
NHÃN version="0.1"
NHÃN description="Đây là hình ảnh Docker tùy chỉnh cho \
Dịch vụ PHP-FPM và Nginx."
# Vô hiệu hóa lời nhắc trong quá trình cài đặt gói
ARG DEBIAN_FRONTEND=noninteractive
# Cập nhật kho lưu trữ phần mềm Ubuntu
CHẠY apt update
# Cài đặt nginx, php-fpm và supervisord từ kho lưu trữ ubuntu
CHẠY apt install -y nginx php-fpm supervisor && \
rm -rf /var/lib/apt/lists/* && \
apt clean
# Định nghĩa biến ENV
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.2/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf
# Bật PHP-fpm trên cấu hình máy chủ ảo nginx
SAO CHÉP mặc định ${nginx_vhost}
CHẠY sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && \
echo "\ndaemon off;" >> ${nginx_conf}
# Sao chép cấu hình giám sát
SAO CHÉP supervisord.conf ${supervisor_conf}
CHẠY mkdir -p /run/php && \
chown -R www-data:www-data /var/www/html && \
chown -R www-data:www-data /run/php
# Cấu hình ổ đĩa
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
# Sao chép tập lệnh start.sh và xác định lệnh mặc định cho vùng chứa
COPY start.sh /start.sh
CMD ["./start.sh"]
# Expose Port cho Ứng dụng
EXPOSE 80 443
Cấu hình máy chủ ảo Nginx 'mặc định' sẽ chứa phần dành cho PHP-FPM. Trên thực tế, bạn có thể chạy tập lệnh PHP bằng cách sử dụng hình ảnh Tùy chỉnh mà không cần bất kỳ thay đổi nào.
Tạo cấu hình máy chủ ảo 'mặc định' Nginx mới bằng trình soạn thảo của bạn.
Mã:
vim default
Mã:
server {
listen 80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
Tiếp theo, chúng ta sẽ tạo Cấu hình 'supervisrod.conf' chứa cả chương trình Nginx và PHP-FPM sẽ chạy tự động.
Tạo tệp 'supervisrod.conf' bằng trình soạn thảo của bạn.
Mã:
vim supervisord.conf
Mã:
[unix_http_server]
file=/dev/shm/supervisor.sock ; (đường dẫn đến tệp socket)
[supervisord]
logfile=/var/log/supervisord.log ; (tệp nhật ký chính; mặc định là $CWD/supervisord.log)
logfile_maxbytes=50MB ; (số byte tối đa của tệp nhật ký chính b4 luân chuyển; mặc định là 50MB)
logfile_backups=10 ; (số bản sao lưu luân chuyển tệp nhật ký chính; mặc định là 10)
loglevel=info ; (mức nhật ký; thông tin mặc định; những mục khác: gỡ lỗi, cảnh báo, theo dõi)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile; mặc định là supervisord.pid)
nodaemon=false ; (bắt đầu ở chế độ nền trước nếu đúng; mặc định là false)
minfds=1024 ; (tối thiểu có sẵn các mô tả tệp khởi động; mặc định là 1024)
minprocs=200 ; (tối thiểu có sẵn các mô tả quy trình; mặc định là 200)
user=root ;
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///dev/shm/supervisor.sock ; sử dụng URL unix:// cho một socket unix
[include]
files = /etc/supervisor/conf.d/*.conf
[program:php-fpm7.2]
command=/usr/sbin/php-fpm7.2 -F
numprocs=1
autostart=true
autorestart=true
[program:nginx]
command=/usr/sbin/nginx
numprocs=1
autostart=true
autorestart=true
Bây giờ hãy tạo tập lệnh 'start.sh' bằng cách sử dụng t=trình soạn thảo của bạn, tập lệnh này sẽ chứa lệnh supervisord để bắt đầu.
Mã:
vim start.sh
Mã:
#!/bin/sh
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
Làm cho tập lệnh 'start.sh' có thể thực thi.
Mã:
chmod +x start.sh
Mã:
tree .
Bước 3 - Xây dựng tùy chỉnh mới và chạy container mới
Để tạo hình ảnh tùy chỉnh Docker, hãy vào thư mục dự án 'nginx-image' và chạy lệnh 'docker build' như bên dưới.
Mã:
docker build -t nginx-image .
Sau khi tất cả quá trình hoàn tất, kiểm tra danh sách hình ảnh Docker khả dụng trên hệ thống của bạn bằng lệnh sau.
Mã:
docker image ls
Như có thể thấy, hình ảnh Docker tùy chỉnh mới 'nginx-image' đã được tạo.
Tiếp theo, chúng ta sẽ chạy vùng chứa Docker mới dựa trên 'nginx-image'.
Trên máy cục bộ của bạn, hãy tạo một thư mục mới có tên 'webroot' sẽ được sử dụng để lưu trữ tất cả các tệp web.
Mã:
mkdir -p /webroot
Mã:
docker run -d -v /webroot:/var/www/html -p 8080:80 --name test-container nginx-image
- --name test-container nginx-image = Chúng tôi tạo một container mới với tên 'test-container', dựa trên docker image 'nginx-image'.
- -p 8080:80 = container test-container đang chạy trên cổng 8080 trên máy chủ.
- -v /webroot:/var/www/html = thư mục /webroot trên máy chủ, hãy viết lại thư mục /var/www/html trên container.
Mã:
docker ps
Kết quả là, container mới có tên 'test-container' dựa trên 'nginx-image' và hiển thị cổng 8080 đã hoạt động.
Bước 4 - Kiểm tra
Để đảm bảo rằng container đang chạy đúng cách, chúng tôi sẽ tạo một index.html và tệp phpinfo trên thư mục gốc '/webroot' trên máy chủ. Bởi vì thư mục '/webroot' được gắn vào thư mục chứa '/var/www/html'.Tạo tệp index.html trên thư mục '/webroot' bằng lệnh sau.
Mã:
echo '[HEADING=1]Nginx và PHP-FPM 7.2 bên trong Docker Container với Ubuntu 18.04 Base Image[/HEADING]' > /webroot/index.html
Mã:
curl server-ip:8080
curl -I server-ip:8080
Tiếp theo, tạo một tệp PHP mới 'info.php' trong thư mục '/webroot' để đảm bảo rằng dịch vụ PHP-FPM đang chạy.
Tạo tệp 'info.php' bằng lệnh sau.
Mã:
echo '' > /webroot/info.php
Bây giờ bạn sẽ nhận được trang phpinfo như bên dưới.
Như có thể thấy, 'test-container' đã tải thành công tập lệnh PHP.
Và kết quả là chúng ta đã tạo thành công một hình ảnh Docker tùy chỉnh mới và chạy container mới dựa trên nó mà không có bất kỳ lỗi nào.