Vagrant AWS Provider で EC2 上に CoreOS のインスタンスを作成し、 Ubuntu 14.04 LTS のコンテナを乗っけて、 SSH で接続可能にする #vagrant #ec2 #coreos #docker
概要
Vagrant AWS Provider で EC2 上に CoreOS のインスタンスを作成し、 Ubuntu 14.04 LTS のコンテナを乗っけて、 SSH で接続可能にする
前提
- EC2 で security group を作成し、 ssh 用の該当ポートをあけておく
- EC2 で keypair を作成しておく
- Vagrant dotenv plugin をインストールしておく
- EC2 の環境変数の設定に利用します
- CoreOS 上の Docker コンテナに SSH 接続するのは推奨される作法ではないらしいのですが、諸事情があり利用します
- Docker の基本操作については下記参照
手順
Vagrant AWS Provider Plugin をインストール
vagrant plugin install vagrant-aws
ダミーの Vagrant box をダウンロード
Vagrant AWS Provider を利用する場合、ダミーの box が必要になります。
詳しくは、下記リンク先参照
Vagrant AWS Provider GitHub
vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
Vagrantfile の作成
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "dummy"
config.vm.provider :aws do |aws, override|
Dotenv.load # vagrant dotenv plugin を利用して .env ファイルから環境変数をロード
aws.access_key_id = ENV['ACCESS_KEY_ID']
aws.secret_access_key = ENV['SECRET_ACCESS_KEY']
aws.keypair_name = ENV['KEY_PAIR_NAME']
aws.region = "ap-northeast-1"
aws.ami = 'ami-858eb884' # CoreOS のマシンイメージ
aws.instance_type = 't1.micro'
aws.security_groups = 'sample' # CoreOS への接続用と、 Ubuntu
override.ssh.username = "core"
override.ssh.private_key_path = "~/.ssh/sample.pem"
end
end
.env の作成
ACCESS_KEY_ID=your_access_key
SECRET_ACCESS_KEY=your_secret_access_key
KEY_PAIR_NAME=sample
EC2 に CoreOS インスタンスを作成
Vagrant up でインスタンスを作成します
$ cd /path/to/your/vagrant_file
$ vagrant up --provider=aws
# $ vagrant.exe up --provider=aws # windows の場合は exe を実行する
EC2 上の CoreOS に ssh 接続する
$ cd /path/to/your/vagrant_file
$ vagrant ssh
# $ vagrant.exe ssh # windows の場合は exe を実行する
Last login: Thu Dec 4 07:38:23 2014 from localhost
CoreOS (stable)
core@ip-some_ip ~ $ whoami
core
core@ip-some_ip ~ $ docker version
Client version: 1.2.0
Client API version: 1.14
Go version (client): go1.3.1
Git commit (client): fa7b24f
OS/Arch (client): linux/amd64
Server version: 1.2.0
Server API version: 1.14
Go version (server): go1.3.1
Git commit (server): fa7b24f
※ ssh コマンドで接続してもよい
$ ssh -i ~/.ssh/sample.pem core@some_ip
Dockfile の作成
core@some_ip ~ $cat << EOF > Dockerfile
FROM ubuntu:trusty
MAINTAINER your_name <some@mail_address.hogehoge.co.jp>
RUN apt-get update
RUN apt-get install -y openssh-server
RUN useradd -m -s /bin/bash core
RUN mkdir -p /home/core/.ssh; chown core:core /home/core/.ssh; chmod 700 /home/core/.ssh
ADD .ssh/authorized_keys /home/core/.ssh/
RUN chown core /home/core/.ssh/authorized_keys; chmod 600 /home/core/.ssh/authorized_keys
RUN chown -R core:core /home/core/.ssh
RUN echo "core ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/core
RUN /etc/init.d/ssh start
RUN /etc/init.d/ssh stop
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
EOF
イメージの作成
core@some_ip ~ $ sudo docker build -t="sample/ubuntu:trusty" .
イメージの確認
core@some_ip ~ $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sample/ubuntu trusty 7739e9be341f 16 hours ago 255.7 MB
<none> <none> 0b9f16a0bfe8 18 hours ago 255.7 MB
ubuntu trusty 86ce37374f40 9 days ago 192.7 MB
コンテナの起動
- -d はデタッチモード。コンテナをバックグラウンドで実行。
- -p はポートフォワードの設定
core@some_ip ~ $ sudo docker run -d -p 2222:22 sample/ubuntu:trusty /usr/sbin/sshd -D
起動確認
core@some_ip ~ $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fac64bc7c27 sample/ubuntu:trusty "/usr/sbin/sshd -D" 49 minutes ago Up 49 minutes 0.0.0.0:2222->22/tcp thirsty_heisenberg
ローカル環境からの接続確認
$ ssh -i ~/.ssh/sample.pem core@some_ip -p 2222
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-58-generic x86_64)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$ whoami
core
Complete !
ハマりポイント
- Dockerfile で ADD を利用するの際に dis のディレクトリの最後に
/
(スラッシュ) をつけること。
サンプルの設定が載ったいくつかのサイトがスラッシュなしのだったのでハマった。
参照
Docker (土曜日に podcast します)
coreos-vagrantでDockerしてみてわかったこととかハマったこととか
dockerのUbuntuにsshで接続するAdd Star
Vagrant AWS Provider GitHub