Docker
Docker概要
コンテナ型の仮想化
「Docker」とは、Docker社(旧dotCloud)が開発するオープンソースのコンテナー管理ソフトウェアの1つです。
- アプリケーションを「コンテナ」にパッケージングとデプロイを行い実行する
- 1度ビルドすればどこでも動く
- Dockerfileで再現可能
- コンテナ仮想化により、高速にビルド、デプロイができる
- 仮想OSのオーバーヘッドがない
- 試験環境で動いているものをそのまま本番環境へ持っていける
- コンテナごとに固有のIDがあり、成功したものから保存していく
- 動かなかった場合は失敗した時点に戻ってやり直せる
- 依存関係ごとにバージョン切り替えとロールバックできる
- コンテナは1プロセスで動作する
Dockerのインストール
Debian系
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