これからEC2を利用し、インスタンス1つでDockerコンテナをたくさん稼働してマイクロサービスをいろいろ作っていきたい。
サービスを開発していく環境でイメージをいろいろ管理していきたいので、Docker Hubの利用を検討したが、プライベートは有料なので自前でDocker Registryを作ることに。
Docker Registryはそこそこ容量がいるので、S3に保存することとする。
前提として
前回構築したSSL、リバースプロキシの環境も使っていきます。
はじめてのAWS EC2インスタンスにDockerインストール、docker-compseでnginx-proxyとletsencrypt-nginx-proxy-companionを使う
Docker Registryのイメージを取得する
$ docker pull registry:2.6.0
※ 最新バージョンはこちらで確認
https://github.com/docker/distribution/releases
Docker Registryのイメージを確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2.6.0 d1e32b95d8e8 2 weeks ago 33.17 MB
作業用ディレクトリを作成してdocker-compose.ymlを作成
$ mkdir /home/ec2-user/work
$ cd /home/ec2-user/work
$ vim docker-compose.yml
docker-compose.yml
docker-registry:
image: registry:2.6.0
container_name: docker-registry
privileged: true
ports:
- 5000
environment:
VIRTUAL_HOST: registry.example.com
LETSENCRYPT_HOST: registry.example.com
LETSENCRYPT_EMAIL: example@gmail.com
REGISTRY_STORAGE: s3
REGISTRY_STORAGE_S3_ACCESSKEY: [S3フルアクセスのIAMユーザーのアクセスキー]
REGISTRY_STORAGE_S3_SECRETKEY: [S3フルアクセスのIAMユーザーのシークレットキー]
REGISTRY_STORAGE_S3_BUCKET: [バケット名]
REGISTRY_STORAGE_S3_REGION: ap-northeast-1 ←東京リージョン
REGISTRY_STORAGE_S3_ROOTDIRECTORY: / ←バケットのディレクトを指定(ルートディレクトリ)
restart: always
※事前にregistry.example.com のドメイン設定は、EC2のIPかドメインに設定しておくこと
Docker Registryのコンテナを起動する
$ docker-compose up -d
Docker Registryを使ってみる
今回、ローカルからリモートのレジストリへpushしてみる
イメージ名を変更するためタグを貼る
プライベートレジストリにpushするためにはイメージの名前を変える必要があります。
docker tag [イメージ名]:[tag] [レジストリのIP、URL]:[ポート]/[任意のリポジトリ名]/[イメージ名]:[tag]
docker tag centos:latest registry.example.com/registry-test/centos
※今回、jwilder/nginx-proxyのコンテナがEC2のフロントにあり、ポートは443なるため、ポートの指定はしない。
イメージを確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.example.com/registry-test/centos latest 67591570dd29 7 weeks ago 191.8 MB
centos latest 67591570dd29 7 weeks ago 191.8 MB
イメージをプッシュする
docker push イメージ名
docker push registry.example.com/registry-test/centos
The push refers to a repository [registry.example.com/registry-test/centos]
3981cd79f308: Pushing [==================================================>] 122.1 MB/122.1 MB
34e7b85d83e4: Preparing
error parsing HTTP 413 response body: invalid character ・・・・・・・・・・・・・
HTTP 413 は、アップロードしようとしたデータサイズが大きいと怒られているのでnginxの上限値を上げたら解消される?あとで調査
S3に保存されているか確認する
バケット名の直下に「docker」ディレクトができいる。なんか保存されていそう。
/[バケット名]/docker/registry/v2/・・・
client_max_body_sizeの設定を追加
/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server_names_hash_bucket_size 128;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
client_max_body_size 1G; ←★1Gにしてみた
}
daemon off;
まだしてないこと
- basic認証をnginxで設定すること