手頃な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
- イメージを指定、ここではubuntu:vivid(15.04)
- apt-getでパッケージをインストール(git/python/openssh-server/sudo)
- port:22 を開放
- dockerユーザを作成
- dockerユーザでssh公開鍵認証できるようauthorized_keysファイルを設置
- sshdのpidファイル用ディレクトリを作成
- 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アドレス設定を行いたいと思います。
脚注