1. Install docker on RHEL7.x
Step1. Register to Candlepin and auto subscribe pool
# subscription-manager register --username=qa@redhat.com --password=xxxxx
# subcsription-manager subscribe --auto
Step2: Start docker
# systemctl enable docker-registry
2. Manipulate images on Atomic
2.1 List images:
-bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/ubuntu 12.04 04c3793b1229 7 days ago 136 MB
2.2 Check the history of images
# docker history [image name]
eg: -bash-4.2# docker history docker.io/ubuntu:12.04
IMAGE CREATED CREATED BY SIZE COMMENT
10e4cff604d3 18 hours ago /bin/sh -c yum install -y ruby 43.24 MB
2b77dea62586 18 hours ago /bin/sh -c #(nop) MAINTAINER Shihliu
90579908b6df 19 hours ago /bin/bash 138.4 MB Added virt-who on Centos
52169ed95140 19 hours ago 564.3 MB Imported from -
2.3 Search images on pub warehouse
-bash-4.2# docker search [search content]
-bash-4.2# docker search redhat
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redhat.com registry.access.redhat.com/rhel This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6 This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6.5 This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6.6 This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6.7 This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6.8 This platform image provides a minimal run... 0
2.4 Pull images
From pub warehouse
Format: [registry_url]/[user_name:]image_name[:tag_name]
eg 1:
[root@docker ~]# docker pull openshift/hello-openshift:latest
latest: Pulling from openshift/hello-openshift
a3ed95caeb02: Pull complete
8d7b44c26512: Pull complete
Digest: sha256:d5cd38487a54866069ebc1a5867f08729df7d3ddd17c010e537f088d49e0ef68
Status: Downloaded newer image for openshift/hello-openshift:latest
eg 2:
# docker pull [image name]
eg: -bash-4.2# docker search redhat
redhat.com registry.access.redhat.com/rhel This platform image provides a minimal run... 0
redhat.com registry.access.redhat.com/rhel6 This platform image provides a minimal run... 0
-bash-4.2# docker pull rhel
Using default tag: latest
Trying to pull repository registry.access.redhat.com/rhel ...
latest: Pulling from registry.access.redhat.com/rhel
30cf2e26a24f: Pull complete
99dd41655d8a: Pull complete
Digest: sha256:f50654a25c5bbf3b72e343e038db4ff92b39dd6ef2e52c251458981e8213beef
Status: Downloaded newer image for registry.access.redhat.com/rhel:latest
From non-pub warehouse
# docker pull [warehouse server]/[image name]
eg: # docker pull registry.access.redhat.com/jboss-processserver-6/processserver63-openshift
Pull all images from the same repository
# docker pull --all-tags [REPOSITORY]
[root@docker config]# docker pull --all-tags fedora
2.5 Import the contents from a tarball to create a image
Step1: Download template to local or save one or more images to a tar archive
Eg: [root@docker ~]# wget Download/template/precreated - OpenVZ Virtuozzo Containers Wiki /fedora-24-x86_64-20160708.tar.xz
or
# docker save [image name]>[xxx.tar]
[root@docker ~]# docker save ansible/centos7-ansible>ansibe-centos1.tar
Step2: Import tar file to image
# cat [template file name] | docker import - [image name]:[tag]
[root@docker ~]# cat fedora-24-x86_64-20160708.tar.xz |docker import - fedora:24
[root@docker ~]# cat ansibe-centos1.tar |docker import - ansible-centos:7
sha256:018d5d122f65ab5efeeddbafc2a0f2a5785a0fe6c3d74f7dba89a4ca1eb580dc
Step3. Check the imported image.
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ansible-centos 7 018d5d122f65 12 seconds ago 717.7 MB ===> It has been imported successfully.
fedora 24 93b21ad4250a 24 seconds ago 695.1 MB ===> It has been imported successfully.
2.6 Create a image from a container's changes
# docker commit [CONTAINER ID] [REPOSITORY[:TAG]]
Step1: List containers
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50cf6a612c0b training/webapp "python app.py" 2 days ago Up 2 days 127.0.0.1:32768->5000/tcp sleepy_liskov
1c626011c3e9 training/webapp "python app.py" 2 days ago Up 2 days 0.0.0.0:32771->5000/tcp web
9a9f8b99611d ansible/centos7-ansible "/bin/bash" 5 days ago Up 2 days pensive_curie
[root@docker ~]# docker commit 9a9f8b99611d ansible-centos7:version3
sha256:45c2ec91843543884db1fdc563eaaf73db3caa5438c7ef2dde16f565f6308734
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ansible-centos7 version3 45c2ec918435 8 seconds ago 699.1 MB ===> It has been created
2.7 Push an image to Docker Hub
Step1: Register a user in Docker Hub(https://hub.docker.com/account/signup/ )
eg: The new username is "dockertest"
Step2: Push the image to Docker Hub
# docker push [USERNAME]/[IMAGE]
eg:
[root@docker config]# docker push dockertest/fedora
The push refers to a repository [registry.hub.docker.com/shaoqq/centos] (len: 0)
Sending image list
Please login prior to push:
Username (dockertest):
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
The push refers to a repository [registry.hub.docker.com/dockertest/fedora] (len: 0)
Sending image list
Authentication is required.
The push refers to a repository [docker.io/dockertest/fedora]
a5cc1a9730b1: Layer already exists
24: digest: sha256:a2ce54462365f100ee1931de5f70e955bac92baebc6e50c245e06f2547b468cf size: 529
Step3: Check the image on Docker Hub under the username
Login in to Docker Hub with provided user , then go to "Repositories", it should show the image
2.8 Tagging an image referenced by ID
# docker tag [IMAGE ID] [REPOSITORY]:[TAGE]
eg: [root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
d61e30531dac 2 hours ago 119.2 MB
[root@docker ~]# docker tag d61e30531dac fedora/httpd:version1.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fedora/httpd version1.0 d61e30531dac 2 hours ago 119.2 MB ===> It has been tagged
2.9 Remove images
Remove one image:
# docker rmi [image name]/[image id]
eg: -bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.access.redhat.com/rhel6.8 latest aa9a755bcffe 2 weeks ago 195.4 MB ===>It will be delete.
docker.io/ubuntu 12.04 60df6678b255 11 weeks ago 139.3 MB
-bash-4.2# docker rmi registry.access.redhat.com/rhel6.8
Untagged: registry.access.redhat.com/rhel6.8:latest
Deleted: sha256:aa9a755bcffe80d6c5d47e0cc177c026bfd683b6ce31273dd0f1752f4c757602
Deleted: sha256:cdf970bf7f2d127521a74a3441f75d84430e60b2301c5994445fa3b50968f10b
Deleted: sha256:a317c8e49afcb6e87e88d2cc2a92495cd6e082b29b987e0ad64c8b195b28c58f
-bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu 12.04 60df6678b255 11 weeks ago 139.3 MB
Remove all images with the same image ID:
# docker rmi -f [IMAGE ID]
eg:
-bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
-bash-4.2# docker rmi -f fd484f19954f
Untagged: test1:latest
Untagged: test:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
3. Manipulate containers on Atomic
3.1 Create container
Create container with local images
# docker create -it [IMAGE_NAME]/[IMAGE_ID]
eg:
-bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu 12.04 60df6678b255 11 weeks ago 139.3 MB
-bash-4.2# docker create -it docker.io/ubuntu:12.04
d073f2ac22b07168b65be79561b68a458ae716faf5d5513568d12be0735c0043
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d073f2ac22b0 docker.io/ubuntu:12.04 "/bin/bash" 6 seconds ago Created hopeful_torvalds ==> It has been created
Create container with non-local images and run command
# docker create -it [IMAGE_NAME]/[IMAGE_ID] [command]
-bash-4.2# docker create -t -i fedora bash
Unable to find image 'fedora:latest' locally
Trying to pull repository registry.access.redhat.com/fedora ...
unknown: Not Found
Trying to pull repository docker.io/library/fedora ...
latest: Pulling from docker.io/library/fedora
2bf01635e2a0: Pull complete
Digest: sha256:64a02df6aac27d1200c2572fe4b9949f1970d05f74d367ce4af994ba5dc3669e
Status: Downloaded newer image for docker.io/fedora:latest
1967aff0d25d6c5da83ad28c868ca547d529bf332d773877c1fb07a053a16d71
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1967aff0d25d fedora "bash" 6 minutes ago Created drunk_dijkstra ==> It has been created
3.2 Run a command in a new container
Start a bash terminal, allow user interactive
# docker run -i -t [REPOSITORY]:[tag] /bin/bash
eg: -bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.access.redhat.com/rhel latest 98a88a8b722a 5 weeks ago 201.4 MB ===> Run with this image
docker.io/ubuntu 12.04 60df6678b255 11 weeks ago 139.3 MB
-bash-4.2# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ===> No container
-bash-4.2# docker run -i -t registry.access.redhat.com/rhel:latest /bin/bash
[root@68ebe854396c /]# exit ===> Entered container
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" 15 seconds ago Exited (0) 7 seconds ago prickly_jennings ===> It has been run
Excute command on container, then terminal container
# docker run [REPOSITORY]:[tag] [command]
-bash-4.2# docker run registry.access.redhat.com/rhel:latest /bin/echo 'Hello world'
Hello world ===> Hasn't entered container
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06b6c9d5d821 registry.access.redhat.com/rhel:latest "/bin/echo 'Hello wor" 10 seconds ago Exited (0) 6 seconds ago sick_bell ===> It has been run
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" 4 minutes ago Exited (127) 19 seconds ago prickly_jennings
Assign container name and allocate pseudo-TTY
# docker run --name [container_name] -it [image_name]
[NOTE]: If image is not exit on local, it will get it from other warehouse(eg:docker.io)
eg: -bash-4.2# docker run --name test -it debian
Unable to find image 'debian:latest' locally
Trying to pull repository registry.access.redhat.com/debian ...
unknown: Not Found
Trying to pull repository docker.io/library/debian ...
latest: Pulling from docker.io/library/debian
6a5a5368e0c2: Pull complete
Digest: sha256:677f184a5969847c0ad91d30cf1f0b925cd321e6c66e3ed5fbf9858f58425d1a
Status: Downloaded newer image for docker.io/debian:latest
root@d216a6eb29b2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@d216a6eb29b2:/# exit
-bash-4.2# docker ps -a|grep debian
d216a6eb29b2 debian "/bin/bash" 5 minutes ago Exited (0) 18 seconds ago test ===> It has been run
3.3 Start containers
Start one container with non-interactive mode.
# docker start [CONTAINER ID]
eg: -bash-4.2# docker start 68ebe854396c
68ebe854396c ===> It hasn't entered container
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" 55 minutes ago Up 6 seconds prickly_jennings ===> It has been started
Start one container with interactive mode.
# docker start -i [CONTAINER ID]
-bash-4.2# docker start -i 68ebe854396c
[root@68ebe854396c /]# ls ===> It has entered container
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Start many containers at once
# docker start [CONTAINER1 ID] [CONTAINER2 ID] .....
eg: -bash-4.2# docker start d216a6eb29b2 68ebe854396c
d216a6eb29b2
68ebe854396c
-bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d216a6eb29b2 debian "/bin/bash" 45 minutes ago Up 6 seconds test ===> Two containers has been started
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" About an hour ago Up 5 seconds prickly_jennings
3.4 Pause container
Pause one container
# docker pause [CONTAINER]
Pause many containers at once
# docker pause [CONTAINER_1] [CONTAINER_2] ...
3.5 Stop container
Stop one container
# docker stop [CONTAINER]
Stop many containers at once
# docker stop [CONTAINER_1] [CONTAINER_2] ...
3.6 Kill running container
Kill one container
# docker kill [CONTAINER]
Kill many containers at once
# docker kill [CONTAINER_1] [CONTAINER_2] ...
3.7 List all containers
# docker ps -a
eg: -bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d216a6eb29b2 debian "/bin/bash" 37 minutes ago Exited (0) 32 minutes ago test
06b6c9d5d821 registry.access.redhat.com/rhel:latest "/bin/echo 'Hello wor" 47 minutes ago Exited (0) 47 minutes ago sick_bell
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" 52 minutes ago Exited (127) 47 minutes ago prickly_jennings
3.8 Attach to a running container
# docker attach [CONTAINER]
eg: -bash-4.2# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68ebe854396c registry.access.redhat.com/rhel:latest "/bin/bash" About an hour ago Exited (137) 3 minutes ago prickly_jennings
-bash-4.2# docker start 68ebe854396c
68ebe854396c
-bash-4.2# docker attach 68ebe854396c
[root@68ebe854396c /]#
3.9 Run a command in a running container
# docker exec [OPTIONS] [CONTAINER] [COMMAND]
eg: create /tmp/aaa in container 65b9efb5be21
Step1: Start container
[root@docker config]# docker start 65b9efb5be21
65b9efb5be21
Step2: Run command
[root@docker config]# docker exec -it 65b9efb5be21 touch /tmp/test
Step3: Enter container
[root@docker config]# docker attach 65b9efb5be21
Step4: Check the result, /tmp/aaa has been created
[root@65b9efb5be21 ansible]# cd /tmp
[root@65b9efb5be21 tmp]# ls
aaa ks-script-VNahoJ test ===>"test" is exist
3.10 Shows us the standard output of a container
# docker logs [CONTAINER]
[root@docker config]# docker logs 1c626011c3e9
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
10.66.128.63 - - [11/Oct/2016 05:30:18] "GET / HTTP/1.1" 200 -
10.66.128.63 - - [11/Oct/2016 05:30:18] "GET /favicon.ico HTTP/1.1" 404 -
3.11 Copy file between container and local machine
Copy container's file to local machine
# docker cp [OPTIONS] [CONTAINER]:[SRC_PATH] [DEST_PATH]
eg:
-bash-4.2# docker cp test:/root/test /root
-bash-4.2# ls /root
anaconda-ks.cfg test ===> "test" has been copied to local machine
Copy local machine's file to container
# docker cp [OPTIONS] [SRC_PATH] [CONTAINER]:[DEST_PATH]
eg:
-bash-4.2# docker cp /root/test2 test:/root
-bash-4.2# docker attach test
root@d216a6eb29b2:/# cd /root
root@d216a6eb29b2:~# ls
test test2 ===>"test2" has been copied to container "test"
3.12 Statistic containers resource usage
Statistic all containers's resource usage
# docker stats -a
eg:
[root@docker config]# docker stats -a
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
65b9efb5be21 -- -- / -- -- -- / -- -- / -- --
b0678fe9721b -- -- / -- -- -- / -- -- / -- --
50cf6a612c0b -- -- / -- -- -- / -- -- / -- --
1c626011c3e9 0.02% 2.469 MiB / 993.1 MiB 0.25% 6.5 kB / 1.912 kB 14.5 MB / 0 B 0
e2bc0a64087f -- -- / -- -- -- / -- -- / -- --
9a9f8b99611d -- -- / -- -- -- / -- -- / -- --
Statistic live containers's resource usage
# docker stats
[root@docker config]# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1c626011c3e9 0.02% 2.469 MiB / 993.1 MiB 0.25% 6.5 kB / 1.912 kB 14.5 MB / 0 B 0
3.13 List metadata about a container
# docker inspect [CONTAINER]
eg:
[root@docker ~]# docker inspect 4a1d7a6fe23d
[
{
"Id": "4a1d7a6fe23de04ee6fe5f8b82fb5212c2ba4ad8aa9bc9566376ff426d700629",
"Created": "2016-11-01T00:25:29.720078954Z",
"Path": "/hello-openshift",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 23700,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-11-01T00:25:35.754337168Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:6728c37f01345982eff1e32147b010e205fe142f492c9185f74ecb9f983b79f4",
.........
3.14 Delete container
Delete specified container
# docker rm [CONTAINER]
Delete all containers
# for id in $(docker ps -aq); do docker rm $id; done