sshできるdockerコンテナをつくるために最低限必要なこと
3ヶ月ぶりにDockerを触ったのですが、全てを忘れていて愕然としたので最低限必要なことをメモしておきます。 ホストOSは Mac OS X です。
Getting Started
Get Started with Docker for Mac OS X に立ち戻るのが基本です。
以下、Docker Toolbox をインストール済で、OS X のコンソールから docker コマンドを実行できる前提で。
Docker image を build する
Dockerfile を用意します。
パッケージをインストールし、 /var/run/sshd を作成するという簡単なものです。 (きちんとやるなら MAINTAINER 等書く必要あると思いますが、ここでは省いてます)
ubuntu
FROM ubuntu:14.04 RUN apt-get update && apt-get -y upgrade && apt-get install -y build-essential libssl-dev libreadline-dev zlib1g-dev language-pack-ja RUN apt-get -y install openssh-server ufw curl RUN mkdir /var/run/sshd
debian
FROM debian:wheezy RUN apt-get update && apt-get -y upgrade && apt-get install -y build-essential libssl-dev libreadline-dev zlib1g-dev task-japanese sudo RUN apt-get -y install openssh-server ufw curl RUN mkdir /var/run/sshd
イメージをビルドします。
$ docker build -t kotaroito/ubuntu .
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE kotaroito/ubuntu latest c6ec79983625 18 seconds ago 485.5 MB
作成したイメージからコンテナを起動するには run サブコマンドを使います。また、 ps サブコマンドでコンテナの状態を確認できます。
$ docker run kotaroito/ubuntu $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93e06154f722 kotaroito/ubuntu "/bin/bash" 1 seconds ago Exited (0) 2 seconds ago naughty_pare
不要になったイメージは rmi サブコマンドで削除できます。
$ docker rmi -f c6ec79983625
DockerHub
Dockerhub を利用すれば、イメージの共有・再利用がカンタンです。 アカウントを作成したら、ログインしてプッシュすればokです。
$ docker login --username=kotaroito --email=****@**** $ docker push kotaroito/ubuntu
ssh / sudo できるようにする
最初に作成したイメージではコンテナに ssh / sudo できないので、必要な設定をDockerfileに加えていきます。
FROM ubuntu:14.04 RUN apt-get update && apt-get -y upgrade && apt-get install -y build-essential libssl-dev libreadline-dev zlib1g-dev language-pack-ja RUN apt-get -y install openssh-server ufw curl RUN mkdir /var/run/sshd RUN useradd -m kotaroito && echo "kotaroito:kotaroito" | chpasswd && gpasswd -a kotaroito sudo RUN mkdir -p /home/kotaroito/.ssh; chown kotaroito /home/kotaroito/.ssh; chmod 700 /home/kotaroito/.ssh ADD ./authorized_keys /home/kotaroito/.ssh/authorized_keys RUN chown kotaroito /home/kotaroito/.ssh/authorized_keys; chmod 600 /home/kotaroito/.ssh/authorized_keys CMD /usr/sbin/sshd -D && tail -f /dev/null
最後のCMDはコンテナがexitしない工夫です。 あとは、buildして run すれば ok ですが、sudo するために privileged オプションを付けておきます。
$ docker build -t kotaroito/ubuntu . $ docker run --privileged -d -p 2222:22 kotaroito/ubuntu
コンテナは Mac OS X の上で直接稼働しているわけではなく、VM(VirtualBox 等)上で動いてるので、ssh するためには VMのIPアドレスを調べる必要があります。
$ docker-machine ip default 192.168.99.100
これで ssh することができます。
$ ssh -v kotaroito@192.168.99.100 -p2222
なお、sshd を docker コンテナで走らせる必要はない、という議論もあります。 production で使うならこれはその通りだと思います。
以上。
追記(2017年10月)
Docker Toolbox on Mac OSは "Legacy desktop solution." です。 アンインストールするには、公式に提供されているスクリプト toolbox/uninstall.sh at master · docker/toolbox · GitHub を使えばよいです。