MacにDocker – Docker Compose
MacにDocker
ここの子ページ的な
版本
$ docker --version
Docker version 1.13.0, build 49bf474
$ docker-compose --version
docker-compose version 1.10.0, build 4bd6f1a
$ docker-machine --version
docker-machine version 0.9.0, build 15fd4c7
Dockerコンテナ間のリンク
Docker Composeの前に、コンテナ間を連携するのに必要なリンク機能について。
複数のコンテナを連携して処理を行う場合に、Dockerのリンク機能を使います。(例としては、Web3層アーキテクチャのようなシステムを構築する場合に使用)
$ docker run --link 接続したいコンテナ名:エイリアス名 イメージ名 実行コマンド
※このリンク機能は同一ホストマシン上で起動しているコンテナ間でしかアクセスできません。
如果要将CentOS的应用服务器与PostgreSQL的数据库服务器进行链接
$ docker run -d --name dbserver postgres
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
238bf1199031 postgres "/docker-entrypoin..." 54 seconds ago Up 51 seconds 5432/tcp dbserver
$ docker run -it --name appserver --link dbserver:pg centos /bin/bash
[root@0a522bca0879 /]#
[root@0a522bca0879 /]# set |grep PG
PG_ENV_GOSU_VERSION=1.7
PG_ENV_LANG=en_US.utf8
PG_ENV_PGDATA=/var/lib/postgresql/data
PG_ENV_PG_MAJOR=9.6
PG_ENV_PG_VERSION=9.6.1-2.pgdg80+1
PG_ENV_no_proxy='*.local, 169.254/16'
PG_NAME=/appserver/pg
PG_PORT=tcp://172.17.0.2:5432
PG_PORT_5432_TCP=tcp://172.17.0.2:5432
PG_PORT_5432_TCP_ADDR=172.17.0.2
PG_PORT_5432_TCP_PORT=5432
PG_PORT_5432_TCP_PROTO=tcp
[root@0a522bca0879 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 pg 238bf1199031 dbserver # 「dbserver」の情報
172.17.0.3 0a522bca0879
[root@0a522bca0879 /]# ping pg
PING pg (172.17.0.2) 56(84) bytes of data.
64 bytes from pg (172.17.0.2): icmp_seq=1 ttl=64 time=0.239 ms
64 bytes from pg (172.17.0.2): icmp_seq=2 ttl=64 time=0.124 ms
Docker Compose って
用于集中管理多个容器的工具。
通过在名为 “docker-compose.yml” 的文件中定义容器的定义信息,可以同时管理同一主机上的多个容器。
構成ファイル(docker-compose.yml)の構文
方式 shì)
YAML形式
image/build:ベースイメージの指定
webserverというコンテナ名のベースイメージを「CentOS」に指定
webserver:
image: centos
webserver:
build: . # Dockerfileのパスを指定
创建容器
使用Dockerfile来启动docker-compose。
$ cat Dockerfile
FROM centos
#centosのベースイメージを指定しただけ
$ cat docker-compose.yml
webserver:
build: .
$ ls
Dockerfile docker-compose.yml
$ docker-compose up
Creating dockercomposetest_webserver_1
Attaching to dockercomposetest_webserver_1
dockercomposetest_webserver_1 exited with code 0
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
312218ab567e dockercomposetest_webserver "/bin/bash" 26 seconds ago Exited (0) 24 seconds ago dockercomposetest_webserver_1
指令:在容器内执行的命令
command: /bin/bash
如果在基本映像中指定了指令,那么它将覆盖该指令。
链接/外部链接:容器之间的链接协调
links:
- dbserver
- dbserver:mysql #エイリアス名をつけたいときは「コンテナ名:エイリアス名」で指定
同一のdocker-compose.ymlに定義のないコンテナとリンク機能で連携したい場合は、external_linksを使用します。(起動済みのコンテナを使用する場合など)
external_links:
- redis
ports/expose:コンテナ間通信
・ports
コンテナが公開するポートを指定。
「ホストマシンのポート:コンテナのポート」
ports:
- "8000:80"
# YAMLはxx:yyを時刻として扱うので、ポート番号はダブルクォートで囲み、文字列として指定する
・expose
ホストマシンへは公開せず、リンク機能で連携するコンテナのみに公開する場合に使用。
expose:
- "8000"
容量/从容器中的卷
将卷挂载到容器中。
volumes:
- /var/www
- tmp/:/var/tmp
- config/:/ets/config:ro
# ホスト側でマウントするパスを指定する場合「ホストのパス:コンテナのパス」で指定する
# 後ろにroを指定すると、読み取り専用でマウントする
・volumes_from
別のコンテナからすべてのボリュームをマウント
volumes_from:
- log
# logという名前のコンテナにすべてのボリュームのマウント指定
环境:指定容器的环境变量
# 配列形式で指定
environment:
- LANG=ja_JP.utf8
- HOGE=fuga
# ハッシュ形式で指定
environment:
LANG: ja_JP.utf8
HOGE: huga
# 外部ファイルから読み込み
environment: envfile # ファイルパス(ファイル名)を指定
# 外部ファイルから読み込み(複数指定)
environment:
- ./env1
- /etc/config/env2
$ cat envfile
LANG=ja_JP.utf8
HOGE=fuga
容器名称/标签:容器的信息设置
# 「webserver」という名前で定義したコンテナに「mycontainer」という名前をつける
container_name: mycontainer
# コンテナにラベルを付ける(配列形式)
labels:
- コンテナA=web
- コンテナB=db
# コンテナにラベルを付ける(ハッシュ形式)
labels:
- コンテナA: web
- コンテナB: db
Docker Compose命令
向上:生成多个容器
根据创建的docker-compose.yml文件,启动/生成多个容器。
$ docker-compose up [オプション] [サービス名]
$ docker-compose up -d
$ docker-compose -f ./compose/docker-compose.yml up
停止正在运行的容器,请使用「Ctrl+c」命令。
规模:指定生成的容器数量
$ docker-compose scale [サービス名=数]
サービス名「webserver」のコンテナを10個、サービス名「dbserver」のコンテナを2個起動する場合
$ docker-compose scale webserver=10 dbserver=2
注:查看多个容器
进行多个容器的列表显示。
$ docker-compose ps [オプション] [サービス名]
$ docker-compose ps -q
查看日志
我要检查容器的日志。
$ docker-compose logs [オプション] [サービス名]
运行:执行命令
$ docker-compose run [オプション] [サービス名] [コマンド]
サービス名「webserver」のコンテナに/bin/bashを実行する場合
$ docker-compose run webserver /bin/bash
root@5ef57c43a905:/#
start/stop/restart:起動/停止/再起動
# 起動
$ docker-compose start [サービス名]
# 停止
$ docker-compose stop [サービス名]
# 再起動
$ docker-compose restart [サービス名]
$ docker-compose stop dbserver
杀死:迫使停止
$ docker-compose kill [オプション]
如果没有设置选项,将向容器发送“SIGKILL”信号,强制终止进程。
如果要发送信号”SIGINT”(键盘中断:”Ctrl+c”),请执行以下操作。
$ docker-compose kill -s SIGINT
删除
删除多个容器。
$ docker-compose rm [オプション] [サービス名]
WordPressシステム構築
构成
-
- webサーバコンテナ
-
- dbサーバコンテナ
- データ専用コンテナ
创建数据专用容器
使用BusyBox在数据专用容器中。
# Dockerイメージ
FROM busybox
# データボリューム
VOLUME /var/lib/mysql
# イメージを作成
$ docker build -t dataserver -f Dockerfile.dataserver .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM busybox
latest: Pulling from library/busybox
4b0bc1c4050b: Pull complete
Digest: sha256:817a12c32a39bbe394944ba49de563e085f1d3c5266eb8e9723256bc4448680e
Status: Downloaded newer image for busybox:latest
---> 7968321274dc
Step 2/2 : VOLUME /var/lib/mysql
---> Running in 0d0a53133dee
---> 02b98d920397
Removing intermediate container 0d0a53133dee
Successfully built 02b98d920397
# イメージの確認
$ docker images dataserver
REPOSITORY TAG IMAGE ID CREATED SIZE
dataserver latest 02b98d920397 26 minutes ago 1.11 MB
# コンテナの起動
$ docker run -it --name dataserver dataserver
/ # exit
# コンテナ確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4188faef2128 dataserver "sh" 26 minutes ago Exited (0) 25 seconds ago dataserver
创建Web服务器和数据库服务器的容器。
我们将在 web 服务器上使用 WordPress 的映像,在数据库服务器上使用 MySQL 的映像。
# webサーバ
webserver:
image: wordpress
# ポート転送設定
ports:
- "80:80"
# webサーバからdbサーバにコンテナ間リンクを指定します
links:
- "dbserver:mysql"
# dbサーバ
dbserver:
image: mysql
# データ保存先にデータ専用コンテナを指定します
volumes_from:
- dataserver
# 環境変数の設定
environment:
MYSQL_ROOT_PASSWORD: password
# コンテナの起動
$ docker-compose -f ./docker-compose-wordpress.yml up -d
# 確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ccbcfd423b49 wordpress "docker-entrypoint..." 27 minutes ago Up About a minute 0.0.0.0:80->80/tcp wordpress_webserver_1
f4c629a5deaa mysql "docker-entrypoint..." 27 minutes ago Up About a minute 3306/tcp wordpress_dbserver_1
4188faef2128 dataserver "sh" 47 minutes ago Exited (0) 20 minutes ago dataserver
访问 http://localhost 可以看到启动画面。
确认数据专用容器已挂载卷。
# コンテナにアタッチ
$ docker start -ia dataserver
/ #
# ボリュームを確認
/ # ls
bin dev etc home proc root sys tmp usr var
/ # ls /var/
lib spool www
/ # ls /var/lib/
mysql
/ # ls -ltr /var/lib/mysql/
total 188448
-rw-r----- 1 999 999 50331648 Jan 21 20:48 ib_logfile1
-rw-r----- 1 999 999 56 Jan 21 20:48 auto.cnf
drwxr-x--- 2 999 999 4096 Jan 21 20:48 performance_schema
drwxr-x--- 2 999 999 4096 Jan 21 20:48 mysql
drwxr-x--- 2 999 999 12288 Jan 21 20:49 sys
-rw-r----- 1 999 999 667 Jan 21 20:50 ib_buffer_pool
-rw-r----- 1 999 999 79691776 Jan 21 20:51 ibdata1
drwxr-x--- 2 999 999 4096 Jan 21 20:51 wordpress
-rw-r----- 1 999 999 50331648 Jan 21 20:51 ib_logfile0
-rw-r----- 1 999 999 12582912 Jan 21 20:53 ibtmp1
数据专用容器的备份和还原
通过使用docker export命令将数据专用容器导出为tar文件,可以进行备份。
此外,您还可以解压创建的tar文件并恢复数据专用容器。