Docker概要
コンテナ型の仮想化
「Docker」とは、Docker社(旧dotCloud)が開発するオープンソースのコンテナー管理ソフトウェアの1つです。
- アプリケーションを「コンテナ」にパッケージングとデプロイを行い実行する
- 1度ビルドすればどこでも動く
- Dockerfileで再現可能
- コンテナ仮想化により、高速にビルド、デプロイができる
- 仮想OSのオーバーヘッドがない
- 試験環境で動いているものをそのまま本番環境へ持っていける
- コンテナごとに固有のIDがあり、成功したものから保存していく
- 動かなかった場合は失敗した時点に戻ってやり直せる
- 依存関係ごとにバージョン切り替えとロールバックできる
- コンテナは1プロセスで動作する
Dockerのインストール
aptインストール
sudo apt-get install docker.io
apt-getでは最新版にならないので最新版をインストールする場合は
wget -q0- https://get.docker.com/ | sh
アップデートは
wget -N https://get.docker.com | sh
ユーザをdockerグループに追加する
dockerのソケットファイルにアクセスするためにrootかdockerグループのユーザである必要があるためdockerを使用するユーザに対してグループに追加する
sudo usermod -aG docker $USER
動作確認
コンテナの作成(例)
docker run -i ubuntu:15.10 /bin/bash
以下の様になればOK
root@ubuntu:/#
Dockerfile
Dockerfileの書き方
FROM centos:7
# subversion,apache,mod_dav_svnのインストール
RUN yum -y install subversion httpd mod_dav_svn
# ポート80開放
EXPOSE 80
# コンテナでの起動設定
ENTRYPOINT []
Dockerイメージの起動
runコマンド
docker run [オプション] イメージ [コマンド] [コマンドパラメータ]
主なオプション
オプション |
オプション(短縮形) |
オプションのパラメータ |
内容 |
–ip |
|
–ip IPv4アドレス |
IPv4のアドレスを設定する。指定しない場合はホストマシンのIPアドレスでNATする。 |
–ip6 |
|
–ip6 |
IPv6のアドレスを指定する。指定しない場合はホストマシンのIPアドレスでNATする。 |
–publis |
-p |
–publis=ホスト側のポート:コンテナ側のポート |
開放するポートを指定する |
docker-compose
dockerのコンポーネントをまとめて実行するためのモジュール
例えば、Redmineを立ち上げるためには、MySQL、redmine(Ruby on rails)、httpdを立ち上げる必要がある。
これらを1つのファイルにまとめて管理するのがdocker-componentである。
システムの終了、再起動などもまとめて1つで管理することができる。
docker-composeの後に続けるオプション
オプション |
内容 |
build |
YAMLにbuild:があればそのイメージをまとめてビルドする |
pull |
YAMLにimage:があれば素のイメージをまとめてプルする |
up -d |
docker-compose build, docker-compose pullをした後にdocker runを実行 |
up -d サービス |
個別のサービスを指定して実行。依存関係がある場合は関係するコンテナすべてが起動する。 |
logs |
関係するすべての出力を表示 |
stpo |
関係するコンテナをまとめて終了 |
rm |
関係するコンテナをまとめて削除 |
docker-compose.ymlの例
# MySQL
mysql:
restart: always
#MySQLイメージpull
image: mysql:latest
#コンテナ内の環境変数設定
environment:
DB_USER=mysql
DB_PASS=mysqladmin
DB_NAME=redmine
#ボリューム(ディスク)指定 ホスト:コンテナ[:アクセスモード]
volumes:
- /srv/docker/mysql:/var/lib/mysql
# ポート指定(ホスト:コンテナ)
ports:
- "3306:3306"
redmine:
image: sameersbn/redmine:3.2.3
# mysqlとリンク(依存関係)
links:
- mysql:mysql
environment:
- TZ=Asia/Tokyo
- REDMINE_PORT=10083
- REDMINE_HTTPS=false
- REDMINE_RELATIVE_URL_ROOT=
- REDMINE_SECRET_TOKEN=
- REDMINE_SUDO_MODE_ENABLED=false
- REDMINE_SUDO_MODE_TIMEOUT=15
- REDMINE_CONCURRENT_UPLOADS=2
- REDMINE_BACKUP_SCHEDULE=
- REDMINE_BACKUP_EXPIRY=
- REDMINE_BACKUP_TIME=
- SMTP_ENABLED=false
- SMTP_METHOD=smtp
- SMTP_DOMAIN=www.gmail.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=redmine@wing-sol.co.jp
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=:login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=redmine@wing-sol.co.jp
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_INTERVAL=30
ports:
- "10083:80"
volumes:
- /srv/docker/redmine/redmine:/home/redmine/data