Bit of cleanup before we start our exercise
How to remove the "exited" containers..
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6ea75809548 ubuntu "/usr/bin/top -b" 6 minutes ago Exited (0) 5 minutes ago topdemo
6d9128abfa0e ubuntu "/bin/bash" 12 minutes ago Exited (127) 9 minutes ago eloquent_wright
e6160af79c48 ubuntu "/bin/bash" 13 minutes ago Exited (0) 5 seconds ago blissful_gates
cfc0231a0fc2 ubuntu "/bin/bash" 14 minutes ago Exited (0) 14 minutes ago amazing_bardeen
0c57d7f80eb6 registry:2 "/entrypoint.sh /e..." 2 days ago Exited (255) 16 minutes ago 0.0.0.0:5000->5000/tcp registry
root@localhost ~]# docker rm $(docker ps -a -q)
d6ea75809548
6d9128abfa0e
e6160af79c48
cfc0231a0fc2
0c57d7f80eb6
[root@localhost ~]#
------------------------------------------------------------------------------------------------------------
Docker registry is a service that is storing your docker images.
Docker registry could be hosted by a third party, as public or private registry, like one of the following registries:
Docker repository is a collection of different docker images with same name, that have different tags. Tag is alphanumeric identifier of the image within a repository.
For example see https://hub.docker.com/r/library/python/tags/. There are many different tags for the official python image, these tags are all members of the official python repository on the Docker Hub. Docker Hub is a Docker Registry hosted by Docker.
To find out more read:
In the below example I am pulling new image "mysql" from docker hub (public) and "tag"ing that image and pushing back to "my own" docker Hub Registry. I have created an account with docker hub - docker.io/vanithav
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
9f0706ba7422: Pull complete
2290e155d2d0: Pull complete
547981b8269f: Pull complete
2c9d42ed2f48: Pull complete
55e3122f1297: Pull complete
abc10bd84060: Pull complete
c0a5ce64f2b0: Pull complete
c4595eab8e90: Pull complete
098988cead35: Pull complete
300ca5fa5eea: Pull complete
43fdc4e3e690: Pull complete
Digest: sha256:d178dffba8d81afedc251498e227607934636e06228ac63d58b72f9e9ec271a6@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
Status: Downloaded newer image for mysql:latest (here latest is the default "tag)
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae0f03effd02 busybox "sh" 9 minutes ago Up 7 minutes gallant_yalow
dc1934cbc2cb d355ed3537e9 "/bin/bash" 13 minutes ago Exited (0) 10 minutes ago vigorous_shannon
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 c2a449c9f834 12 days ago 33.2MB
mysql latest 44a8e1a5c0b2 2 weeks ago 407MB
ubuntu latest d355ed3537e9 2 weeks ago 119MB
localhost:5000/myfirstimage latest d355ed3537e9 2 weeks ago 119MB
busybox latest c30178c5239f 3 weeks ago 1.11MB
dockercloud/client latest a073d03b69b4 4 weeks ago 15.4MB
[root@localhost ~]# docker push mysql
The push refers to a repository [docker.io/library/mysql]
6d4c582fc108: Layer already exists
80f212864222: Layer already exists
452ca6783f12: Layer already exists
3c0fa4b13146: Layer already exists
dd133d6fa27b: Layer already exists
ebe780cbbabb: Layer already exists
d18915718e29: Layer already exists
1324d65ff710: Layer already exists
9b5e4968c151: Layer already exists
194d93de739d: Layer already exists
0d960f1d4fba: Layer already exists
errors:
denied: requested access to the resource is denied
unauthorized: authentication required ( this is because I am trying to push to the Docker's public registry where I dont have access)
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 c2a449c9f834 12 days ago 33.2MB
mysql latest 44a8e1a5c0b2 2 weeks ago 407MB
ubuntu latest d355ed3537e9 2 weeks ago 119MB
localhost:5000/myfirstimage latest d355ed3537e9 2 weeks ago 119MB
busybox latest c30178c5239f 3 weeks ago 1.11MB
First need to login to our own docker hub Registry:
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (vanithav): vanithav
Password:
Login Succeeded
[root@localhost ~]# docker tag mysql:latest vanithav/mysql1:testv32 (I am pushing to my own docker hub with user vanithav and a sub directory called mysql1 - testv32 is the "tag" i have given..)
[root@localhost ~]# docker push vanithav/mysql1:testv32
The push refers to a repository [docker.io/vanithav/mysql1]
6d4c582fc108: Pushed
80f212864222: Pushed
452ca6783f12: Pushed
3c0fa4b13146: Pushed
dd133d6fa27b: Pushed
ebe780cbbabb: Pushed
d18915718e29: Pushed
1324d65ff710: Pushed
9b5e4968c151: Pushed
194d93de739d: Pushed
0d960f1d4fba: Pushed
testv32: digest: sha256:793259d9ab1205b94865eb1bc3c6a9451c6d798f3e14d9f16cdfa109478c87a9 size: 2617
[root@localhost ~]#
Please practice the push/ pull many times, so that you get used to it, otherwise this is a bit confusing.
For experienced people who worked on Unix from a long time this can be compared to a FTP repository, where we do ftp pull and push.