Thứ năm, 19/11/2015 | 00:00 GMT+7

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:

Bước 1 - Cài đặt WordPress

Ta sẽ sử dụng Docker image chính thức của WordPressMariaDB . 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 / docker-compo.yml
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:

Output
wordpress_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)

docker-compos.yml
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 ở đó:

Output
wordpress_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!

docker-compos.yml
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:

docker-compos.yml
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:

docker-compos.yml
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 :

docker-compos.yml
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:

docker-compos.yml
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 / docker-compo.yml
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!


Tags:

Các tin liên quan

Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.04
2015-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