0、Docker常用命令介绍

  • docker images:列出所有镜像(images)
  • docker ps:列出正在运行的(容器)containers
  • docker pull ubuntu:下载镜像
  • docker run -i -t ubuntu /bin/bash:运行ubuntu镜像
  • docker commit 3a09b2588478 ubuntu:mynewimage:提交你的变更,并且把容器保存成Tag为mynewimage的新的ubuntu镜像.(注意,这里提交只是提交到本地仓库,类似git)

1、官方镜像

1.1 查找镜像

(1)Docker Hub搜索

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

docker x86镜像包如何适配arm docker x86 arm_镜像容器

docker x86镜像包如何适配arm docker x86 arm_镜像容器_02

docker x86镜像包如何适配arm docker x86 arm_Docker_03

(2)命令搜索
我们也可以使用 docker search 命令来搜索镜像。

[root@node3 ~]# docker search centos
INDEX       NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                         The official build of CentOS.                   3578      [OK]       
docker.io   docker.io/jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   81                   [OK]
docker.io   docker.io/tutum/centos                   Simple CentOS docker image with SSH access      33                   
docker.io   docker.io/kinogmt/centos-ssh             CentOS with SSH                                 16                   [OK]
docker.io   docker.io/centos/postgresql-94-centos7   PostgreSQL 9.4 SQL database server              11                   
docker.io   docker.io/centos/mysql-57-centos7        MySQL 5.7 SQL database server                   9                    
docker.io   docker.io/centos/php-56-centos7          PHP 5.6 platform for building and running ...   8                    
docker.io   docker.io/centos/mysql-56-centos7        MySQL 5.6 SQL database server                   5                    
docker.io   docker.io/centos/python-35-centos7       Python 3.5 platform for building and runni...   5                    
docker.io   docker.io/centos/mongodb-26-centos7      MongoDB 2.6 NoSQL database server               4                    
docker.io   docker.io/centos/php-70-centos7          PHP 7.0 platform for building and running ...   4                    
docker.io   docker.io/centos/nginx-18-centos7        Nginx 1.8 server and a reverse proxy serve...   3                    
docker.io   docker.io/centos/redis                   Redis built for CentOS                          3                    [OK]
docker.io   docker.io/centos/ruby-23-centos7         Ruby 2.3 platform for building and running...   3                    
docker.io   docker.io/darksheer/centos               Base Centos Image -- Updated hourly             3                    [OK]
docker.io   docker.io/centos/httpd-24-centos7        Apache HTTP 2.4 Server                          2                    
docker.io   docker.io/centos/mongodb-32-centos7      MongoDB 3.2 NoSQL database server               2                    
docker.io   docker.io/centos/python-27-centos7       Python 2.7 platform for building and runni...   2                    
docker.io   docker.io/centos/python-34-centos7       Python 3.4 platform for building and runni...   2                    
docker.io   docker.io/blacklabelops/centos           CentOS Base Image! Built and Updates Daily!     1                    [OK]
docker.io   docker.io/centos/mariadb-101-centos7     MariaDB 10.1 SQL Database Server Docker image   1                    
docker.io   docker.io/centos/nodejs-4-centos7        NodeJS 4 platform for building and running...   1                    
docker.io   docker.io/centos/ruby-22-centos7         Ruby 2.2 platform for building and running...   1                    
docker.io   docker.io/pivotaldata/centos             Base centos, freshened up a little with a ...   0                    
docker.io   docker.io/smartentry/centos              centos with smartentry                          0                    [OK]
[root@node3 ~]#

1.2 拖取镜像

使用命令 docker pull 来下载镜像

[root@node3 ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
74f0853ba93b: Pull complete 
Digest: sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8
[root@node3 ~]#

The centos:latest tag is always the most recent version currently available.
centos:latest标签始终是当前可用的最新版本。

docker pull centos使用默认tag,相当于docker pull centos:latest

2、创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像

2.1 Dockerfile 文件

我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

[root@hadron ~]# cd docker/
[root@hadron docker]# vi Dockerfile
[root@hadron docker]# cat Dockerfile 
# 选择一个已有的os镜像作为基础  
FROM centos 
# 镜像的作者   
MAINTAINER hadron
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no   
RUN yum install -y openssh-server sudo   
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config   
#安装openssh-clients 
RUN yum  install -y openssh-clients
# 添加测试用户root,密码root,并且将此用户添加到sudoers里   
RUN echo "root:123456" | chpasswd  
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers   
# 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录   
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key   
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  
# 启动sshd服务并且暴露22端口  
RUN mkdir /var/run/sshd   
EXPOSE 22   
CMD ["/usr/sbin/sshd", "-D"]
[root@hadron docker]#

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

2.2 构建镜像

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

参数说明:

  • -t :指定要创建的目标镜像名
  • .:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
[root@hadron docker]# docker build -t="centos7-ssh" .
Sending build context to Docker daemon 452.2 MB
Step 1 : FROM centos
 ---> 328edcd84f1b
Step 2 : MAINTAINER hadron
 ---> Running in 393aefdcb913
 ---> 6b5caa772080
Removing intermediate container 393aefdcb913
Step 3 : RUN yum install -y openssh-server sudo
 ---> Running in 33ecc245a07b
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.163.com
 * extras: mirrors.163.com
 * updates: mirrors.cn99.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-35.el7_3 will be installed
--> Processing Dependency: openssh = 6.6.1p1-35.el7_3 for package: openssh-server-6.6.1p1-35.el7_3.x86_64
--> Processing Dependency: fipscheck-lib(x86-64) >= 1.3.0 for package: openssh-server-6.6.1p1-35.el7_3.x86_64
--> Processing Dependency: libwrap.so.0()(64bit) for package: openssh-server-6.6.1p1-35.el7_3.x86_64
--> Processing Dependency: libfipscheck.so.1()(64bit) for package: openssh-server-6.6.1p1-35.el7_3.x86_64
---> Package sudo.x86_64 0:1.8.6p7-23.el7_3 will be installed
--> Running transaction check
---> Package fipscheck-lib.x86_64 0:1.4.1-5.el7 will be installed
--> Processing Dependency: /usr/bin/fipscheck for package: fipscheck-lib-1.4.1-5.el7.x86_64
---> Package openssh.x86_64 0:6.6.1p1-35.el7_3 will be installed
---> Package tcp_wrappers-libs.x86_64 0:7.6-77.el7 will be installed
--> Running transaction check
---> Package fipscheck.x86_64 0:1.4.1-5.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                Arch        Version                  Repository    Size
================================================================================
Installing:
 openssh-server         x86_64      6.6.1p1-35.el7_3         updates      440 k
 sudo                   x86_64      1.8.6p7-23.el7_3         updates      735 k
Installing for dependencies:
 fipscheck              x86_64      1.4.1-5.el7              base          21 k
 fipscheck-lib          x86_64      1.4.1-5.el7              base          11 k
 openssh                x86_64      6.6.1p1-35.el7_3         updates      438 k
 tcp_wrappers-libs      x86_64      7.6-77.el7               base          66 k

Transaction Summary
================================================================================
Install  2 Packages (+4 Dependent packages)

Total download size: 1.7 M
Installed size: 4.9 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/fipscheck-lib-1.4.1-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for fipscheck-lib-1.4.1-5.el7.x86_64.rpm is not installed
Public key for openssh-6.6.1p1-35.el7_3.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total                                              1.0 MB/s | 1.7 MB  00:01     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-3.1611.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : fipscheck-1.4.1-5.el7.x86_64                                 1/6 
  Installing : fipscheck-lib-1.4.1-5.el7.x86_64                             2/6 
  Installing : openssh-6.6.1p1-35.el7_3.x86_64                              3/6 
  Installing : tcp_wrappers-libs-7.6-77.el7.x86_64                          4/6 
  Installing : openssh-server-6.6.1p1-35.el7_3.x86_64                       5/6 
  Installing : sudo-1.8.6p7-23.el7_3.x86_64                                 6/6 
  Verifying  : openssh-6.6.1p1-35.el7_3.x86_64                              1/6 
  Verifying  : openssh-server-6.6.1p1-35.el7_3.x86_64                       2/6 
  Verifying  : sudo-1.8.6p7-23.el7_3.x86_64                                 3/6 
  Verifying  : tcp_wrappers-libs-7.6-77.el7.x86_64                          4/6 
  Verifying  : fipscheck-lib-1.4.1-5.el7.x86_64                             5/6 
  Verifying  : fipscheck-1.4.1-5.el7.x86_64                                 6/6 

Installed:
  openssh-server.x86_64 0:6.6.1p1-35.el7_3    sudo.x86_64 0:1.8.6p7-23.el7_3   

Dependency Installed:
  fipscheck.x86_64 0:1.4.1-5.el7       fipscheck-lib.x86_64 0:1.4.1-5.el7      
  openssh.x86_64 0:6.6.1p1-35.el7_3    tcp_wrappers-libs.x86_64 0:7.6-77.el7   

Complete!
 ---> aa6ec2b74d62
Removing intermediate container 33ecc245a07b
Step 4 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
 ---> Running in 05de5ccfcd34
 ---> dd486f1c21bc
Removing intermediate container 05de5ccfcd34
Step 5 : RUN yum  install -y openssh-clients
 ---> Running in 93c4b50eb511
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.163.com
 * updates: mirrors.cn99.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-clients.x86_64 0:6.6.1p1-35.el7_3 will be installed
--> Processing Dependency: libedit.so.0()(64bit) for package: openssh-clients-6.6.1p1-35.el7_3.x86_64
--> Running transaction check
---> Package libedit.x86_64 0:3.0-12.20121213cvs.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch       Version                       Repository   Size
================================================================================
Installing:
 openssh-clients     x86_64     6.6.1p1-35.el7_3              updates     642 k
Installing for dependencies:
 libedit             x86_64     3.0-12.20121213cvs.el7        base         92 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 735 k
Installed size: 2.4 M
Downloading packages:
--------------------------------------------------------------------------------
Total                                              224 kB/s | 735 kB  00:03     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libedit-3.0-12.20121213cvs.el7.x86_64                        1/2 
  Installing : openssh-clients-6.6.1p1-35.el7_3.x86_64                      2/2 
  Verifying  : openssh-clients-6.6.1p1-35.el7_3.x86_64                      1/2 
  Verifying  : libedit-3.0-12.20121213cvs.el7.x86_64                        2/2 

Installed:
  openssh-clients.x86_64 0:6.6.1p1-35.el7_3                                     

Dependency Installed:
  libedit.x86_64 0:3.0-12.20121213cvs.el7                                       

Complete!
 ---> 3c0f86c70d1a
Removing intermediate container 93c4b50eb511
Step 6 : RUN echo "root:123456" | chpasswd
 ---> Running in 6bd8fad74d7c
 ---> 8d60100075d9
Removing intermediate container 6bd8fad74d7c
Step 7 : RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
 ---> Running in fbc4858d3cf8
 ---> 12ac426210fa
Removing intermediate container fbc4858d3cf8
Step 8 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
 ---> Running in faf069b7d775
Enter passphrase (empty for no passphrase): Enter same passphrase again: Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
99:56:94:7b:47:b3:d5:15:dd:e9:06:e0:3b:c1:4e:8b root@c7947be2eb9d
The key's randomart image is:
+--[ DSA 1024]----+
|          .o.  .O|
|         .+  .o.=|
|          .* .o+ |
|         += = oo |
|        SE * ..  |
|       .    .    |
|                 |
|                 |
|                 |
+-----------------+
 ---> 5aea59496d4c
Removing intermediate container faf069b7d775
Step 9 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
 ---> Running in 0195a3faaba7
Enter passphrase (empty for no passphrase): Enter same passphrase again: Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
53:74:e1:1e:26:63:bb:14:c2:42:94:b6:63:ec:83:15 root@c7947be2eb9d
The key's randomart image is:
+--[ RSA 2048]----+
|     .o.  . o.   |
|     .E. . o     |
|     o.oo * +    |
|      *. + B .   |
|     = .S o .    |
|    . o  o .     |
|       .  .      |
|                 |
|                 |
+-----------------+
 ---> d88cddfbdd5d
Removing intermediate container 0195a3faaba7
Step 10 : RUN mkdir /var/run/sshd
 ---> Running in 863bb8fea88b
 ---> 3ea00a54726d
Removing intermediate container 863bb8fea88b
Step 11 : EXPOSE 22
 ---> Running in 1a554cd8407d
 ---> 7b2b450fc370
Removing intermediate container 1a554cd8407d
Step 12 : CMD /usr/sbin/sshd -D
 ---> Running in 1eea4cfa8bd5
 ---> 9fd1b9b60b8a
Removing intermediate container 1eea4cfa8bd5
Successfully built 9fd1b9b60b8a

2.3 查看镜像列表

[root@hadron docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7-ssh         latest              9fd1b9b60b8a        17 seconds ago      324.7 MB
docker.io/centos    latest              328edcd84f1b        12 days ago         192.5 MB

3、启动容器

3.1 网络配置

需要用到 pipework,用于给容器设置IP
(1)下载pipework

[root@hadron docker]# git clone https://github.com/jpetazzo/pipework.git
正克隆到 'pipework'...
remote: Counting objects: 497, done.
remote: Total 497 (delta 0), reused 0 (delta 0), pack-reused 497
接收对象中: 100% (497/497), 171.82 KiB | 0 bytes/s, done.
处理 delta 中: 100% (262/262), done.
[root@hadron docker]# 

[root@hadron docker]# cp pipework/pipework /usr/local/bin/

(2)安装bridge-utils

[root@hadron docker]# yum -y install bridge-utils
已加载插件:fastestmirror, langpacks
HuaDongBD                                                                                                                                             | 2.9 kB  00:00:00     
base                                                                                                                                                  | 3.6 kB  00:00:00     
extras                                                                                                                                                | 3.4 kB  00:00:00     
os                                                                                                                                                    | 3.6 kB  00:00:00     
pkerling-seafile                                                                                                                                      | 3.0 kB  00:00:00     
updates                                                                                                                                               | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 bridge-utils-1.5-9.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@hadron docker]#

3.2 创建网络

创建挂载容器用的br1网桥

[root@hadron docker]# brctl addbr br1
[root@hadron docker]# ip link set dev br1 up
[root@hadron docker]# ip addr add 192.168.3.1/24 dev br1

3.3 启动容器

(1)启动命令

[root@hadron docker]# docker run -d --name=centos7-demo centos7-ssh
f5a002ad0f0e115737e7f4adc94584559e952508f91f195b23dd8a70e6c55039

(2)设置IP

[root@hadron docker]# pipework br1 centos7-demo 192.168.3.10/24

(3)测试联通
分别使用 ping 与 ssh 命令进行验证,看是否可以ping通和成功登录

[root@hadron docker]# ping -c 3 192.168.3.10
PING 192.168.3.10 (192.168.3.10) 56(84) bytes of data.
64 bytes from 192.168.3.10: icmp_seq=1 ttl=64 time=0.111 ms
64 bytes from 192.168.3.10: icmp_seq=2 ttl=64 time=0.081 ms
^C
--- 192.168.3.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.081/0.096/0.111/0.015 ms
[root@hadron docker]# ssh 192.168.3.10
Warning: Permanently added '192.168.3.10' (RSA) to the list of known hosts.
root@192.168.3.10's password: 
[root@f5a002ad0f0e ~]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc  anaconda-ks.cfg  original-ks.cfg
[root@f5a002ad0f0e ~]# exit
logout
Connection to 192.168.3.10 closed.

3.4容器启停

(1)查看正在运行的容器

[root@hadron docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
f5a002ad0f0e        centos7-ssh         "/usr/sbin/sshd -D"   3 minutes ago       Up 3 minutes        22/tcp              centos7-demo
[root@hadron docker]#

(2)停止容器

[root@hadron docker]# docker stop f5a002ad0f0e
f5a002ad0f0e
[root@hadron docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS                     PORTS               NAMES
f5a002ad0f0e        centos7-ssh         "/usr/sbin/sshd -D"   4 minutes ago       Exited (0) 6 seconds ago                       centos7-demo

(3)重新启动容器

[root@hadron docker]# docker start f5a002ad0f0e
f5a002ad0f0e
[root@hadron docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
f5a002ad0f0e        centos7-ssh         "/usr/sbin/sshd -D"   4 minutes ago       Up 3 seconds        22/tcp              centos7-demo

(4)重启后IP地址丢失

[root@hadron docker]# ping -c 3 192.168.3.10
PING 192.168.3.10 (192.168.3.10) 56(84) bytes of data.
From 192.168.3.1 icmp_seq=1 Destination Host Unreachable
From 192.168.3.1 icmp_seq=2 Destination Host Unreachable
From 192.168.3.1 icmp_seq=3 Destination Host Unreachable

--- 192.168.3.10 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2000ms
pipe 3
[root@hadron docker]#
[root@hadron docker]# ssh 192.168.3.10
ssh: connect to host 192.168.3.10 port 22: No route to host

Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。

[root@hadron docker]# pipework br1 centos7-demo 192.168.3.10/24
您在 /var/spool/mail/root 中有新邮件
[root@hadron docker]# ping -c 3 192.168.3.10
PING 192.168.3.10 (192.168.3.10) 56(84) bytes of data.
64 bytes from 192.168.3.10: icmp_seq=1 ttl=64 time=0.111 ms
64 bytes from 192.168.3.10: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 192.168.3.10: icmp_seq=3 ttl=64 time=0.069 ms

--- 192.168.3.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.066/0.082/0.111/0.020 ms
[root@hadron docker]# ssh 192.168.3.10
root@192.168.3.10's password: 
Last login: Wed Aug 16 00:42:48 2017 from 192.168.3.1
[root@f5a002ad0f0e ~]#


[root@f5a002ad0f0e ~]# exit
logout
Connection to 192.168.3.10 closed.
[root@hadron docker]# docker stop f5a002ad0f0e
f5a002ad0f0e
[root@hadron docker]#