手頃なdockerのcheat sheetがあったので、そちらを参考にシンプルなものを作成します。 1

<<http://lzone.de/cheat-sheet/Docker>>

FROM ubuntu:vivid
RUN apt-get update
RUN apt-get -y install git python openssh-server
EXPOSE 22
RUN useradd -m -d /home/docker -u 1000 -s /bin/bash docker
RUN mkdir /home/docker/.ssh
RUN chmod 700 /home/docker/.ssh
ADD authorized_keys /home/docker/.ssh/
RUN chmod 600 /home/docker/.ssh/authorized_keys
RUN chown -R docker:docker /home/docker/.ssh
RUN mkdir /var/run/sshd
RUN echo 'docker ALL=(ALL:ALL) NOPASSWD:ALL' >> /etc/sudoers
CMD ["/usr/sbin/sshd", "-D"]

ミドルウェアのインストールについてはansibleを使用して行う予定なので、ここでは必要最低限のものだけをインストールするようにしました。

ここで使用しているパターンは以下の通り。

  • FROM イメージ名
  • RUN コマンドライン
  • EXPOSE ポート
  • CMD コンテナ起動時に実行するコマンド

上に上げたDockerfileで行っていることは、以下のようになります。 2

  1. イメージを指定、ここではubuntu:vivid(15.04)
  2. apt-getでパッケージをインストール(git/python/openssh-server/sudo)
  3. port:22 を開放
  4. dockerユーザを作成
  5. dockerユーザでssh公開鍵認証できるようauthorized_keysファイルを設置
  6. sshdのpidファイル用ディレクトリを作成
  7. dockerユーザのsudo設定

この状態でまずは実行してみます。

$ docker build -t ubuntu-base .
...
$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
croissant/ubuntu-base   latest              b92c8ea9b42e        25 seconds ago      321.6 MB
ubuntu                  vivid               013f3d01d247        6 days ago          131.4 MB

イメージはできているようです。

それでは、作成したイメージを使用してコンテナを起動してみます。

$ docker run -t -i --name srv1 -d croissant/ubuntu-base
0211f0f72f4b2451ec07892c44d8c9c38c93f1496b3e11fda9cddaa8d553c45c
$ docker inspect srv1 | grep IPAddress
"IPAddress": "172.17.0.65",
$ ssh docker@172.17.0.65
$ docker run -t -i --name srv1 -d croissant/ubuntu-base
0211f0f72f4b2451ec07892c44d8c9c38c93f1496b3e11fda9cddaa8d553c45c
The authenticity of host '172.17.0.65 (172.17.0.65)' can't be established.
ECDSA key fingerprint is 53:53:1b:28:cc:6b:7f:76:3a:d9:10:74:0b:c1:0d:23.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.65' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 15.04 (GNU/Linux 3.16.0-4-amd64 x86_64)

docker inspect で起動中のコンテナに関する情報をjson形式で取得できます。 ここではIPアドレスを取得するのに使用しています。

次回は、ansibleによる環境構築自動化について…あるいは、コンテナに対しての固定IPアドレス設定を行いたいと思います。


脚注

  1. dockerにsshサーバをインストールするのはよろしくないという話をちらほら見かけますが、今回の試みでは開発環境としての利用のみ想定しており、環境構築の手段を流用することも考えているので、あえてインストールしています。

  2. RUNで指定するコマンドは、先にとりあえず作成できるイメージを用意して、ひとつずつ確認しながら記述したほうが良いです。間違いがあると、イメージを削除して作りなおす作業で結構な時間がかかりますので…



blog comments powered by Disqus