はじめに
Dockerを組織で使おうとすると、公開リポジトリ以外のリポジトリが欲しくなります。
今回は、EC2+S3を使ったお手軽Private Repositoryの作り方のメモです。
S3をリポジトリのStorageにすることで、Instanceの容量を気にしなくて良くなります。
手順
流れ
-
S3のBucketを作成する
-
IAM Userを作成する
-
EC2 Instanceを作成する
-
Docker の Install
-
Docker Repositoryの設定
-
S3のBucketを作成する
普通にAWSのConsoleから S3のBucketを作成します。
my-docker という名前で作ったとします。
Regionは(3)のEC2のRegionと同じものにしましょう。
- IAM Userを作成する
作成したBucketに対してFull AccessできるUserを作成します。
その AWS_KEY , AWS_SECRET はちゃんと保存しておいてください。
Policyは例えば、以下のようにしておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::my-docker/*", "arn:aws:s3:::my-docker"]
},{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
}
]
}
今回はListAllMyBuckets
の権限は無くても動くような気がしますが、あった方が便利なときもあるので付けておきます。
- EC2 Instanceを作成する
今回は以下の設定を選びました。
- Instanceは micro instance
- OS: Ubuntu Server 13.10 - ami-b945ddb8 (64-bit)
- SecurityGroup で docker_repo というのを作り、 22, 80 を とりあえず ANY で開けておいた。
80番Portは後ほどIPアドレスで絞るかELBからのみの設定にします。
この Instanceの Host名は my-docker.example.com とします(Route53や適切なDNSに登録する、という想定。IPアドレス可ですが、後々不便だとは思います)。
- Docker の Install
http://docs.docker.io/en/latest/installation/amazon/ の手順で行います。
QuickStart のやり方だと動かなかったので、 Standard Ubuntu Installation の方法で行いました。
以下のようにしてDocker環境をSetupします。
# ssh -i KEY ubuntu@HOSTIP
sudo apt-get update
sudo apt-get install linux-image-extra-`uname -r`
sudo apt-key adv --keyserver keyserver.ubuntu.com --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
sudo apt-get install lxc-docker
- Docker Repositoryの設定
動作確認
まず、Docker RepositoryのImageが起動するか確認します。
sudo docker run -p 80:5000 -e SETTINGS_FLAVOR=prod -e AWS_KEY='<AWS_KEY>' -e AWS_SECRET='<AWS_SECRET>' -e AWS_BUCKET=my-docker blalor/docker-s3-registry
無事に起動したら、自動起動の設定をします。
自動起動の設定
まず、以下のファイルを作成します。
description "Docker Repository Container"
start on started docker
stop on runlevel [!2345]
respawn
exec docker run -p 80:5000 -e SETTINGS_FLAVOR=prod -e AWS_KEY='<AWS_KEY>' -e AWS_SECRET='<AWS_SECRET>' -e AWS_BUCKET=my-docker blalor/docker-s3-registry
上記の設定を使って起動します。
sudo initctl reload-configuration
sudo initctl start docker-repository
動作確認
どこか別の場所からdockerを使って、Push成功すればOK.
docker pull centos
docker tag centos my-docker.example.com/centos
docker push my-docker.example.com/centos
課題
今回、SSLで接続する方法が上手く行きませんでした。
調べていくとサーバには正規のSSL証明書を使って docker login すれば良いというような記述が見受けられますが、
その docker login で
% docker login https://docker.example.com
2014/02/19 17:20:42 Invalid Registry endpoint: Get https://docker.example.com/v1/_ping: x509: certificate signed by unknown authority
となってダメでした。
% curl https://docker.example.com/v1/_ping
true
なので、証明書などはOKなのですが。
ELBでSSLのTerminationをさせているのも関係あるのかもしれません。
今後の課題としたいと思います。