技術関連の覚書

案件でやったり自宅で試したことの覚書

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を立ち上げるためには、MySQLredmine(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