らくがきちょう

なんとなく

はじめての Docker

「Docker エキスパート養成読本」が出版されました。約 100 ページ程度で読みやすく、それでいて必要な情報はしっかり網羅されています。

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

今回は改めて docker の基本的な操作方法をまとめてみました。が、この記事を読む時間があれば「Docker エキスパート養成読本」を熟読することをお勧めします!

docker のインストール

CentOS7 の場合

通常であれば yum でインストールします。

$ sudo yum update
$ yum search docker
$ sudo yum install -y docker

現時点(2015/06/22)では 1.6.0 がインストールされるようです。

$ yum info docker
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
利用可能なパッケージ
名前                : docker
アーキテクチャー    : x86_64
バージョン          : 1.6.0
リリース            : 11.0.1.el7.centos
    ・
    ・
    ・

Docker 社が提供している rpm からインストールすることで、最新の docker を利用することが出来ます。今回はこちらの手法でインストールしました。

$ curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm
$ sudo yum localinstall --nogpgcheck docker-engine-1.7.0-1.el7.centos.x86_64.rpm

docker を起動します。

$ rpm -ql docker-engine | grep systemd
/usr/lib/systemd/system/docker.service
/usr/lib/systemd/system/docker.socket
$ sudo systemctl start docker.service

自動起動の設定も実施しておきます。

$ sudo systemctl enable docker.service

systemctl status を実行することで「起動中か?否か?」「自動起動設定はされているか?否か?」を確認することが出来ます。「Loaded」行の一番右側の表示は自動起動を意味します(enabled なら自動起動する、disabled なら自動起動しない)。「Active」行は起動中か、否かを意味します。

$ sudo systemctl status docker.service
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
   Active: active (running) since 月 2015-06-22 23:31:28 JST; 4min 6s ago
     Docs: https://docs.docker.com
 Main PID: 10672 (docker)
   CGroup: /system.slice/docker.service
           └─10672 /usr/bin/docker -d -H fd://

Ubuntu 14.04.2 LTS の場合

通常であれば apt-get でインストールします。

$ sudo apt-get update
$ apt-cache search docker.io
$ sudo apt-get -y install docker.io

現時点(2015/06/22)では 1.0.1 がインストールされるようです。かなり古いです。

$ apt-cache show docker.io
Package: docker.io
Priority: optional
Section: universe/admin
Installed-Size: 24103
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Paul Tagliamonte <paultag@debian.org>
Architecture: amd64
Version: 1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1
    ・
    ・
    ・

Docker 社のレポジトリから直接、docker をインストールすることで Ubuntu 環境でも最新の docker を利用することが出来ます。今回はこちらの手法でインストールしました。

$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
$ dpkg -l lxc-docker
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name             Version       Architecture  Description
+++-================-=============-=============-=====================================
ii  lxc-docker       1.7.0         amd64         Linux container runtime

Ubuntu 環境の場合、インストーラによって /etc/init/docker.info が作成されており、インストール直後の状態で既に docker が自動起動するよう設定されていました。

docker グループへのユーザ追加

docker の操作は主に docker コマンドで実施します。しかし通常、docker コマンドは root ユーザか、または docker グループに所属するユーザしか実行出来ません。Create a Docker groupに以下の記載があります。

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as the root user.

To avoid having to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

https://docs.docker.com/installation/ubuntulinux/#create-a-docker-group

そこで、docker 操作用ユーザを docker グループに追加します。

sudo gpasswd -a $USER docker
exit
( 再ログイン )

これで sudo を利用せずに docker コマンドを実行出来るようになりました。

Docker のライフサイクル

Docker のライフサイクルを図示すると、概ね以下のようになります。

f:id:sig9:20150623012541p:plain

イメージのダウンロード

Docker 用のイメージは Docker 社が運用する Docker Hub からダウンロードしたり、自作イメージをアップロードしたり出来ます。ここでは Docker Hub から Ubuntu のイメージをダウンロードしてみます。まずは docker search コマンドで "ubuntu" というキーワードに一致するイメージを Docker Hub から検索してみます。

$ docker search ubuntu
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                     Ubuntu is a Debian-based Linux operating s...   1835      [OK]
ubuntu-upstart             Upstart is an event-based replacement for ...   26        [OK]
tutum/ubuntu               Ubuntu image with SSH access. For the root...   25                   [OK]
torusware/speedus-ubuntu   Always updated official Ubuntu docker imag...   25                   [OK]
ubuntu-debootstrap         debootstrap --variant=minbase --components...   10        [OK]
rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of of...   4                    [OK]
maxexcloo/ubuntu           Docker base image built on Ubuntu with Sup...   2                    [OK]
nuagebec/ubuntu            Simple always updated Ubuntu docker images...   2                    [OK]
nimmis/ubuntu              This is a docker images different LTS vers...   1                    [OK]
alsanium/ubuntu            Ubuntu Core image for Docker                    1                    [OK]

実際にイメージをダウンロードしてみます。docker pull コマンドを使います。「リポジトリ名:タグ」という指定の仕方をしますが、タグ部分を省略すると「latest」を指定したのと同じ効果になります。但し、常に明示的にタグを指定することが推奨だそうです。

$ docker pull ubuntu:14.04.2

ダウンロード済みのイメージは docker images コマンドで確認出来ます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04.2             6d4946999d4f        10 days ago         188.3 MB

コンテナの起動

docker run コマンドで指定したイメージからコンテナを作成し、起動出来ます。-it オプションを指定した場合はフォアグラウンドで、-d オプションを指定した場合はバックグラウンドでコンテナが起動します。

$ docker run -it ubuntu:14.04.2 /bin/bash
root@d68ea339bb87:/#