Docker
- dockerのインストール
- dockerでHello world
- dockerコマンドの使い方
- CentOS 6.5のベースイメージの作成
- Ubuntu 14.04のベースイメージの作成
- 非rootユーザでdockerコマンドを使用可能にする
- nsenterコマンドで起動中の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で取得する。