Cách cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.04
Docker Compose làm cho việc xử lý các quy trình điều phối của containers Docker (chẳng hạn như khởi động, tắt và cài đặt liên kết nội bộ containers và dung lượng ) thực sự dễ dàng.Bài viết này cung cấp một ví dụ thực tế về việc sử dụng Docker Compose để cài đặt một ứng dụng, trong trường hợp này là WordPress có thêm PHPMyAdmin. WordPress thường chạy trên LAMP stack, nghĩa là Linux, Apache, MySQL / MariaDB và PHP. Docker image WordPress chính thức bao gồm Apache và PHP cho ta , vì vậy phần duy nhất ta phải lo lắng là MariaDB.
Yêu cầu
Để theo dõi bài viết này, bạn cần những thứ sau:
- Ubuntu 14.04 Server
- User không phải root có quyền sudo ( Cài đặt server ban đầu với Ubuntu 14.04 giải thích cách cài đặt điều này.)
- Docker và Docker Compose được cài đặt từ các hướng dẫn trong Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.04
Bước 1 - Cài đặt WordPress
Ta sẽ sử dụng Docker image chính thức của WordPress và MariaDB . Nếu bạn tò mò, có nhiều thông tin hơn về những hình ảnh này và các tùy chọn cấu hình của chúng trên các trang GitHub và Docker Hub tương ứng.
Hãy bắt đầu bằng cách tạo một folder chứa dữ liệu của ta và tạo một file docker-compose.yml
tối thiểu để chạy containers WordPress của ta :
- mkdir ~/wordpress && cd $_
Sau đó, tạo ~/wordpress/docker-compose.yml
bằng editor yêu thích của bạn (nano rất dễ dàng nếu bạn không có sở thích):
- nano ~/wordpress/docker-compose.yml
và dán như sau:
wordpress: image: wordpress
Điều này chỉ cho Docker Compose bắt đầu một containers mới có tên là wordpress
và download hình ảnh wordpress
từ Docker Hub.
Ta có thể đưa hình ảnh lên như vậy:
- docker-compose up
Bạn sẽ thấy Docker download và extract hình ảnh WordPress từ Docker Hub và sau một thời gian, bạn sẽ nhận được một số thông báo lỗi tương tự như bên dưới:
Outputwordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables wordpress_1 | Did you forget to --link some_mysql_container:mysql or set an external db wordpress_1 | with -e WORDPRESS_DB_HOST=hostname:port? dockercompose_wordpress_1 exited with code 1
Đây là WordPress phàn nàn rằng nó không thể tìm thấy database . Hãy thêm hình ảnh MariaDB vào hỗn hợp và liên kết nó với nhau để khắc phục điều đó.
Bước 2 - Cài đặt MariaDB
Để thêm hình ảnh MariaDB vào group , hãy mở lại docker-compose.yml
bằng editor của bạn:
- nano ~/wordpress/docker-compose.yml
Thay đổi docker-compose.yml
để phù hợp với bên dưới (hãy cẩn thận với phần thụt lề, file YAML nhạy cảm với khoảng trắng)
wordpress: image: wordpress links: - wordpress_db:mysql wordpress_db: image: mariadb
Những gì ta đã làm ở đây là xác định một containers mới có tên là wordpress_db
và yêu cầu nó sử dụng hình ảnh mariadb
từ Docker Hub. Ta cũng đã yêu cầu containers wordpress
của ta liên kết containers wordpress_db
của ta với containers wordpress
và gọi nó là mysql
(bên trong containers wordpress
, tên server mysql
sẽ được chuyển tiếp đến containers wordpress_db
của ta ).
Nếu bạn chạy lại docker-compose up
, bạn sẽ thấy nó download hình ảnh MariaDB và bạn cũng sẽ thấy rằng ta chưa hoàn thành ở đó:
Outputwordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set wordpress_db_1 | Did you forget to add -e MYSQL_ROOT_PASSWORD=... ? wordpress_1 | error: missing required WORDPRESS_DB_PASSWORD environment variable wordpress_1 | Did you forget to -e WORDPRESS_DB_PASSWORD=... ? wordpress_1 | wordpress_1 | (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.) wordpress_wordpress_db_1 exited with code 1 wordpress_wordpress_1 exited with code 1 Gracefully stopping... (press Ctrl+C again to force)
WordPress vẫn đang phàn nàn về việc không thể tìm thấy database và bây giờ ta có một khiếu nại mới từ MariaDB nói rằng không có password root nào được đặt.
Có vẻ như chỉ liên kết hai containers là không đủ. Hãy tiếp tục và cài đặt biến MYSQL_ROOT_PASSWORD
để ta có thể thực sự kích hoạt điều này.
Chỉnh sửa lại file Docker Compose:
- nano ~/wordpress/docker-compose.yml
Thêm hai dòng này vào cuối phần wordpress_db
, nhưng nhớ thay đổi examplepass
thành password an toàn hơn!
wordpress_db: ... environment: MYSQL_ROOT_PASSWORD: examplepass ...
Điều này sẽ đặt một biến môi trường bên trong containers wordpress_db
có tên MYSQL_ROOT_PASSWORD
với password mong muốn của bạn. Hình ảnh MariaDB Docker được cấu hình để kiểm tra biến môi trường này khi nó khởi động và sẽ quản lý việc cài đặt DB với account root với password được xác định là MYSQL_ROOT_PASSWORD
.
Trong khi ta đang ở đó, hãy cũng cài đặt một cổng chuyển tiếp để ta có thể kết nối với cài đặt WordPress của bạn khi nó thực sự tải lên. Dưới phần wordpress
thêm hai dòng sau:
wordpress: ... ports: - 8080:80 ...
Số cổng đầu tiên là số cổng trên server và số cổng thứ hai là cổng bên trong container. Vì vậy, cấu hình này chuyển tiếp các yêu cầu trên cổng 8080 của server tới cổng 80 của web server mặc định bên trong containers .
Lưu ý: Nếu bạn muốn Wordpress chạy trên cổng 80 của web server mặc định trên server , hãy thay đổi dòng trước đó thành 80:80
để các yêu cầu đến cổng 80 trên server được chuyển tiếp đến cổng 80 bên trong containers Wordpress.
Tệp docker-compose.yml
hoàn chỉnh của bạn bây giờ sẽ trông giống như sau:
wordpress: image: wordpress links: - wordpress_db:mysql ports: - 8080:80 wordpress_db: image: mariadb environment: MYSQL_ROOT_PASSWORD: examplepass
Với cấu hình này, ta có thể tiếp tục và kích hoạt WordPress. Lần này, ta hãy chạy nó với tùy chọn -d
, tùy chọn này sẽ yêu cầu docker-compose
chạy các containers trong nền để bạn có thể tiếp tục sử dụng terminal của bạn :
- docker-compose up -d
Bạn sẽ thấy cả đống văn bản lướt qua màn hình của bạn . Sau khi bình tĩnh lại, hãy mở trình duyệt web và duyệt đến IP
của hộp DigitalOcean của bạn trên cổng 8080 (ví dụ: nếu địa chỉ IP của server của bạn là 123.456.789.123, bạn nên nhập http://123.456.789.123:8080 vào trình duyệt của bạn .)
Bạn sẽ thấy một trang cài đặt WordPress mới và có thể hoàn tất cài đặt và viết blog như bình thường.
Bởi vì đây là cả hai Docker image chính thức và đang tuân theo tất cả các phương pháp hay nhất của Docker, mỗi hình ảnh này đều có dung lượng ổn định, được định nghĩa cho bạn - nghĩa là nếu bạn khởi động lại containers , các bài đăng trên blog của bạn sẽ vẫn ở đó. Bạn có thể tìm hiểu thêm về cách làm việc với dung lượng Docker trong hướng dẫn data volumes Docker .
Bước 3 - Thêm containers PhpMyAdmin
Tuyệt vời, điều đó tương đối không đau. Hãy thử bắt mắt một chút.
Lúc này, ta chỉ sử dụng hình ảnh chính thức, điều mà group Docker rất nỗ lực đảm bảo là chính xác. Bạn có thể nhận thấy rằng ta không phải cung cấp cho containers WordPress bất kỳ biến môi trường nào để cấu hình nó. Ngay sau khi ta liên kết nó với một containers MariaDB được cấu hình đúng, mọi thứ đều hoạt động.
Điều này là do có một tập lệnh bên trong containers Docker của WordPress thực sự lấy biến MYSQL_ROOT_PASSWORD
từ containers wordpress_db
của ta và sử dụng nó để kết nối với WordPress.
Hãy mạo hiểm ra khỏi khu vực hình ảnh chính thức một chút và sử dụng hình ảnh PhpMyAdmin do cộng đồng đóng góp . Hãy tiếp tục và chỉnh sửa docker-compose.yml
:
- nano docker-compose.yml
Dán phần sau vào cuối file :
phpmyadmin: image: corbinu/docker-phpmyadmin links: - wordpress_db:mysql ports: - 8181:80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: examplepass
Đảm bảo thay thế examplepass bằng cùng một password root từ containers wordpress_db
mà bạn đã cài đặt trước đó.
Điều này lấy docker-phpmyadmin
bởi thành viên cộng đồng corbinu
, liên kết nó với containers wordpress_db
của ta với tên mysql
( nghĩa là từ bên trong containers phpmyadmin
tham chiếu đến tên server mysql
sẽ được chuyển tiếp đến containers wordpress_db
của ta ), hiển thị cổng 80 của nó trên cổng 8181 của hệ thống server và cuối cùng đặt một vài biến môi trường với tên user và password MariaDB của ta . Hình ảnh này không tự động lấy biến môi trường MYSQL_ROOT_PASSWORD
môi trường của containers wordpress_db
như cách hình ảnh wordpress
thực hiện. Ta thực sự phải sao chép dòng MYSQL_ROOT_PASSWORD: examplepass
từ containers wordpress_db
và đặt tên user thành root
.
Tệp docker-compose.yml
hoàn chỉnh bây giờ sẽ trông giống như sau:
wordpress: image: wordpress links: - wordpress_db:mysql ports: - 8080:80 wordpress_db: image: mariadb environment: MYSQL_ROOT_PASSWORD: examplepass phpmyadmin: image: corbinu/docker-phpmyadmin links: - wordpress_db:mysql ports: - 8181:80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: examplepass
Bây giờ hãy khởi động lại group ứng dụng:
- docker-compose up -d
Bạn sẽ thấy PhpMyAdmin được cài đặt. Sau khi hoàn tất, hãy truy cập lại địa chỉ IP của server của bạn (lần này sử dụng cổng 8181, ví dụ: http://123.456.789.123:8181 ). Bạn sẽ được chào đón bởi màn hình đăng nhập PhpMyAdmin.
Hãy tiếp tục và đăng nhập bằng tên user root
và password bạn đã đặt trong file YAML, và bạn có thể duyệt database của bạn . Bạn sẽ nhận thấy rằng server bao gồm database wordpress
, chứa tất cả dữ liệu từ cài đặt WordPress của bạn.
Bạn có thể thêm bao nhiêu containers tùy thích theo cách này và liên kết tất cả chúng lại theo bất kỳ cách nào bạn muốn. Như bạn thấy , cách tiếp cận này khá mạnh mẽ — thay vì xử lý cấu hình và yêu cầu cho từng thành phần riêng lẻ và cài đặt tất cả chúng trên cùng một server , bạn có thể kết nối các mảnh lại với nhau như khối Lego và thêm các thành phần từng phần. Sử dụng các công cụ như Docker Swarm, bạn thậm chí có thể chạy các containers này một cách minh bạch trên nhiều server ! Đó là một chút ngoài phạm vi của hướng dẫn này. Docker cung cấp một số [tài liệu] (( https://docs.docker.com/swarm/install-w-machine/) ) trên đó nếu bạn quan tâm.
Bước 4 - Tạo trang web WordPress
Vì tất cả các file cho trang web WordPress mới của bạn đều được lưu trữ bên trong containers Docker, điều gì sẽ xảy ra với các file của bạn khi bạn dừng containers và bắt đầu lại?
Theo mặc định, root tài liệu cho containers WordPress là liên tục. Điều này là do hình ảnh WordPress từ Docker Hub được cấu hình theo cách này. Nếu bạn thực hiện thay đổi đối với trang web WordPress của bạn , hãy dừng group ứng dụng và bắt đầu lại, trang web sẽ vẫn có các thay đổi mà bạn đã thực hiện.
Hãy thử nó.
Truy cập WordPress của bạn từ trình duyệt web (ví dụ: http://123.456.789.123:8080 ). Chỉnh sửa Hello World! bài đã tồn tại. Sau đó, dừng tất cả các containers Docker bằng lệnh sau:
- docker-compose stop
Thử truy cập lại trang web WordPress. Bạn sẽ thấy rằng trang web bị sập. Bắt đầu lại containers Docker:
- docker-compose up -d
, tải trang web WordPress. Bạn sẽ thấy trang blog của bạn và thay đổi bạn đã thực hiện trước đó. Điều này cho thấy rằng những thay đổi bạn thực hiện được lưu ngay cả khi các containers bị dừng.
Bước 5 - Lưu trữ root tài liệu trên hệ thống file server (Tùy chọn)
Có thể lưu trữ root tài liệu cho WordPress trên hệ thống file server lưu trữ bằng cách sử dụng data volumes Docker để chia sẻ file giữa server lưu trữ và containers .
Lưu ý: Để biết thêm chi tiết về cách làm việc với khối dữ liệu Docker, hãy xem hướng dẫn về data volumes Docker .
Thử một lần đi. Mở file docker-compose.yml
của bạn :
- nano ~/wordpress/docker-compose.yml
trong phần wordpress:
thêm các dòng sau:
wordpress: ... volumes: - ~/wordpress/wp_html:/var/www/html ...
Dừng phiên docker-compose
hiện đang chạy của bạn:
- docker-compose stop
Xóa containers hiện có để ta có thể ánh xạ ổ đĩa tới hệ thống file server :
- docker-compose rm wordpress
Khởi động lại WordPress:
- docker-compose -d
Khi dấu nhắc trả về, WordPress sẽ được cài đặt và chạy lại - lần này sử dụng hệ thống file server để lưu trữ root tài liệu.
Nếu bạn nhìn vào folder ~/wordpress
, bạn sẽ thấy rằng bây giờ có một folder wp_html
trong đó:
- ls ~/wordpress
Tất cả các file nguồn WordPress đều nằm bên trong nó. Các thay đổi bạn thực hiện sẽ được containers WordPress tiếp nhận theo thời gian thực.
Trải nghiệm này mượt mà hơn bình thường một chút - containers Docker của WordPress được cấu hình để kiểm tra xem /var/www/html
có trống hay không khi nó khởi động và sao chép các file vào đó một cách thích hợp. Thông thường bạn sẽ phải tự thực hiện bước này.
Kết luận
Bạn nên triển khai và chạy WordPress đầy đủ. Bạn có thể sử dụng cùng một phương pháp để triển khai khá nhiều hệ thống bằng cách sử dụng các hình ảnh có sẵn trên Docker Hub. Đảm bảo tìm ra dung lượng nào là ổn định và dung lượng nào không dành cho mỗi containers bạn
tạo nên.
Vui vẻ lập tài liệu!
Các tin liên quan
Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.042015-11-19
Cách dọn dẹp môi trường Docker của bạn bằng CloudSlang trên CoreOS Cluster
2015-06-10
Cách quản lý triển khai nhiều node của bạn với Máy Rancher và Docker trên Ubuntu 14.04
2015-04-27
Cách tập trung log Docker của bạn với Fluentd và ElasticSearch trên Ubuntu 14.04
2015-03-30
Hệ sinh thái Docker: Giới thiệu về các thành phần chung
2015-02-01
Hệ sinh thái Docker: Tổng quan về Containerization
2015-02-01
Hệ sinh thái Docker: Lập lịch và Điều phối
2015-02-01
Hệ sinh thái Docker: Khám phá dịch vụ và Cửa hàng cấu hình phân tán
2015-02-01
Hệ sinh thái Docker: Mạng và Truyền thông
2015-02-01
Cách thiết lập registry Docker riêng trên Ubuntu 14.04
2014-10-15