Simplest Enterprise Continuous Integration Solutions

Saturday, September 13, 2014

Docker: image, repository and registry

Docker Registry (version 1.0)

# OS version, docker engine version

[root@docker-registry-server ~]# uname -a
Linux docker-registry-server 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Apr 21 08:37:59 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker-registry-server ~]# docker -v
Docker version 1.6.2, build 7c8fca2
[root@docker-registry-server ~]# service docker status
docker (pid  1410) is running...


# docker registry IP address

[root@docker-registry-server ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:56:92:6F:78
          inet addr:10.3.22.191  Bcast:10.3.23.255  Mask:255.255.252.0


# docker daemon process with argument

[root@docker-registry-server ~]# ps -ef | grep docker
root      3862     1  0 13:01 pts/2    00:00:00 /usr/bin/docker -d --insecure-registry 10.3.22.191:5000
root      3918  2963  0 13:01 pts/0    00:00:00 docker run -p 5000:5000 registry
root      3956  3862  0 13:01 pts/2    00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 172.17.0.1 -container-port 5000
root      3968  3862  0 13:01 ?        00:00:00 /usr/bin/python /usr/local/bin/gunicorn --access-logfile - --error-logfile - --max-requests 100 -k gevent --graceful-timeout 3600 -t 3600 -w 4 -b 0.0.0.0:5000 --reload docker_registry.wsgi:application
root      4029  3968  1 13:01 ?        00:00:00 /usr/bin/python /usr/local/bin/gunicorn --access-logfile - --error-logfile - --max-requests 100 -k gevent --graceful-timeout 3600 -t 3600 -w 4 -b 0.0.0.0:5000 --reload docker_registry.wsgi:application
root      4030  3968  1 13:01 ?        00:00:00 /usr/bin/python /usr/local/bin/gunicorn --access-logfile - --error-logfile - --max-requests 100 -k gevent --graceful-timeout 3600 -t 3600 -w 4 -b 0.0.0.0:5000 --reload docker_registry.wsgi:application
root      4031  3968  1 13:01 ?        00:00:00 /usr/bin/python /usr/local/bin/gunicorn --access-logfile - --error-logfile - --max-requests 100 -k gevent --graceful-timeout 3600 -t 3600 -w 4 -b 0.0.0.0:5000 --reload docker_registry.wsgi:application
root      4032  3968  1 13:01 ?        00:00:00 /usr/bin/python /usr/local/bin/gunicorn --access-logfile - --error-logfile - --max-requests 100 -k gevent --graceful-timeout 3600 -t 3600 -w 4 -b 0.0.0.0:5000 --reload docker_registry.wsgi:application
root      4050  2899  0 13:03 pts/2    00:00:00 grep docker


[root@docker-registry-server ~]# curl 10.3.22.191:5000
"\"docker-registry server\""[root@docker-registry-server ~]#

# docker build image myimage-app:v1 from Dockerfile

[root@docker-registry-server ~]# cd /tmp/myimage-app
[root@docker-registry-server myimage-app]# cat Dockerfile
# Set the base image to Centos
FROM centos

# File Author / Maintainer
MAINTAINER BuildMaster <buildmaster@qxc.com>

# install RPM package
RUN rpm -Uvh myiamge-app-package-1.0.0-20140524.noarch.rpm
[root@docker-registry-server myimage-app]# docker build -t myimage-app:v1 .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> fd44297e2ddb
Step 1 : MAINTAINER BuildMaster <buildmaster@qxc.com>
---> Using cache
---> 4eb21a2527e9
Step 2 : RUN rpm -Uvh myimage-app-package-1.0.0-20140524.noarch.rpm
---> Running in 701420d2d28a
Retrieving myimage-app-package-1.0.0-20140524.noarch.rpm
Preparing...                          ########################################
Updating / installing...
myimage-app-package-1.0.0-20140524########################################
---> d124c70feeee
Removing intermediate container 701420d2d28a
Successfully built d124c70feeee

[root@docker-registry-server ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myimage-app            v1                  d124c70feeee        41 seconds ago      226.3 MB
registry            latest              204704ce3137        11 days ago         413.8 MB
jenkins             latest              1520f72eb8b6        3 weeks ago         662 MB
centos              latest              fd44297e2ddb        4 weeks ago         215.7 MB


# docker tag for private docker registry

[root@docker-registry-server ~]# docker tag myimage-app:v1 10.3.22.191:5000/myimage
[root@docker-registry-server ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myimage-app                v1                  d124c70feeee        2 hours ago         226.3 MB
10.3.22.191:5000/myimage   latest              d124c70feeee        2 hours ago         226.3 MB
registry                latest              204704ce3137        11 days ago         413.8 MB
jenkins                 latest              1520f72eb8b6        3 weeks ago         662 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB


# docker push to private docker registry

[root@docker-registry-server ~]# docker push 10.3.22.191:5000/myimage
The push refers to a repository [10.3.22.191:5000/myimage] (len: 1)
Sending image list
Pushing repository 10.3.22.191:5000/myimage (1 tags)
6941bfcbbfca: Image successfully pushed
41459f052977: Image successfully pushed
fd44297e2ddb: Image successfully pushed
4eb21a2527e9: Image successfully pushed
d124c70feeee: Image successfully pushed
Pushing tag for rev [d124c70feeee] on {http://10.3.22.191:5000/v1/repositories/myimage/tags/latest}
[root@docker-registry-server ~]# curl http://10.3.22.191:5000/v1/repositories/myimage/tags/latest
"d124c70feeee098660422e98a515c0eabe20f9f93c6d28a593d294fcf302abb1"[root@docker-registry-server ~]#



Docker client (docker engine version could be previous version)

# OS version, docker engine version

[root@docker-client1 ~]# uname -a
Linux docker-client1 2.6.32-504.el6.x86_64 #1 SMP Tue Oct 14 01:47:47 PDT 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@docker-client1 ~]# docker -v
Docker version 1.5.0, build a8a31ef/1.5.0
[root@docker-client1 ~]# service docker status
docker (pid  27176) is running...


# docker client IP address

[root@docker-client1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:77:1A:BB
          inet addr:10.3.23.142  Bcast:10.3.23.255  Mask:255.255.252.0


# docker daemon process with arguments

[root@docker-client1 ~]# ps -ef | grep docker
root     27176     1  0 23:18 pts/1    00:00:00 /usr/bin/docker -d --insecure-registry 10.3.22.191:5000
root     27326 27019  0 23:32 pts/1    00:00:00 grep docker

[root@docker-client1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              fd44297e2ddb        4 weeks ago         215.7 MB


# pull an image from remote private docker registry (version 1.0)

[root@docker-client1 ~]# docker pull 10.3.22.191:5000/myimage
Pulling repository 10.3.22.191:5000/myimage
d124c70feeee: Download complete
6941bfcbbfca: Download complete
41459f052977: Download complete
fd44297e2ddb: Download complete
4eb21a2527e9: Download complete
Status: Downloaded newer image for 10.3.22.191:5000/myimage:latest
[root@docker-client1 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
10.3.22.191:5000/myimage   latest              d124c70feeee        8 hours ago         226.3 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB


# check container contents

[root@docker-client1 ~]# docker run -t -i 10.3.22.191:5000/myimage
[root@1f5c3796e479 /]# ls -al /tmp
total 28
drwxrwxrwt  7 root root 4096 May 25 23:34 .
drwxr-xr-x 17 root root 4096 May 25 23:34 ..
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .ICE-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .Test-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .X11-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .XIM-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .font-unix
[root@1f5c3796e479 /]# rpm -qa | grep myimage
DEV-myimage-app-package-1.0.0.37-20150522.noarch
[root@1f5c3796e479 /]# exit
exit


Docker Registry (version 2.0)

# OS version, docker engine version

[root@docker-registry-server ~]# uname -a
Linux docker-registry-server 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Apr 21 08:37:59 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker-registry-server ~]# docker -v
Docker version 1.6.2, build 7c8fca2
[root@docker-registry-server ~]# service docker status
docker (pid  3862) is running...


# docker daemon process and argument

[root@docker-registry-server ~]# ps -ef | grep docker
root      3862     1  7 13:01 pts/2    00:01:44 /usr/bin/docker -d --insecure-registry 10.3.22.191:5000
root      4217  2963  0 13:16 pts/0    00:00:00 docker run -p 5000:5000 registry:2.0 
root      4625  3862  0 13:17 pts/2    00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 172.17.0.2 -container-port 5000
root      5111  2899  0 13:23 pts/2    00:00:00 grep docker

[root@docker-registry-server ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
10.3.22.191:5000/myimage   latest              d124c70feeee        2 hours ago         226.3 MB
myimage-app                v1                  d124c70feeee        2 hours ago         226.3 MB
registry                2.0                 0ff65644861b        11 days ago         548.5 MB
registry                latest              204704ce3137        11 days ago         413.8 MB
jenkins                 latest              1520f72eb8b6        3 weeks ago         662 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB


# create a new image on a docker container

[root@docker-registry-server ~]# docker run -t -i myimage-app:v1
[root@4d0a41299372 /]# touch /tmp/aaa
[root@4d0a41299372 /]# exit
exit


# commit an image

[root@docker-registry-server ~]# docker commit -m "myimage:v2" 4d0a41299372 myimage:v2
1545e9605745217b70d0201b3768c8d364b7f5aa599525b9336d133bff2b6284
[root@docker-registry-server ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myimage                    v2                  1545e9605745        15 seconds ago      226.3 MB
myimage-app                v1                  d124c70feeee        2 hours ago         226.3 MB
10.3.22.191:5000/myimage   latest              d124c70feeee        2 hours ago         226.3 MB
registry                2.0                 0ff65644861b        11 days ago         548.5 MB
registry                latest              204704ce3137        11 days ago         413.8 MB
jenkins                 latest              1520f72eb8b6        3 weeks ago         662 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB


# docker tag for private docker registry

[root@docker-registry-server ~]# docker tag -f myimage:v2 10.3.22.191:5000/myimage
[root@docker-registry-server ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
10.3.22.191:5000/myimage   latest              1545e9605745        About a minute ago   226.3 MB
myimage                    v2                  1545e9605745        About a minute ago   226.3 MB
myimage-app                v1                  d124c70feeee        2 hours ago          226.3 MB
registry                2.0                 0ff65644861b        11 days ago          548.5 MB
registry                latest              204704ce3137        11 days ago          413.8 MB
jenkins                 latest              1520f72eb8b6        3 weeks ago          662 MB
centos                  latest              fd44297e2ddb        4 weeks ago          215.7 MB


# docker push to private docker registry

[root@docker-registry-server ~]# docker push 10.3.22.191:5000/myimage
The push refers to a repository [10.3.22.191:5000/myimage] (len: 1)
1545e9605745: Image already exists
d124c70feeee: Image successfully pushed
4eb21a2527e9: Image successfully pushed
fd44297e2ddb: Image successfully pushed
41459f052977: Image successfully pushed
6941bfcbbfca: Image successfully pushed
Digest: sha256:57d2e2ba8e4bef77ce22f922d126b2c4ace4bc882950609cfa75edd2a70d75af 
[root@docker-registry-server ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myimage                    v2                  1545e9605745        3 minutes ago       226.3 MB
10.3.22.191:5000/myimage   latest              1545e9605745        3 minutes ago       226.3 MB
myimage-app                v1                  d124c70feeee        2 hours ago         226.3 MB
registry                2.0                 0ff65644861b        11 days ago         548.5 MB
registry                latest              204704ce3137        11 days ago         413.8 MB
jenkins                 latest              1520f72eb8b6        3 weeks ago         662 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB



Docker client (docker 1.6 for Docker Registry 2.0)

# OS version, docker engine version

[root@docker-client2 ~]# uname -a
Linux docker-client2 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Apr 21 08:37:59 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@docker-client2 ~]# docker -v
Docker version 1.6.2, build 7c8fca2
[root@docker-client2 ~]# service docker status
docker (pid  3024) is running...


# docker client IP address

[root@docker-client2 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:21:45:93
          inet addr:10.3.23.160  Bcast:10.3.23.255  Mask:255.255.252.0


# docker daemon with argument

[root@docker-client2 ~]# ps -ef | grep docker
root      3024     1  0 May24 ?        00:00:10 /usr/bin/docker -d --insecure-registry 10.3.22.191:5000
root      7548  7445  0 19:51 pts/1    00:00:00 grep docker

[root@docker-client2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              fd44297e2ddb        4 weeks ago         215.7 MB


# docker pull an image from remote private docker registry (version 2.0) server

[root@docker-client2 ~]# docker pull 10.3.22.191:5000/myimage
latest: Pulling from 10.3.22.191:5000/myimage

4eb21a2527e9: Pull complete
d124c70feeee: Pull complete
1545e9605745: Already exists
6941bfcbbfca: Already exists
41459f052977: Already exists
fd44297e2ddb: Already exists
Digest: sha256:57d2e2ba8e4bef77ce22f922d126b2c4ace4bc882950609cfa75edd2a70d75af
Status: Downloaded newer image for 10.3.22.191:5000/myimage:latest
[root@docker-client2 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
10.3.22.191:5000/myimage   latest              1545e9605745        6 hours ago         226.3 MB
centos                  latest              fd44297e2ddb        4 weeks ago         215.7 MB


# check container content

[root@docker-client2 ~]# docker run -t -i 10.3.22.191:5000/myimage
[root@fc25630ffe07 /]# ls -al /tmp
total 28
drwxrwxrwt  7 root root 4096 May 25 23:53 .
drwxr-xr-x 17 root root 4096 May 25 23:53 ..
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .ICE-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .Test-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .X11-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .XIM-unix
drwxrwxrwt  2 root root 4096 Apr 15 14:29 .font-unix
-rw-r--r--  1 root root    0 May 25 17:19 aaa
[root@fc25630ffe07 /]# exit
exit