明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

Docker の勉強

インストールしてみる

Dockerは公式には64bit版しかサポートしていないため、Docker用にUbuntu 14.04 64bitのVMイメージを作成します。

インストール手順は、公式の通りにやってみる。

$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

このままでは、最新の版は使えないので、以下の手順で最新のバージョンに更新する。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update

これで、最新バージョンのDockerがインストールできた。

$ sudo docker run -i -t ubuntu /bin/bash

とすると、ubuntuのコンテナをダウンロードしてきてログイン操作できる。

実践チュートリアル

最終的には、ハコニワの環境をすべてコンテナ上に移動させたいけど、どんなことができるのか、ネットで公開されている手順を片っ端から試してみる。

  1. Dockerでnginxサーバー立ててみた。あとDockerの使い方とか。

以下の様なDockerfileを作成する。

# ubuntu をベースにする.
FROM ubuntu

# 作成者.
MAINTAINER tkenji

RUN apt-get update
RUN apt-get install -y python-software-properties software-properties-common
RUN add-apt-repository -y ppa:nginx/development
RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y supervisor openssh-server nginx

RUN useradd -d /home/docker -m -s /bin/bash docker
RUN echo "docker:docker" | chpasswd
RUN echo "docker ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN echo -e "LANG='ja_JP.UTF-8'" > /etc/default/local

# sshd setup
RUN sed -i -e '/^UsePAM\s+yes/d' /etc/ssh/sshd_config
RUN mkdir -p /var/run/sshd
RUN /etc/init.d/ssh start && /etc/init.d/ssh stop
RUN sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd

# supervisor setup
RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE 22 80

CMD ["/usr/bin/supervisord"]

上記 Dockerfile のあるディレクトリで以下のコマンドを実行する。

sudo docker build --no-cache --rm -t test/nginx .
sudo docker run -d -i -p 49153:22 -p 49154:80 -t test/nginx /bin/bash

これで、コンテナが起動できる。

ホントは、自動的にsshdとnginxを実行したいけど、上記のCMDではダメだったので、別途調査する。

今は、以下のコマンドでアタッチしてから、サーバを起動する。

sudo docker attach <コンテナID>

※ コンテナIDは sudo docker ps で表示できる。(ここに表示されない場合はコンテナが停止しているのでアタッチできない) アタッチした場合は、ubuntuであってもrootでログインできるらしい。

/usr/bin/supervisord

ポートはコンテナの 22 をホストの 49153 に、 8049154 に接続しているので、それぞれ接続すれば外部からアクセスできる。

思惑としては、DockerfileCMDsupervisord が起動して欲しいんだけど、 CMD の使い方間違ってるのか!?