なぜDockerがよいのか
- 永続化コンテナを使えばデータベースのスナップショットが保存できる
- 別のLinuxBoxで実行環境をコピーできる
- 1台のマシン上で複数のコンテナを実行できるためリソースの有効利用ができ効率的で安全
- 仮想環境上のLinuxBoxで実行できる
今回の検証環境
- vagrantのイメージ bento/cntos-7.1 をベースにしたもの
- VirtualBox
OSを最新にする
$ sudo yum update -y
$ sudo systemctl disable firewalld
$ sudo vi /etc/sysconfig/selinux
SELINUX=disabled
OSを再起動
インストール
$ sudo yum install docker -y
$ sudo systemctl start docker
$ sudo systemctl status docker
$ sudo systemctl enable docker
dockerの動作確認
sudo を使わないと動かないので注意
ユーザ権限で動かす方法もあるかよくわからなかった
$ sudo docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-253:0-67396965-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 2.407 GB
Data Space Total: 107.4 GB
Data Space Available: 37.68 GB
Metadata Space Used: 2.552 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.145 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.93-RHEL7 (2015-01-28)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-229.20.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 1
Total Memory: 1.462 GiB
Name: crystal
ID: Y5N5:VL7S:KKQC:JYZT:25PI:6FKP:S3MJ:T254:AOLZ:S6QA:UC3Q:VELQ
MySQL docker
イメージの検索
$ sudo docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 1383 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 70 [OK]
docker.io docker.io/orchardup/mysql 42 [OK]
docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 28 [OK]
docker.io docker.io/wnameless/mysql-phpmyadmin MySQL + phpMyAdmin https://index.docker.io... 25 [OK]
docker.io docker.io/sameersbn/mysql 21 [OK]
イメージの取得
$ sudo docker pull mysql:5.6
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/mysql latest 917f04aa61ad 7 days ago 359.8 MB
docker.io/mysql 5.6 d99302287ecc 7 days ago 324.2 MB
コンテナの実行から終了まで
$ sudo docker run --name mysql_instance -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.6
bc4849729617569b34169a7cc2944e37128e6f57e1bc7408051a0ddc33fe0f82 ← ランダムなハッシュ値が返る
# コンテナの情報が JSON 形式で取得
$ sudo docker inspect mysql_instance
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc4849729617 mysql "/entrypoint.sh mysql" 7 minutes ago Up 7 minutes 3306/tcp mysql_instance
# 終了させる
$ sudo docker stop mysql_instance
mysql_instance
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc4849729617 mysql "/entrypoint.sh mysql" 10 minutes ago Exited (137) 26 seconds ago mysql_instance
$ sudo docker rm mysql_instance
サーバに接続する
$ sudo docker run --name mysql_instance -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.6
$ sudo docker run -it --link mysql_instance:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
CentOS container
$ docker pull centos:latest
$ docker run -it -h myhostname --rm centos:latest /bin/bash
[root@myhostname /]#
コンテナの変更を保存する
コンテナにミドルウエアや設定などをインストールしたものをレポジトリにイメージとして保存する
実行中のものは一時中断(paused)になるので注意
$ docker commit container_name bibio/myimage:latest
イメージのサイズは大きくなるのでディスクサイズの管理には注意が必要
永続化させる
ホスト上のディスクに設置する
docker run
の -v
オプションを使用するとコンテナ上にマウントできる
$ sudo docker run -v /home/vagrant/var/lib/mysql:/var/lib/mysql --name mysql_instance -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.6
$ sudo docker run -it --link mysql_instance:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'