目次
この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
■ はじめに
共有の開発やCIサーバにMySQLの別のバージョンを使いたい!ってときにOSに共存させるのは結構面倒で、最悪壊したりしてしまいます。
そんなときに、Docker は便利です。
Dockerは仮装マシンではなくOS上で仮想環境を構築するソフトウェアです。
Linuxコンテナ型仮想化技術を使ってますが、vagrantと同様に簡単に使える環境が整っています。
今回はその使い方を調べてみました。
■ インストール
今回はCentOS7を使いますが、せっかくなので vagrant を使いましょう。
前準備
以下のソフトウエアを準備します。
- VirtualBox 5.0.14
- vagrant 1.8.1
- bento/chentos-7.1 (virtualbox, 2.2.2)
適当なフォルダで次のコマンドを実行します。
$ vagrant init bento/chef-7.1
$ vagrant up
$ vagrant ssh
準備はできましたか?
ログイン後、dockerの動く環境であるか一応確認します。
- 64bitであること
- Kernel 3.10 以降であること
[vagrant@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
インストール
CentOS7のextrasレポジトリに docker 1.8.2 がありますが、今回はdocker公式のものを使います。
repository の登録
デフォルトで有効にしちゃってますので、気に入らなければ enabled = 0 を設定してください。
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# cat > /etc/yum.repos.d/docker.repo <<'EOF'
[dockerrepo]
name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF [root@localhost ~]# cat /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg
インストール
[root@localhost ~]# yum install docker-engine -y
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
Active: active (running) since ...
[root@localhost ~]# systemctl enable docker
一般ユーザで動かす
デフォルトではdockerはrootユーザしか使えません。
一般ユーザで使うためには docker グループに追加します。
[vagrant@localhost ~]$ sudo gpasswd -a vagrant docker
コンテナを起動してみる
使用するコンテナを探す
vagrant と同様にコンテナのイメージは Docker Hubで公開されています。
コマンドラインからも検索できますが、今回は Webから mysql 用のコンテナを探してみましょう。
https://hub.docker.com/explorer
現在対応しているのは 5.5, 5.6, 5.7 の3種類ですが、今回は 5.7 を使います。
でも、わざわざダウンロードする必要はありません。自動的にpullしてくれます。
使用するコンテナを実行する
以下のコマンドを実行して、仮想環境にログインしてみましょう。
[vagrant@localhost ~]$ docker run -t -i --rm mysql:latest /bin/bash
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
...
Status: Downloaded newer image for mysql:latest
root@4e05429b2b2f:/#
プロンプトが返ってきたら成功です。もう仮想環境の中です。
-iインタラクティブモード-t端末を使用する–rm終了時にコンテナを削除する
実行中のコンテナを確認する
別の端末を起動して、以下のコマンドを実行してみます。
[vagrant@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e05429b2b2f mysql:latest "/entrypoint.sh /bin/" 4 minutes ago Up 4 minutes 3306/tcp pensive_payne
コンテナの一覧が表示されます。
IMAGE実行中のコンテナCOMMAND実行中のコマンドSTATUSステータスNAMESコンテナの名前(指定するか勝手に付けられる)
今回は STATUS が 「Up 4 minutes 」なので起動中と分かります。
コンテナを終了させる
stop コマンドを使います。引数には ps コマンドで出力された NAMES の値を指定します。
[vagrant@localhost ~]$ docker stop pensive_payne
pensive_payne
pensive_payne にはpsコマンドのNAMESの値を指定してください。
もう一度コンテナの一覧をみてみます。
[vagrant@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
なにも表示されなくなりました。
MySQLを使う
次は mysqlサーバを起動します。
起動
run コマンドを使います。
[vagrant@localhost ~]$ docker run -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
8e05ca461fa74135cf84e1f0f5f2e229810b40402e865c28fc593320bd26ba3a
[vagrant@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e05ca461fa7 mysql:latest "/entrypoint.sh mysql" 19 seconds ago Up 15 seconds 3306/tcp small_lichterman
-dデタッチオプション。コンテナをバックグラウンドで動作させる
mysql コンテナはmysqldをフォアグラウンドで起動するので、サーバとして起動させるならば -d オプションは必須です。
サーバに接続する
コンテナ中の mysql クライアントを使って接続するには以下の通り。
[vagrant@localhost ~]$ docker exec -it small_lichterman sh -c 'mysql -uroot -p'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.10 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>
次回はもうちょっと進んだ使い方を説明します。