Docker Composeを使ってみる
首先
我知道可以使用docker-compose up启动容器,但是那个定义是如何完成的?基于上一次的疑问,本次继续尝试”让自己动手试试”。
关于Docker Compose
Docker Compose 是什么?
简单来说,它是一种机制,可以将创建和停止容器等一系列操作整合在一起进行。可以通过准备一个名为docker-compose.yml的定义文件并加载它来执行。在开发特别是涉及到多个容器相互关联的应用程序时非常方便。
创建Compose文件
这次我们将尝试创建一个Compose文件来实现”将WordPress容器与MySQL容器进行关联”。
创建一个docker-compose.yml文件。
type nul > docker-compose.yml
本次仅进行了最基本的叙述,docker-compose.yml文件的内容如下所示。
version: '3.8'
services:
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpressdb
MYSQL_USER: hoge
MYSQL_PASSWORD: hogehoge
wordpress:
depends_on:
- mysql
image: wordpress
ports:
- 8080:80
restart: always
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: wordpressdb
WORDPRESS_DB_USER: hoge
WORDPRESS_DB_PASSWORD: hogehoge
冒頭のversionはDocker Composeのバージョン(バージョンによって記法が違うことがあるので冒頭で指定する)。
servicesに必要なコンテナを定義し、その中にコンテナごとの詳細を記述していく。
imageは起動するイメージ名、portsはポート指定、
restartは起動に失敗した際の再起動設定で、指定したalwaysは再起動を繰り返す。
environmentは環境変数の設定。
如果想要指定连接的网络,请定义networks。
wordpressのdepends_onとは依存関係で、WordpressはMysqlに依存したサービスのため
必ずMysqlが先に起動・後に停止するように明示する。
イメージのダウンロード
docker-compose pullすることで、docker-compose.ymlに定義したサービスのイメージをまとめてpullできる。(※コンテナの起動はしない)
docker-compose pull
Pulling mysql ...
Pulling wordpress ...
pullするサービスを指定したい場合は docker-compose pull {service-name}
もちろん別途個別にpullしてもOK。
その際はdocker-compose.ymlに定義するイメージを
pullしたものに合わせて記述する。
启动容器
すべてのコンテナを起動する場合はdocker-compose up
-dオプションはデタッチモード指定で、
バックグラウンドでコンテナを起動することができる。
するとdocker-compose.ymlに定義した順にサービスが実行され、コンテナが起動する。
docker-compose up -d
Creating network "docker-compose_default" with the default driver
Creating docker-compose_mysql_1 ... done
Creating docker-compose_wordpress_1 ... done
実行するサービスを指定してコンテナ起動させたい場合は docker-compose up -d {service-name}
确认服务的运行状态
StateがUpになっていれば、問題なくコンテナが起動している。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
docker-compose_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker-compose_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
只要能访问WordPress就可以了!
停止服务
docker-compose stop
如果服务正在运行,则重新启动;如果服务停止,则启动。
如果想要重新执行 docker-compose.yml,只需运行 up 命令。
停止服务
docker-compose down
数据库连接错误的解决方法
当访问WordPress时出现“error establishing a database connection”(数据库连接错误)的情况下,可以尝试将docker-compose.yml文件中的两个服务的restart: unless-stopped选项进行更改并测试。
我在Stack Overflow上查看了《docker-compose wordpress mysql connection refused》一文以供参考。
辛苦了! kǔ le)