# Docker Private Registy
```{note}
codeの`$ xxx`はhost OS内,`# xxx`はdocker container内のターミナルを示す
```
## 0. OUTLINE
1. [Install Slack Plugin](#1-Slack-Plugin-%E5%8F%82%E7%85%A7)
1. [Configuration](#2-Configuration)
1. [Slack通知API test](#3-Slack通知API-test)
1. [Uninstall Slack Plugin](#4-Uninstall-Slack-Plugin)
## 1. Install Docker & Docker Compose
[ _公式ページ_ ](https://docs.docker.com)等を参考にして頑張る.
インストールされているか確認
docker:
```bash
$ docker -v
Docker version 20.10.3, build ...
```
docker-compose:
```bash
$ docker-compose -v
docker-compose version 1.28.2, build ...
```
## 2. Docker Compose
1. 下記添付ファイルをDownload: [docker-compose.yml](./data/docker-compose.yml)
``` bash
$ curl http://kobe-kosen-robotics.org:
```
1. (option): docker-compose.ymlを編集
```yaml
$ vi docker-compose.yml
version: "3.8"
services:
docker-registry:
image: registry:2.7.1
restart: always
stdin_open: true
tty: true
container_name: docker-registry # container_nameの設定
volumes:
- /home/admin/docker_hub/registry:/var/lib/registry # docker imageの共有保存先を指定
environment:
- REGISTRY_STORAGE_DELETE_ENABLED=true # 登録したimageの削除許可
ports:
- "5000:5000" # 公開ポート設定
networks: # container間のnetwork設定
registry-net:
ipv4_address: 192.168.123.2
# docker registry Web
docker-registry-frontend:
depends_on:
- docker-registry
image: konradkleine/docker-registry-frontend:v2
restart: always
stdin_open: true
tty: true
container_name: docker-registry-frontend # container_nameの設定
environment:
#- ENV_DOCKER_REGISTRY_HOST=docker-registry
#ENV_DOCKER_REGISTRY_HOST: "docker-registry"
- ENV_DOCKER_REGISTRY_HOST=192.168.123.2 # docker-registryのip or hostPCのip
- ENV_DOCKER_REGISTRY_PORT=5000 # docker-registryの公開したport
ports:
- "8080:80" # 公開ポートの指定
networks: # container間のnetwork設定
registry-net:
ipv4_address: 192.168.123.3
networks: # conntainer間のnetwork作成
registry-net:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.123.0/24
# コンテナ間で通信をするため,仮想ネットワーク(192.168.123.0)を作成.
# 各コンテナにip addressを割り振ることで, host-firewallを経由することなく,直接通信ができる
# ref:https://knowledge.sakura.ad.jp/26522/
# ref(option):https://sleepless-se.net/2019/09/15/multi-docker-compose-network-setting/
```
## 3. FireWall(Ubuntu)
Ubuntu以外を利用している場合は, 各OSのFireWall設定に従う.
1. FireWallのstatusを確認
```bash
$ sudo ufw status
```
1. 今回は[2. Docker Compose](#2-Docker-Compose)より, `port: 5000, 8080` を使用許可する
```bash
$ sudo ufw allow 5000 8080
```
1. もう一度 1. FireWallのstatusの確認を行い,許可した番号が追加されていることを確認する.
## 4. Creates, Starts and Attachs to Container
- コンテナの作成,起動&コンテナに入る:
```bash
$ docker-compose up
```
- コンテナに入る必要がない(起動するだけ)の場合, detach optionを追加:
```bash
$ docker-compose up -d
```
## 5. Pushing an image
1. Create tag
pushをする前に,どこのregistryで何という名前かを示す必要があるため,tag付けをする
```bash
$ docker tag [pushするimage] [registry起動PCのIPaddress]:[公開port]/[作成者等]/[image名]:[tag(version)]
```
1. Push image
tag付けしたimageを選択して, pushする
```bash
$ docker push [registry起動PCのIPaddress]:[公開port]/[作成者等]/[image名]:[tag(version)]
```
1. Example
registry起動PCで実行した場合は, IP addressの部分を'localhost'と置き換えれる
```bash
$ docker pull ubuntu:20.04
$ docker tag ubuntu:20.04 localhost:5000/my/ubuntu:20.04
```
他のPCから利用する場合は, IP addressの部分を'192.168.123.123'などの数字にする
registry起動PCのIPaddress:192.168.10.10 の場合:
```bash
$ docker pull ubuntu:20.04
$ docker tag ubuntu:20.04 192.168.10.10:5000/my/ubuntu:20.04
```
## 6. 登録したImageをWebで確認
- registry起動PC: にアクセス
- 他のPC: http://[registry起動PCのIPaddress]:8080 にアクセス
## 7. 参考
1. [第45回 「プライベートレジストリ」を知る――HPEが使っているDockerイメージ管理](https://www.itmedia.co.jp/enterprise/articles/1707/28/news052.html)
1. [第46回 Dockerのプライベートレジストリを活用する(準備編)](https://www.itmedia.co.jp/enterprise/articles/1708/10/news052.html)
1. [第47回 Dockerのプライベートレジストリを活用する(運用編)](https://www.itmedia.co.jp/enterprise/articles/1708/25/news014.html)
1. [ブラウザでレジストリを確認](https://qiita.com/rsakao/items/617f54579278173d3c20#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88docker-registry-frontend)
1. [Cent OSでFireWall設定など(ConoHa VPS)](https://qiita.com/henkeizyu/items/801413fde4820c8873e4)
1. [delete image on docker-registry]()