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文件并恢复数据专用容器。

广告
将在 10 秒后关闭
bannerAds