docker中级篇

哈喽,大家好,我是花臂。

docker常用命令

帮助命令

1.docker version,查看docker版本信息。

2.docker info,查看docker 系统信息,包括镜像和容器数。

3.docker --help,docker命令帮助。

镜像命令

1.docker images [OPTIONS] [REPOSITORY[:TAG]],列出本地镜像。

REPOSITORY:表示镜像的仓库源 
TAG:镜像的标签 
IMAGE ID:镜像ID 
CREATED:镜像创建时间  
SIZE:镜像大小
同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntudocker将默认使用ubuntu:latest镜像

OPTIONS选项说明:
-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)

[root@bogon docker]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              1b6b1fe7261e        2 days ago          647MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

--digests :显示镜像的摘要信息

[root@bogon docker]# docker images --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED            
tomcat              latest              sha256:ce753be7b61d86f877fe5065eb20c23491f783f283f25f6914ba769fee57886b   1b6b1fe7261e        2 days ago         
hello-world         latest              sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1   bf756fb1ae65        4 months ago  

-q :只显示镜像ID

[root@bogon docker]# docker images -q
1b6b1fe7261e
bf756fb1ae65

--no-trunc :显示完整的镜像信息(显示完整镜像id)

[root@bogon docker]# docker images --no-trunc
REPOSITORY          TAG                 IMAGE ID                                                                  CREATED             SIZE
tomcat              latest              sha256:1b6b1fe7261ea2f94c5911ad04395cb8d05428cad39fa60e9fee556f79e9afc2   2 days ago          647MB
hello-world         latest              sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b   4 months ago        13.3kB

-f :显示满足条件的镜像
--format :指定返回值的模板文件

2.docker search [OPTIONS] 镜像名字,查找镜像

OPTIONS说明:
--no-trunc: 显示完整的镜像描述

-s 指定值: 列出收藏数不小于指定值的镜像。

--automated:只列出automated build类型的镜像

3.docker pull 镜像名字 [:TAG(版本号)],拉取镜像到本地

如果不写版本号则等价于 docker pull tomcat:latest ,拉取最新版本的

4.docker rmi 某个镜像名字/ID删除镜像
删除单个镜像

[root@bogon ~]# docker rmi -f hello-world

删除多个镜像

[root@bogon ~]# docker rmi -f nginx tomcat

删除全部

[root@localhost ~]# docker rmi -f $(docker images -qa)

容器命令

有镜像才能创建容器所以先下载一个centos的镜像下来

[root@bogon ~]# docker pull centos

1.docker run [OPTIONS] image [COMMAND] [ARG....],新建并启动容器

OPTIONS说明(常用)
:有些是一个减号,有些是两个减号
--name="容器新名字":为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i: 以交互模式运行容器,通常与-t同时使用
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用
-P: 随机端口映射
-p: 指定端口映射

启动交互式容器

[root@bogon ~]# docker run -it centos
[root@6abbfa811ec0 /]# 

2.docker ps [OPTIONS],列出正在运行的容器


OPTIONS说明(常用) :
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示上个创建的容器。
-n 指定值:显示上个指定值个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。

3.exit,退出容器
注意:容器停止退出

[root@bogon ~]# docker run -it centos
[root@c1904ec433d2 /]# exit
exit
[root@bogon ~]# 

4.docker start 容器id/容器名字,启动容器

[root@bogon ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
c1904ec433d2        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       pensive_banzai
[root@bogon ~]# docker start c1904ec433d2
c1904ec433d2

5.docker restart 容器id/容器名字,重启容器

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c1904ec433d2        centos              "/bin/bash"         4 minutes ago       Up 8 seconds                            pensive_banzai
[root@bogon ~]# docker restart c1904ec433d2
c1904ec433d2

6.docker stop 容器id/容器名字,停止容器

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c1904ec433d2        centos              "/bin/bash"         4 minutes ago       Up 34 seconds                           pensive_banzai
[root@bogon ~]# docker stop c1904ec433d2
c1904ec433d2

7.docker kill 容器id/容器名字,强制停止容器

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c1904ec433d2        centos              "/bin/bash"         6 minutes ago       Up 3 seconds                            pensive_banzai
[root@bogon ~]# docker kill c1904ec433d2
c1904ec433d2

8.docker rm 容器id/容器名字,删除已停止的容器

[root@bogon ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
c1904ec433d2        centos              "/bin/bash"         7 minutes ago       Exited (137) About a minute ago                       pensive_banzai
[root@bogon ~]# docker rm c1904ec433d2
c1904ec433d2

一次性删除多个容器

[root@bogon ~]# docker rm -f $(docker ps -aq)
6abbfa811ec0

9.docker run -d 容器名字/容器id,启动守护式容器

[root@bogon ~]# docker run -d centos
53830c5442c723a1347e7b7c556ea5531c637cb5e3cc86ffb89d3d634551a390

注意:使用docker ps -a 会发现容器已经退出

[root@bogon ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
53830c5442c7        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       busy_faraday
b7a94a299d6f        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       cranky_herschel

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令 (比如运行top,tail) ,就是会自动退出的。这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start,但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了

所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行

[root@bogon ~]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 1;done"
3d4fc8611ca4fb0697ce2f1782171e54dfa9e0337c1f13eb5f22a7ff3c0c46c6
[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3d4fc8611ca4        centos              "/bin/sh -c 'while t…"   5 seconds ago       Up 4 seconds                            zen_knuth

9.1 docker logs -t -f --tail 数字 容器id/容器名字,查看容器日志

[root@bogon ~]# docker logs -t -f --tail 3 3d4fc8611ca4
2020-05-19T10:10:52.613413091Z hello zzyy
2020-05-19T10:10:53.618164657Z hello zzyy
2020-05-19T10:10:54.622978576Z hello zzyy
2020-05-19T10:10:55.633134677Z hello zzyy
2020-05-19T10:10:56.637745675Z hello zzyy
2020-05-19T10:10:57.642385615Z hello zzyy
2020-05-19T10:10:58.648879113Z hello zzyy
2020-05-19T10:10:59.653726945Z hello zzyy
2020-05-19T10:11:00.658662899Z hello zzyy
2020-05-19T10:11:01.664848579Z hello zzyy
2020-05-19T10:11:02.671991345Z hello zzyy
2020-05-19T10:11:03.687187819Z hello zzyy
2020-05-19T10:11:04.697503807Z hello zzyy
^C2020-05-19T10:11:05.701201498Z hello zzyy
^C
[root@bogon ~]# 
//-t:是加入时间戳
//-f:跟随最新的日志打印(动态显示)
//--tail 数字:表示显示最后数字条信息

9.2 docker top 容器id/容器名字,查看容器内运行的进程

[root@bogon ~]# docker top 3d4fc8611ca4
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                66973               66957               0                   18:08               ?                   00:00:00            /bin/sh -c while true;do echo hello zzyy;sleep 1;done
root                67471               66973               0                   18:14               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

9.3 docker inspect 容器id/容器名字 ,查看容器内部细节

[root@bogon ~]# docker inspect 3d4fc8611ca4
[
    {
        "Id": "3d4fc8611ca4fb0697ce2f1782171e54dfa9e0337c1f13eb5f22a7ff3c0c46c6",
        "Created": "2020-05-19T10:08:29.05779292Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo hello zzyy;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 66973,
            "ExitCode": 0,
            "Error": "",

9.4 进入正在运行的容器并以命令行交互
(1)docker attach 容器id/容器名字

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3d4fc8611ca4        centos              "/bin/sh -c 'while t…"   8 minutes ago       Up 8 minutes                            zen_knuth
[root@bogon ~]# docker attach 3d4fc8611ca4
hello zzyy
hello zzyy

(2)docker exec -it 容器id/容器名字 执行语句

[root@localhost ~]# docker exec -it 4838e55a8b56 ls -l /root/    在外面执行语句并返回结果
[root@localhost ~]# docker exec -it 4838e55a8b56 bin/bash        进入到容器里面去跟attach一样
[root@4838e55a8b56 /]# 
//-i:即使没有附加也保持STDIN 打开
//-t:分配一个伪终端

上述两个的不同:
attach:直接进入容器启动命令的终端,不会启动新的进程
exec:是在容器中打开新的终端,并且可以启动新的进程

9.5 docker cp容器ID:容器内路径 目的主机路径,从容器内拷贝文件到主机上

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3d4fc8611ca4        centos              "/bin/sh -c 'while t…"   18 minutes ago      Up 18 minutes                           zen_knuth
[root@bogon ~]# docker exec -it 3d4fc8611ca4 ls -l /root/
total 12
-rw-------. 1 root root 2366 Jan 13 21:49 anaconda-ks.cfg
-rw-r--r--. 1 root root  435 Jan 13 21:49 anaconda-post.log
-rw-------. 1 root root 2026 Jan 13 21:49 original-ks.cfg
[root@bogon ~]# docker cp 3d4fc8611ca4:/root/anaconda-post.log /root/
[root@bogon ~]# ll|grep anaconda-post.log
-rw-r--r--. 1 root root  435 1月  14 05:49 anaconda-post.log
[root@bogon ~]# 

ok,本次教程就到这儿,有什么疑问,欢迎下方评论区留言!

评论区



© [2020] · Powered by Typecho · Theme by Morecho
鄂ICP备20005123号