docker服务器是c/s(client、server)结构。docker的服务端守护进程运行在主机上,服务端守护进程管理着很多的容器,我们通过客户端Socker连接访问服务端,通过docker的客户端命令操作服务器。常用命令如下:

1. 帮助命令:

  • 1.1. docker version

查看docker服务器的版本。

  • 1.2. docker info

查看docker服务器的更多信息,比如:Container有多少、Image有多少、镜像的地址Registry Mirrors等。

  • 1.3. docker --help

查看docker的命令。

2. 镜像命令:

  • 2.1. docker images

查看本机上的镜像。如下,本机只有一个镜像hello-world。

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        2 months ago        1.84kB
  • REPOSITORY :表示镜像的仓库源。
  • TAG:表示镜像的版本。
  • IMAGE ID:表示镜像的id。
  • SIZE:表示镜像的大小。

docker images 后面有一些可选的参数。

  • -q 表示只显示镜像的id。
[root@localhost ~]# docker images -q
fce289e99eb9
  • -a 列出本地所有的镜像(含中间映像层)

  • --digests 显示摘要信息。显示的信息多了一列DIGEST。

  • --no-trunc 不截断显示信息。默认IMAGE ID只显示前12位。

[root@localhost ~]# docker images --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
hello-world         latest              sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535   fce289e99eb9        2 months ago        1.84kB
[root@localhost ~]# docker images  --no-trunc
REPOSITORY          TAG                 IMAGE ID                                                                  CREATED             SIZE
hello-world         latest              sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e   2 months ago        1.84kB
  • 2.2. docker search 镜像名

表示去hub.docker.com查询镜像。和直接打开这个网站,在搜索框输入镜像名搜索一样。如下:搜索Tomcat镜像。

[root@localhost ~]# docker search tomcat
NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                                     Apache Tomcat is an open source implementati…   2314                [OK]                
tomee                                      Apache TomEE is an all-Apache Java EE certif…   64                  [OK]                
dordoka/tomcat                             Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   52                                      [OK]
davidcaste/alpine-tomcat                   Apache Tomcat 7/8 using Oracle Java 7/8 with…   34                                      [OK]
bitnami/tomcat                             Bitnami Tomcat Docker Image                     27                                      [OK]

这里有个STARS表示这个镜像的点赞人数,和github的一样。

docker search 后面有一些可选的参数。

  • -s 表示列出STARS不小于某个值的镜像。如下:列出STARS大于60的tomcat镜像。
[root@localhost ~]# docker search -s 60  tomcat
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat              Apache Tomcat is an open source implementati…   2314                [OK]                
tomee               Apache TomEE is an all-Apache Java EE certif…   64                  [OK]
  • --automated 表示列出AUTOMATED是OK的镜像。

  • 2.3. docker pull 镜像名

表示把某个镜像从远程拉到本地。例子如下:下载tomcat镜像。



不指定版本的情况下docker pull tomcat 等价于 docker pull tomcat:latest。下载的最新版。

  • 2.4. docker rmi 镜像名或镜像ID

表示删除本地的某个镜像。不指定版本的情况下docker rmi tomcat 等价于 docker rmi tomcat :latest。删除最新版。

docker rmi 还有一些用法:

  • -f 强制删除。例如:docker rmi -f tomcat 。
  • 删除多个。docker rmi 镜像名1:TAG 镜像名2:TAG。
  • 删除本机的全部镜像。docker rmi $(docker images -qa) ,相当于用docker images -qa查询出镜像的id作为参数传递给删除命令。

3. 容器命令:

  • 3.1. 运行容器:

docker run [options] 镜像名或镜像ID [COMMAND]  [ARG...]

表示运行镜像。例如:docker run hello-world这个命令先从本地找hello-world镜像,如果没有就去hub.docker.com(或者阿里云)找hello-world:latest镜像并下载到本地。然后以hello-world镜像为模板生产一个容器实例运行。如果在远程没有找到镜像就返回失败。

  • 可选项 [options]:表示docker的一些可选命令参数。
  • 可选项[COMMAND] :表示给镜像传递的命令。
  • 可选项 [ARG...]:表示给镜像传递的参数。

docker run 的常用[options] :

  • --name 新容器的名字:为容器指定一个名字。

  • -d:后台运行容器,并返回容器ID。

  • -i:以交互模式运行容器,通常与-t同时使用。

  • -t :为容器重新分配一个伪输入终端,通常与-i同时使用。

  • -P:随机端口映射。

  • -p:指定端口映射。有4种格式:

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

交互模式运行容器,例子如下:

[root@localhost ~]# docker run -it centos
[root@6faf4716349a /]#

上面运行一个centos容器,并且开启一个终端与运行的centos容器交互。后面看到root@6faf4716349a 就是root用户登录到容器6faf4716349a上了。6faf4716349a是容器的ID。

后台运行容器。错误的方式:

docker run -d centos

如果用上面的命令运行容器,使用docker ps -a 查看会发现容器已经停止了。这是因为docker要容器在后台一直运行,必须有一个前台进程。如果运行容器的时候的命令[COMMAND] [ARG...]不是那些一直挂起的命令(如top、tail),容器就会自动退出。所以最好的方式是将需要运行的程序以前台进程的形式运行。如下:

docker run -d centos ping www.docker.com

上面表示以守护进程方式运行centos,但是在容器中运行命令ping www.docker.com。使得前台一直挂起。

  • 3.2. 查看容器:

docker ps [options]

docker ps查看正在运行的容器,已经停止的容器不列出。

常用的options说明:

  • -a:列出所有运行过的容器,包括已经停止的容器。docker ps -a
  • -q:只显示容器编号。
  • -l:显示最近创建的容器。docker ps -l 显示最近创建的容器
  • -n:显示最近创建的n个容器。docker ps -n 3 显示最近3次创建的容器
  • --no-trunc:不截断输出。

    列出所有运行过的容器,包括已经停止的容器。例子如下:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6faf4716349a        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            condescending_bose
[root@localhost ~]# 
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
6faf4716349a        centos              "/bin/bash"         4 minutes ago       Up 4 minutes                                condescending_bose
8432fe5aa5b1        fce289e99eb9        "/hello"            2 days ago          Exited (0) 2 days ago                       kind_yalow

STATUS列可以看到,docker ps -a 列出了停止运行的容器。

NAMES列是容器的名字。如果运行容器的时候用--name设置名字,这里就显示设置的名字。如下:

[root@localhost ~]# docker run --name='centos2' centos
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
f20b38eacfea        centos              "/bin/bash"         9 seconds ago       Exited (0) 3 seconds ago                       centos2
  • 3.3. 停止容器

docker stop 容器名或容器ID

停止容器。例如:docker stop centos

  • 3.4. 退出容器

exit 容器停止退出。
ctrl+P+Q 容器不停止退出。

在和容器交互时,输入exit命令。表示停止容器并退出。输入Ctrl+P+Q表示退出,但是不停止容器。

  • 3.5. 启动已经停止的容器。

docker start 容器名或容器ID
  • 3.6. 重启容器。

docker restart 容器名或容器ID
  • 3.7. kill容器,强制停止容器。

docker kill 容器名或容器ID
  • 3.8. 删除已停止的容器。

docker rm 容器ID

如果想批量删除。用下面的2个命令:

docker rm -f $(docker ps -a -q)
docker ps -a -q |xargs docker rm

这里xargs是linux的命令,把上一个命令的结果传递给下一个命令。就是把docker ps -a -q 的输出内容传递给docker rm命令。

  • 3.9. 查看容器日志。

docker logs -f -t --tail 容器ID
  • -t :是在日志中加入时间戳。
  • -f :相当于linux的tail -f,监控日志。
  • --tail:查看日志的最后几行。例如查看日志的最后3行:docker logs --tail 3 容器ID

例子如下:

[root@localhost ~]# docker logs -ft --tail 3  d175764e99f2
2019-03-11T08:08:27.955057288Z 64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=390 ttl=233 time=215 ms
2019-03-11T08:08:28.944550516Z 64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=391 ttl=233 time=202 ms
2019-03-11T08:08:29.964682899Z 64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=392 ttl=233 time=220 ms
2019-03-11T08:08:30.961770389Z 64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=393 ttl=233 time=216 ms
  • 3.10. 查看容器内部细节。

docker inspect 容器ID

容器是一层套一层的,比如tomcat要依赖于java。使用这个命令可以看到容器内部的细节。和启动容器时执行的命令。

  • 3.11. 退出容器后,重新与容器交互。

退出容器之后,想再与容器交互,可使用下面的2中方式:

docker exec -it 容器ID 要在容器执行的shell命令
docker attach 容器ID

这2种方式的区别是:

  • exec 是在容器中打开新的终端,并且可以启动新的进程。(推荐这种方式)
  • attach 是直接进入容器的启动终端。不会启动新的进程。如果是用-d启动的容器,使用attach 进入后,用Ctrl+P+Q也没办法退出。只能Ctrl+C关闭终端,但是因为终端关闭容器停止了。所以不推荐这种方式

也就是attach直接进入容器的启动终端,在容器内部再执行想要操作的shell命令。而exec 打开新的终端,可以直接传递想要操作的shell命令,并且马上返回结果。

例如要在容器内执行ls -l命令,exec 例子如下:

[root@localhost ~]# docker exec -it d175764e99f2 ls -l
total 12
-rw-r--r--.   1 root root 12076 Dec  5 01:37 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Dec  5 01:36 bin -> usr/bin
drwxr-xr-x.   5 root root   340 Mar 11 08:01 dev

attach例子如下:因为我的启动终端一直"ping www.docker.com"在控制台打印信息,所以进入之后还是一直打印ping信息。这里因为我用-d启动的容器,用Ctrl+P+Q也没办法退出。只能Ctrl+C关闭终端,但是因为终端关闭,容器停止了。

[root@localhost ~]# docker attach d175764e99f2
64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=2294 ttl=233 time=222 ms
64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=2295 ttl=233 time=208 ms
64 bytes from server-13-35-99-22.lax3.r.cloudfront.net (13.35.99.22): icmp_seq=2296 ttl=233 time=249 ms
  • 3.12. 查看容器的进程。

docker top 容器ID

例子如下:

[root@localhost ~]# docker top 42b67ae89cf4
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9619                9603                0                   17:41               pts/0               00:00:00            /bin/bash
  • 3.13. 从容器内拷贝文件到主机上

docker cp 容器ID:容器内路径 宿主机路径

例子如下:把42b67ae89cf4容器的/tmp/yum.log文件复制到宿主机的/root下面。

[root@localhost ~]# docker cp 42b67ae89cf4:/tmp/yum.log /root
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 1730 3月  27 2018 anaconda-ks.cfg
-rw-r--r--. 1 root root 1778 3月  27 2018 initial-setup-ks.cfg
-rw-r--r--. 1 root root  267 5月  23 2018 webui
-rw-------. 1 root root    0 12月  5 09:36 yum.log

results matching ""

    No results matching ""