ホーム DoRuby Docker を試してみる(1)

Docker を試してみる(1)

この記事はアピリッツの技術ブログ「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>

次回はもうちょっと進んだ使い方を説明します。

記事を共有

最近人気な記事