32
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EC2+S3を利用してDockerのPrivate Repositoryを作る

Last updated at Posted at 2014-02-19

はじめに

Dockerを組織で使おうとすると、公開リポジトリ以外のリポジトリが欲しくなります。
今回は、EC2+S3を使ったお手軽Private Repositoryの作り方のメモです。
S3をリポジトリのStorageにすることで、Instanceの容量を気にしなくて良くなります。

手順

流れ

  1. S3のBucketを作成する

  2. IAM Userを作成する

  3. EC2 Instanceを作成する

  4. Docker の Install

  5. Docker Repositoryの設定

  6. S3のBucketを作成する


普通にAWSのConsoleから S3のBucketを作成します。
my-docker という名前で作ったとします。
Regionは(3)のEC2のRegionと同じものにしましょう。

  1. 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の権限は無くても動くような気がしますが、あった方が便利なときもあるので付けておきます。

  1. 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アドレス可ですが、後々不便だとは思います)。

  1. 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
  1. 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

無事に起動したら、自動起動の設定をします。

自動起動の設定

まず、以下のファイルを作成します。

/etc/init/docker-repository.conf
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をさせているのも関係あるのかもしれません。

今後の課題としたいと思います。

32
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?