LoginSignup
17
16

More than 5 years have passed since last update.

Dockerコンテナの定義、実行の自動化

Posted at

docker-composeを使うと、複数コンテナの構成をコードで定義でき
実行することができます。

docker-swarmと合わせて使う事で、
複数ホスト間でのスケールイン/スケールアウトが簡単になります。

1. 実行環境

  • OS: Max OSX

2. 必要ソフトウェア

  • docker
  • docker-compose
  • docker-machine
  • docker-swarm
  • virtualbox

全てbrewからインストールできます。

$ brew search docker                             
boot2docker           docker-machine (installed)        homebrew/versions/boot2docker141  homebrew/versions/docker141   homebrew/versions/docker171
docker (installed)        docker-swarm (installed)      homebrew/versions/boot2docker162  homebrew/versions/docker150
docker-compose (installed)    homebrew/versions/boot2docker133  homebrew/versions/docker133       homebrew/versions/docker162
homebrew/completions/boot2docker-completion    homebrew/emacs/dockerfile-mode             Caskroom/cask/docker-compose           Caskroom/cask/docker
homebrew/completions/docker-completion         Caskroom/cask/boot2docker-status           Caskroom/cask/docker-machine-driver-parallels  Caskroom/cask/dockertoolbox
homebrew/completions/docker-machine-completion     Caskroom/cask/boot2docker                  Caskroom/cask/docker-machine

$ brew cask search virtualbox 
==> Exact match
virtualbox
==> Partial matches
virtualbox-extension-pack

3. Swarmでコンテナのクラスタリング

Dockerコンテナをクラスタリングするを参照下さい。

4. docker-compose.ymlを作成

docker-compose.ymlでコンテナの構成を定義します。

  • docker-compose.yml
docker-compose.yml
web:
  image: tutum/hello-world
  ports:
    - 80:80
redis:
  image: redis:latest

5. コンテナを起動する

以下のコマンドで、docker-compose.yml通りにコンテナが構築されます。

$ docker-compose up -d

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                       NAMES
ac93efeba148        redis:latest        "/entrypoint.sh redis"   7 minutes ago       Up 6 minutes        6379/tcp                    cl-node2/robotconnect_redis_1
29faddfd38f1        tutum/hello-world   "/bin/sh -c 'php-fpm "   8 minutes ago       Up 6 minutes        192.168.99.108:80->80/tcp   cl-node1/robotconnect_web_1

6. スケールアウト/スケールイン

scaleコマンドで、イメージのコンテナ数を自由に変更できます。

  • webサーバーを3つ起動する
$ docker-compose scale web=3
Creating and starting 2... done
Creating and starting 3... done

$ docker ps                 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                       NAMES
3690c5a756a3        tutum/hello-world   "/bin/sh -c 'php-fpm "   35 seconds ago      Up 34 seconds       192.168.99.109:80->80/tcp   cl-node2/robotconnect_web_3
bec52a263c98        tutum/hello-world   "/bin/sh -c 'php-fpm "   35 seconds ago      Up 34 seconds       192.168.99.107:80->80/tcp   cl-manager/robotconnect_web_2
ac93efeba148        redis:latest        "/entrypoint.sh redis"   8 minutes ago       Up 7 minutes        6379/tcp                    cl-node2/robotconnect_redis_1
29faddfd38f1        tutum/hello-world   "/bin/sh -c 'php-fpm "   8 minutes ago       Up 7 minutes        192.168.99.108:80->80/tcp   cl-node1/robotconnect_web_1
  • webサーバーを1つにする
$ docker-compose scale web=1
Stopping robotconnect_web_2... done
Stopping robotconnect_web_3... done
Removing robotconnect_web_3... done
Removing robotconnect_web_2... done

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                       NAMES
ac93efeba148        redis:latest        "/entrypoint.sh redis"   8 minutes ago       Up 7 minutes        6379/tcp                    cl-node2/robotconnect_redis_1
29faddfd38f1        tutum/hello-world   "/bin/sh -c 'php-fpm "   9 minutes ago       Up 7 minutes        192.168.99.108:80->80/tcp   cl-node1/robotconnect_web_1
17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16