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)

bannerAds