- AmazonLinuxをホストとして、AmazonLinuxのコンテナを動かします
- SSH,HTTPを公開したコンテナを作ります
1. ホストの用意
- 以下の構成で始めてみました
AMI | Instance type |
---|---|
Amazon Linux AMI 2014.09.2 (HVM) | t2.medium |
dockerのインストール・起動
$ sudo yum install -y docker
$ sudo /etc/init.d/docker start
$ sudo chkconfig docker on
2. コンテナイメージの作成
- AmazonLinuxのコンテナを作ります
- http://dev.classmethod.jp/cloud/aws/docker-serverspec-configspec-ci/ の手順で作れました、先人に感謝!
-
- Amazon Linux EC2を普通にLaunchし、そのままStopします
- これがコンテナイメージの元になります
-
- そのEC2のEBS VolumeをDettach後、DockerがセットアップされたEC2にAttachし、mountします
- mount方法については http://dev.classmethod.jp/cloud/aws/ec2-investigate-detach-attach/ に詳しく書かれてます
- 上の文書に従い /mnt/ebs にマウントします
$ sudo mkdir /mnt/ebs
$ sudo mount /dev/xvdf1 /mnt/ebs/
-
- 不要なファイルを削除します
$ cd /mnt/ebs/
$ sudo rm -rf ./var/log/* ./var/cache/yum/* ./home/ec2-user/.ssh/authorized_keys
-
- イメージの作成、インポート
- 上記コマンドで3,4分ほどでした
- この時点ではまだ起動はしません(起動してもSSH接続できないので)
$ sudo tar --numeric-owner -cjp . | sudo docker import - local/amzn
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
local/amzn latest 9d8833faf01f 4 minutes ago 810.1 MB
-
- EBS VolumeをアンマウントしDettachします
$ cd ~/
$ $ sudo umount /mnt/ebs/
-
- Dockerfileを用意します
- 場所はどこでも良いです
- http://matsukaz.hatenablog.com/entry/2014/11/17/190233 に書かれてるように、Dockerfileでauthorized_keysの権限を変更する必要があるようです(下記は対応済)
Dockerfile
FROM local/amzn
# PAM設定を変えておかないとsshがいきなり切れる
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
RUN passwd -f -u ec2-user
# start-stopしてhost_keyを作る
RUN service sshd start
RUN service sshd stop
# SSH接続の公開鍵ファイルの設置
ADD ./authorized_keys /home/ec2-user/.ssh/authorized_keys
RUN chmod 600 /home/ec2-user/.ssh/authorized_keys
RUN chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys
EXPOSE 22 80
-
- SSH接続で使用する公開鍵をauthorized_keysとして配置します
- 鍵がない場合は適当に作ってください
$ cp ~/.ssh/id_rsa.pub authorized_keys
-
- SSH接続できるイメージをビルドします
- イメージの完成です
- Dockerfile,authorized_keysは不要なので消してOKです
$ sudo docker build -t local/amznssh .
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
local/amznssh latest 2d3d4f7e4ff9 33 seconds ago 810.1 MB
local/amzn latest 9d8833faf01f 16 hours ago 810.1 MB
3. コンテナの起動
- コンテナを起動します
- sshを待ち受けるようにします
$ sudo docker run -d -p 22 -p 80 local/amznssh /usr/sbin/sshd -D
8b3b849ade972c9cb75c58f5912a6474fb5745b858e0269a368e5941fe7d460f
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b3b849ade97 local/amznssh:latest "/usr/sbin/sshd -D" 19 seconds ago Up 18 seconds 0.0.0.0:49153->22/tcp, 0.0.0.0:49154->80/tcp focused_wilson
- sshログインできました
- ここでは49153番ポートで接続していますが、docker runの-pオプションで
-p 10022:22
のようにすれば待ち受けポートを指定することも可能です
- ここでは49153番ポートで接続していますが、docker runの-pオプションで
$ ssh 127.0.0.1 -p 49153
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@8b3b849ade97 ~]$
【おまけ】負荷について
- 1コンテナ起動した状態ではCPU/メモリともに余裕たっぷりといった感じでした
- (もちろん処理内容にもよりますが)micro/smallインスタンスでも十分に動かせるかもしれません