ホーム >

Docker

dockerのインストール

centosにdockerをインストールするには、まずEPELレポジトリを有効化する必要がある。

sudo rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

続いて、yumコマンドでdockerをインストールする。

sudo yum install docker-io --enablerepo=epel

dockerでHello world

sudo docker pull busybox
sudo docker run busybox /bin/echo hello world

dockerコマンドの使い方

コンテナの起動

シェルを起動する場合は、-t -i オプションをつける

sudo docker run -t -i centos /bin/bash

バックグラウンドで起動する場合は、-d オプションを付ける

sudo docker run -d centos /usr/sbin/nginx

コンテナの一覧の表示

動作中のコンテナの一覧を表示する

sudo docker ps

終了したコンテナを含めて全てのコンテナの一覧を表示する

sudo docker ps -a

コンテナIDを省略せずに表示する

sudo docker ps -a --no-trunc

コンテナの削除

sudo docker rm [コンテナID]

コンテナを全て削除するには、以下のコマンドを実行する

sudo docker rm `sudo docker ps -a --no-trunc -q`

イメージの一覧の表示

sudo docker images

コンテナのコミット

sudo docker commit [コンテナID] [リポジトリ]:[タグ]

sudo docker commit 1dd76cd415a9 local/centos:test

コンテナとのファイルの共有

ホストとコンテナでファイルを共有する場合、コンテナを起動する際に、-v オプションで共有するディレクトリとマウントポイントを設定する。 以下の例では、ホストのカレントディレクトリとコンテナの/dockerディレクトリを共有する。

sudo docker run -t -i -v `pwd`:/docker centos /bin/bash

リードオンリーで共有することで、コンテナからファイルを作成・変更できないようにする。

sudo docker run -t -i -v `pwd`:/docker:ro centos /bin/bash

コンテナのバックアップを作成する

sudo docker export [コンテナID] > container-image.tar

バックアップしたイメージはdocker importコマンドでインポートして使用することができる。

cat container-image.tar | sudo docker import - [リポジトリ]:[タグ]

CentOS 6.5のベースイメージの作成

febootstrapコマンドでCentOSのファイルシステムを作成し、tarコマンドで書庫化する。

sudo -i
yum install febootstrap xz

MIRROR_URL="http://ftp.riken.jp/Linux/centos/6.5/os/x86_64/"
MIRROR_URL_UPDATES="http://ftp.riken.jp/Linux/centos/6.5/updates/x86_64/"

cd /tmp
febootstrap -i bash \
            -i coreutils \
            -i tar \
            -i bzip2 \
            -i gzip \
            -i vim-minimal \
            -i wget \
            -i patch \
            -i diffutils \
            -i iproute \
            -i yum \
            centos centos65 $MIRROR_URL -u $MIRROR_URL_UPDATES
tar --numeric-owner -Jcpf centos-65.tar.xz -C centos65 .
exit

作成したtarファイルをインポートする。

cat centos-65.tar.xz | sudo docker import - local/centos:6.5

作成したイメージの動作確認

sudo docker run local/centos:6.5 /bin/echo hello world

Ubuntu 14.04のベースイメージの作成

debootstrapコマンドでUbuntuのファイルシステムを作成し、tarコマンドで書庫化する。

sudo -i
apt-get install debootstrap
debootstrap --variant=minbase --arch=amd64 trusty /tmp/ubuntu-14.04 http://jp.archive.ubuntu.com/ubuntu/
tar --numeric-owner -Jcpf /tmp/ubuntu-14.04.tar.xz -C /tmp/ubuntu-14.04 .
exit

作成したtarファイルをインポートする。

cat /tmp/ubuntu-14.04.tar.xz | sudo docker import - local/ubuntu:14.04

非rootユーザでdockerコマンドを使用可能にする

dockerのソケットファイル(/var/run/docker.sock)はdockerグループに書き込み権限が与えられているので、dockerコマンドを使用したユーザをdockerグループに参加させることで、sudoを使用しなくてもdockerコマンドが使用可能になる。

sudo gpasswd -a [ユーザ名] docker

nsenterコマンドで起動中のdockerコンテナに入る

起動中のdockerコンテナに入るには、nsenterコマンドを使用する。 nsenterコマンドは最新のutil-linuxに含まれているが、例えば、Ubuntu14.04のutil-linuxには含まれていない。 従って、それらのディストリビューションでは、ソースをコンパイルしてインストールする必要がある。

sudo apt-get -y build-dep util-linux
git clone git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
cd util-linux
git checkout -b work_v2.24.2 v2.24.2

./autogen.sh
./configure --prefix=/opt/util-linux/2.24.2
make -j4
sudo make install
sudo ln -s /opt/util-linux/2.24.2/bin/nsenter /usr/local/bin/nsenter

以下のスクリプトを実行することで、指定したdockerコンテナ内でコマンドを実行することができる。 コンテナIDはdocker psで取得する。