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のコンテナをダウンロードしてきてログイン操作できる。
実践チュートリアル
最終的には、ハコニワの環境をすべてコンテナ上に移動させたいけど、どんなことができるのか、ネットで公開されている手順を片っ端から試してみる。
以下の様な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
に、 80
を 49154
に接続しているので、それぞれ接続すれば外部からアクセスできる。
思惑としては、Dockerfile
の CMD
で supervisord
が起動して欲しいんだけど、 CMD
の使い方間違ってるのか!?