# 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]()