その他
    ホーム 技術発信 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>
    

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