Docker-Compose là một công cụ dòng lệnh để định nghĩa và quản lý các container docker đa container như thể chúng là một dịch vụ duy nhất. Compose được viết bằng python và có thể được cài đặt bằng lệnh pip của Python. Với compose, chúng ta có thể chạy nhiều container docker chỉ bằng một lệnh duy nhất. Nó cho phép bạn tạo một container dưới dạng dịch vụ, rất phù hợp cho môi trường phát triển, thử nghiệm và dàn dựng của bạn.
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước để sử dụng docker-compose. Chúng ta sẽ triển khai 'Wordpress' với Nginx, MySQL và PHP-FPM. Mỗi dịch vụ có container riêng và chúng ta sẽ sử dụng hình ảnh từ sổ đăng ký docker hub. Tôi sẽ chỉ cho bạn cách tạo container từ hình ảnh docker và quản lý tất cả các container bằng docker-compose.
Điều kiện tiên quyết
Trước khi bắt đầu, hãy cập nhật kho lưu trữ Ubuntu và cài đặt các bản cập nhật mới nhất:
Theo mặc định, docker có sẵn trong kho lưu trữ Ubuntu, vì vậy chúng ta có thể tiếp tục cài đặt ngay:
Khi quá trình cài đặt hoàn tất, hãy khởi động docker và thêm nó để tự động khởi động khi khởi động:
Bây giờ hãy kiểm tra cài đặt docker của bạn bằng lệnh bên dưới:
Bạn sẽ thấy hello-world từ docker.
Cài đặt python và python-pip:
Tiếp theo, cài đặt docker-compose bằng lệnh pip:
chờ quá trình cài đặt hoàn tất. Sau đó, kiểm tra cài đặt bằng lệnh docker-compose:
Bạn sẽ nhận được phiên bản docker-compose.
Chúng tôi sẽ triển khai ứng dụng PHP 'Wordpress' với Nginx làm máy chủ web và MariaDB cho cơ sở dữ liệu MySQL dưới dạng các container docker được quản lý bởi docker-compose. Mỗi ứng dụng (Wordpress, Nginx và MySQL) sẽ chạy trong container riêng của nó, bạn có thể xem danh sách bên dưới:
- Nginx: Chúng tôi sử dụng hình ảnh docker chính thức, phiên bản mới nhất 'nginx: latest'.
- Wordpress: Wordpress cung cấp một số hình ảnh docker trên docker-hub và chúng tôi sẽ sử dụng WordPress 4.7 với PHP-FPM 7.0 trên đó.
- MySQL: Chúng tôi sẽ sử dụng container chính thức MariaDB, phiên bản mới nhất.
Vì vậy, chúng tôi cần 3 hình ảnh docker từ sổ đăng ký docker hub.
Chúng tôi sẽ không chạy docker dưới dạng root, chúng tôi sẽ sử dụng người dùng Linux bình thường. Vì vậy, chỉ cần tạo một người dùng mới bằng lệnh bên dưới (bạn có thể sử dụng tên người dùng khác ở đây, chỉ cần đảm bảo rằng người dùng chưa tồn tại. Nếu bạn chọn một tên khác, hãy đảm bảo thay đổi tên đó trong tất cả các lệnh tiếp theo trong hướng dẫn này):
Bây giờ hãy thêm người dùng vào nhóm 'docker' để người dùng có thể sử dụng lệnh docker và khởi động lại dịch vụ docker:
Đăng nhập vào người dùng 'hakase' và tạo một thư mục mới cho dự án WordPress:
Tiếp theo, tạo một tệp mới có tên là 'docker-compose.yml' và tạo một thư mục mới cho dự án. Chỉ cần nhập các lệnh bên dưới:
Danh sách tệp và thư mục của dự án:
- docker-compose.yml: Đây là tệp cấu hình docker-compose, bạn phải tạo tệp này khi bắt đầu dự án docker-compose mới.
- nginx/: Thư mục này được sử dụng cho cấu hình nginx bổ sung của chúng tôi như máy chủ ảo, v.v.
- db-data/: Thư mục/ổ đĩa cho dữ liệu mysql. Dữ liệu sqlfrom '/var/lib/mysql' được gắn vào thư mục db-data.
- logs/: Thư mục cho nhật ký ứng dụng, nginx, mariadb và php-fpm.
- wordpress/: Tất cả các tệp wordpress sẽ có trong thư mục đó.
Trong thư mục 'nginx', hãy tạo tệp cấu hình mới cho máy chủ ảo wordpress của chúng ta.
Tạo tệp mới wordpress.conf:
Dán cấu hình bên dưới:
Lưu tệp và thoát khỏi vim.
Chỉnh sửa docker-compose.yml bằng vim:
Xác định các dịch vụ của bạn, ở dòng đầu tiên, chúng tôi sẽ xác định Nginx. Chúng tôi đang sử dụng hình ảnh docker chính thức của Nginx, phiên bản mới nhất và cấu hình ánh xạ cổng cho cổng 80 trên container thành cổng 80 trên máy chủ. Tiếp theo, cấu hình các khối lượng docker, khối lượng cho cấu hình máy chủ ảo Nginx của chúng tôi, khối lượng cho các tệp nhật ký Nginx và khối lượng thư mục gốc web '/var/www/html'. Container Nginx được liên kết với container WordPress.
Dán cấu hình bên dưới:
Tiếp theo, hãy định nghĩa máy chủ MySQL. Chúng tôi đang sử dụng image MariaDB, phiên bản mới nhất. Cấu hình ánh xạ cổng cho container trên cổng 3306 và cấu hình mật khẩu gốc MySQL với biến môi trường 'MYSQL_ROOT_PASSWORD'. Cuối cùng, cấu hình ổ đĩa chứa cho thư mục dữ liệu MySQL.
Dán cấu hình bên dưới:
Sau đó, chúng ta sẽ cấu hình dịch vụ WordPress bằng cách sử dụng ảnh docker WordPress 4.7 với PHP-FPM 7.0 đã cài đặt. Cấu hình cổng cho PHP-fpm trên cổng 9000, bật khối lượng docker cho thư mục web '/var/www/html' tới thư mục lưu trữ 'wordpress', thiết lập cơ sở dữ liệu bằng cách định nghĩa biến môi trường WordPress và liên kết dịch vụ WordPress với mysql.
Dán cấu hình bên dưới:
Sau khi thêm ba phần vào docker-compose.yml, lưu tệp và thoát khỏi trình soạn thảo vim.
Cấu hình docker-compose của chúng ta đã sẵn sàng.
Bạn có thể thấy kết quả của lệnh. Ba container đã được tạo. Hãy kiểm tra trạng thái container bằng tùy chọn ps:
Dưới đây là kết quả:
Nếu bạn muốn xem đầu ra nhật ký từ container, bạn có thể sử dụng các lệnh bên dưới:
Nhật ký container:
Lưu ý:
Nếu bạn thấy trong nhật ký container WordPress có lỗi về kết nối MySQL bị từ chối, hãy bỏ qua lỗi đó.
Kết quả như sau:
Bây giờ hãy mở trình duyệt web của bạn và nhập URL máy chủ hoặc địa chỉ IP.
Bạn có thể thấy trang cài đặt WordPress. Chọn ngôn ngữ của bạn và nhấp vào 'Tiếp tục'.
Điền thông tin chi tiết về trang web của bạn như tiêu đề trang web, người dùng và mật khẩu quản trị, địa chỉ email của bạn, sau đó nhấp vào 'Cài đặt Wordpress'.
Bạn sẽ được chuyển hướng đến 'Bảng điều khiển quản trị WordPress'.
Và đây là bài đăng mẫu WordPress của tôi xin chào thế giới.
Wordpress đã được cài đặt bằng docker-compose.
Chúng ta đã có 3 container, bây giờ chúng ta có thể thử đăng nhập vào từng container. Đăng nhập vào container Nginx đầu tiên bằng lệnh docker-compose.
nginx: tên dịch vụ trên tệp docker-compose docker-compose.yml
bash: thực thi lệnh bash shell
Bây giờ hãy kiểm tra cấu hình máy chủ ảo WordPress của chúng tôi.
Các tệp có sẵn trong container.
Tiếp theo, hãy thử đăng nhập vào container mysql, sau đó đăng nhập vào mysql shell bằng mật khẩu của chúng tôi trên tệp compose.
Xem danh sách cơ sở dữ liệu:
Bạn sẽ thấy cơ sở dữ liệu WordPress của chúng tôi.
Trong vùng chứa 'wordpress', bạn sẽ thấy tất cả các tệp WordPress.
Tất cả các vùng chứa đều có thể truy cập được.
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước để sử dụng docker-compose. Chúng ta sẽ triển khai 'Wordpress' với Nginx, MySQL và PHP-FPM. Mỗi dịch vụ có container riêng và chúng ta sẽ sử dụng hình ảnh từ sổ đăng ký docker hub. Tôi sẽ chỉ cho bạn cách tạo container từ hình ảnh docker và quản lý tất cả các container bằng docker-compose.
Điều kiện tiên quyết
- Ubuntu 16.04
- Quyền root
Bước 1 - Cài đặt Docker
Chúng ta sẽ bắt đầu từ đầu, bằng cách cài đặt docker và docker compose theo cách thủ công bằng lệnh apt.Trước khi bắt đầu, hãy cập nhật kho lưu trữ Ubuntu và cài đặt các bản cập nhật mới nhất:
Mã:
sudo apt-get update
sudo apt-get nâng cấp
Mã:
sudo apt-get install -y docker.io
Mã:
systemctl start docker
systemctl enable docker
Mã:
docker run hello-world
Bước 2 - Cài đặt Docker-Compose
Docker-compose là một tập lệnh được viết bằng python, có sẵn trong kho lưu trữ python PyPI và có thể được cài đặt bằng python pip. Vì vậy, trước tiên chúng ta cần cài đặt python và python pip trên hệ thống của mình.Cài đặt python và python-pip:
Mã:
sudo apt-get install -y python python-pip
Mã:
pip install docker-compose
Mã:
docker-compose -v
Bước 3 - Thiết lập Wordpress
Bây giờ, docker và docker-compose đã được cài đặt trên hệ thống. Trong bước này, chúng tôi sẽ hướng dẫn bạn cách tạo và thiết lập môi trường docker-compose cho dự án WordPress của chúng tôi.Chúng tôi sẽ triển khai ứng dụng PHP 'Wordpress' với Nginx làm máy chủ web và MariaDB cho cơ sở dữ liệu MySQL dưới dạng các container docker được quản lý bởi docker-compose. Mỗi ứng dụng (Wordpress, Nginx và MySQL) sẽ chạy trong container riêng của nó, bạn có thể xem danh sách bên dưới:
- Nginx: Chúng tôi sử dụng hình ảnh docker chính thức, phiên bản mới nhất 'nginx: latest'.
- Wordpress: Wordpress cung cấp một số hình ảnh docker trên docker-hub và chúng tôi sẽ sử dụng WordPress 4.7 với PHP-FPM 7.0 trên đó.
- MySQL: Chúng tôi sẽ sử dụng container chính thức MariaDB, phiên bản mới nhất.
Vì vậy, chúng tôi cần 3 hình ảnh docker từ sổ đăng ký docker hub.
Chúng tôi sẽ không chạy docker dưới dạng root, chúng tôi sẽ sử dụng người dùng Linux bình thường. Vì vậy, chỉ cần tạo một người dùng mới bằng lệnh bên dưới (bạn có thể sử dụng tên người dùng khác ở đây, chỉ cần đảm bảo rằng người dùng chưa tồn tại. Nếu bạn chọn một tên khác, hãy đảm bảo thay đổi tên đó trong tất cả các lệnh tiếp theo trong hướng dẫn này):
Mã:
useradd -m -s /bin/bash hakase
passwd hakase
Mã:
usermod -a -G docker hakase
systemctl restart docker
Mã:
su - hakase
mkdir -p wordpress-compose
cd wordpress-compose/
Mã:
touch docker-compose.yml
mkdir -p nginx/
mkdir -p db-data/
mkdir -p logs/nginx/
mkdir -p wordpress/
- docker-compose.yml: Đây là tệp cấu hình docker-compose, bạn phải tạo tệp này khi bắt đầu dự án docker-compose mới.
- nginx/: Thư mục này được sử dụng cho cấu hình nginx bổ sung của chúng tôi như máy chủ ảo, v.v.
- db-data/: Thư mục/ổ đĩa cho dữ liệu mysql. Dữ liệu sqlfrom '/var/lib/mysql' được gắn vào thư mục db-data.
- logs/: Thư mục cho nhật ký ứng dụng, nginx, mariadb và php-fpm.
- wordpress/: Tất cả các tệp wordpress sẽ có trong thư mục đó.
Trong thư mục 'nginx', hãy tạo tệp cấu hình mới cho máy chủ ảo wordpress của chúng ta.
Tạo tệp mới wordpress.conf:
Mã:
vim nginx/wordpress.conf
Mã:
server {
listen 80;
server_name wp-hakase.co;
root /var/www/html;
index index.php;
access_log /var/log/nginx/hakase-access.log;
error_log /var/log/nginx/hakase-error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Bước 4 - Cấu hình Docker-Compose
Ở bước này, chúng ta sẽ bắt đầu chỉnh sửa tệp docker-compose.yml. Khi bạn muốn bắt đầu dự án docker-compose, hãy đảm bảo rằng bạn tạo tệp docker-compose.yml trước như chúng tôi thực hiện bên dưới.Chỉnh sửa docker-compose.yml bằng vim:
Mã:
vim docker-compose.yml
Dán cấu hình bên dưới:
Mã:
nginx:
image: nginx:latest
ports:
- '80:80'
volumes:
- ./nginx:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
- ./wordpress:/var/www/html
links:
- wordpress
restart: always
Dán cấu hình bên dưới:
Mã:
mysql:
image: mariadb
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=aqwe123
restart: always
Dán cấu hình bên dưới:
Mã:
wordpress:
image: wordpress:4.7.1-php7.0-fpm
ports:
- '9000:9000'
volumes:
- ./wordpress:/var/www/html
environment:
- WORDPRESS_DB_NAME=wpdb
- WORDPRESS_TABLE_PREFIX=wp_
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_PASSWORD=aqwe123
links:
- mysql
restart: always
Cấu hình docker-compose của chúng ta đã sẵn sàng.
Bước 5 - Chạy Docker-compose
Bắt đầu tạo các container mới bằng docker compose. Đi đến thư mục wordpress-compose và khởi động các container mới dựa trên tệp compose của chúng ta.
Mã:
cd ~/wordpress-compose/
docker-compose up -d
Mã:
docker-compose ps
Nếu bạn muốn xem đầu ra nhật ký từ container, bạn có thể sử dụng các lệnh bên dưới:
Mã:
docker-compose logs nginx
docker-compose logs mysql
docker-compose logs wordpress
Lưu ý:
Nếu bạn thấy trong nhật ký container WordPress có lỗi về kết nối MySQL bị từ chối, hãy bỏ qua lỗi đó.
Bước 6 - Cài đặt Wordpress
Trước khi thực hiện bước này, hãy kiểm tra các cổng khả dụng/cổng mở trên hệ thống. Hãy đảm bảo bạn đã mở 3 cổng, cổng 80, 3306 và cổng 9000.
Mã:
netstat -plntu
Bây giờ hãy mở trình duyệt web của bạn và nhập URL máy chủ hoặc địa chỉ IP.
Bạn có thể thấy trang cài đặt WordPress. Chọn ngôn ngữ của bạn và nhấp vào 'Tiếp tục'.
Điền thông tin chi tiết về trang web của bạn như tiêu đề trang web, người dùng và mật khẩu quản trị, địa chỉ email của bạn, sau đó nhấp vào 'Cài đặt Wordpress'.
Bạn sẽ được chuyển hướng đến 'Bảng điều khiển quản trị WordPress'.
Và đây là bài đăng mẫu WordPress của tôi xin chào thế giới.
Wordpress đã được cài đặt bằng docker-compose.
Bước 7 - Truy cập Docker Container
Đây là một bước bổ sung về cách truy cập container bằng docker-compose. Kiểm tra xem tất cả các container đều khả dụng và hiển thị trạng thái của chúng:
Mã:
docker-compose ps
Mã:
docker-compose exec nginx bash
bash: thực thi lệnh bash shell
Bây giờ hãy kiểm tra cấu hình máy chủ ảo WordPress của chúng tôi.
Mã:
cat /etc/nginx/conf.d/wordpress.conf
Các tệp có sẵn trong container.
Tiếp theo, hãy thử đăng nhập vào container mysql, sau đó đăng nhập vào mysql shell bằng mật khẩu của chúng tôi trên tệp compose.
Mã:
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL ROOT PASSWORD
Mã:
show databases;
Trong vùng chứa 'wordpress', bạn sẽ thấy tất cả các tệp WordPress.
Mã:
docker-compose exec wordpress bash
ls -lah
Tất cả các vùng chứa đều có thể truy cập được.
Tham khảo
- https://hub.docker.com/_/wordpress/https://hub.docker.com/_/wordpress/?utm_source=diendancongnghe.com
- https://hub.docker.com/_/nginx/https://hub.docker.com/_/nginx/?utm_source=diendancongnghe.com
- https://hub.docker.com/_/mariadb/https://hub.docker.com/_/mariadb/?utm_source=diendancongnghe.com
- https://github.com/yuzukiseo/hakase-labs