Flower in my ops/CI\CD

<Docker> local(private) registry 구축

꽃선생 2020. 11. 25. 12:30

Private Registry

더보기
[vagrant docker]$ docker pull registry:latest
latest: Pulling from library/registry
cbdbe7a5bc2a: Pull complete
47112e65547d: Pull complete
46bcb632e506: Pull complete
c1cc712bcecd: Pull complete
3db6272dcbfa: Pull complete
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[vagrant docker]$ docker images registry
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2d4f4b5309b1        5 months ago        26.2MB
[vagrant docker]$ docker run --name flower-registry \
> -d --restart=always \
> -p 5000:5000 \
> -v /app/docker/registry:/var/lib/registry/docker/registry/v2 \
> registry:latest
2e6c6c78d3cacdf1fda8e37d5cf3f3f6f33a69dd9cbf391a7c44a1a1bd4bcbbd
[vagrant docker]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2e6c6c78d3ca        registry:latest     "/entrypoint.sh /etc…"   3 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   flower-registry
[vagrant docker]$ curl {IP}:5000/v2/_catalog
{"repositories":[]}
[vagrant docker]$ curl {IP}:5000/v2/_catalog?n=10
{"repositories":[]}

Pull / Push

더보기
[vagrant docker]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[vagrant docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        3 months ago        215MB
registry            latest              2d4f4b5309b1        5 months ago        26.2MB
[vagrant docker]# docker tag centos {IP}:5000/centos
[vagrant docker]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
{IP}:5000/centos   	     latest              0d120b6ccaa8        3 months ago        215MB
centos                   latest              0d120b6ccaa8        3 months ago        215MB
registry                 latest              2d4f4b5309b1        5 months ago        26.2MB
[vagrant docker]# vi Dockerfile
[vagrant docker]# docker build -t {IP}:5000/test-centos:1.0 .
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM centos
 ---> 0d120b6ccaa8
Step 2/3 : MAINTAINER username <email@gmail.com>
 ---> Running in 50dca7a06e82
Removing intermediate container 50dca7a06e82
 ---> aa0e4684d221
Step 3/3 : CMD echo 'Test docker pull and push'
 ---> Running in aec4066f3aac
Removing intermediate container aec4066f3aac
 ---> 0fa752d7395a
Successfully built 0fa752d7395a
Successfully tagged {IP}:5000/test-centos:1.0
[vagrant docker]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
{IP}:5000/test-centos         1.0                 0fa752d7395a        4 seconds ago       215MB
{IP}:5000/centos              latest              0d120b6ccaa8        3 months ago        215MB
centos                        latest              0d120b6ccaa8        3 months ago        215MB
registry                      latest              2d4f4b5309b1        5 months ago        26.2MB
[vagrant docker]# docker push {IP}:5000/centos
The push refers to repository [{IP}:5000/centos]
Get https://{IP}:5000/v2/: http: server gave HTTP response to HTTPS client
[vagrant docker]# docker push {IP}:5000/test-centos:1.0
The push refers to repository [{IP}:5000/test-centos]
Get https://{IP}:5000/v2/: http: server gave HTTP response to HTTPS client
[root@ftnet05 app]# sudo vi /etc/docker/daemon.json
###---------------
{
	"insecure-registries":
		["{IP}:5000", "registry-web"]
}
###---------------
[vagrant app]# docker push {IP}:5000/centos
The push refers to repository [{IP}:5000/centos]
cc9d18e90faa: Pushed
0c2689e3f920: Pushed
47dde53750b4: Pushed
latest: digest: sha256:1d7b639619bdca2d008eca2d5293e3c43ff84cbee597ff76de3b7a7de3e84956 size: 943
[vagrant app]# curl http://localhost:5000/v2/_catalog
{"repositories":["centos"]}

- /etc/docker/daemon.json에 registry 등록 후 push

Registry WEB

더보기
[vagrant app]$ vi /app/reg_web/config.yml
###---------------
registry: 
  url: http://{REGISTRY_IP or REGISTRY_NAME}:5000/v2
  name: {REGISTRY_IP or REGISTRY_NAME}:5000 
  readonly: false 
  auth: 
  enabled: false
###---------------
[vagrant app]$ docker run -it -d \
> -p 8080:8080 \
> --name registry-web \
> --link flower-registry \
> -v /app/reg_web/config.yml:/config/config.yml:ro \
> hyper/docker-registry-web
61f9ae1c3fb1ad7605e85db62b6c52e010d5ab5164733a4b0d2e4e3303fa265c
[vagrant app]$ docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS               NAMES
61f9ae1c3fb1        hyper/docker-registry-web   "start.sh"               8 minutes ago       Up 8 minutes        8080:8080           registry-web
2b497b761d0f        registry:latest             "/entrypoint.sh /etc…"   21 minutes ago      Up 21 minutes       5000:5000           flower-registry
[vagrant app]$ curl {IP}:5000/v2/_catalog
{"repositories":["ubuntu"]}
[vagrant app]$ curl http://{IP}:8080/
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"><!--<![endif]-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Web Registry - Repositories</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="shortcut icon" href="/assets/favicon-9ef27019cc7a636e29ecc851528f716e.ico" type="image/x-icon">
    <link rel="apple-touch-icon" href="/assets/apple-touch-icon-c915103363017d14cea9c2a46ea12166.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-retina-21d524e96ee946f16c9b8fb4ea0c3f6e.png">
    <link rel="stylesheet" href="/assets/application-bcba69f87dc8e1d6f0ee0e95bcd032dc.css"/>
    <script src="/assets/application-d840da5a269b3cd86c1420eeb56b3e88.js" type="text/javascript" ></script>




</head>

<body>
<!-- navbar -->

<nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">

            <button type="button" class="navbar-toggle" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span
                    class="icon-bar"></span><span class="icon-bar"></span>
            </button>  <a href="/" class="navbar-brand">Web Registry</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

            <ul class="nav navbar-nav navbar-right">



            </ul>

        </div>
    </div>
</nav>


<div class="container">

<div class="row">
    <ul class="breadcrumb">

        <li class="active">Home</li>

</ul>

<div class="page-header">
    <h2>Repositories</h2>
</div>

    <div class="col-md-8">
        <dl>
            <dt>Registry</dt>
            <dd>localhost:5000</dd>
        </dl>
        <table class="table table-bordered">
            <tr><th>Repository</th><th>Tags</th></tr>


                    <tr>
                        <td>
                            <a href="/repo/tags/ubuntu">ubuntu</a>
                        </td>
                        <td>
                            1
                        </td>
                    </tr>


        </table>

    </div>
</div>

</div>
</body>
</html>

- 브릿지(default) 모드에서는 --link {REGISTRY_CONTAINER}

- 호스트 모드에서는 --net host 그리고 방화벽 확인