• 05. DOCKER 容器管理


    查看容器(ps)

    在运行容器之前,我们需要知道如何查看运行中的容器:

    # Management Commands(推荐)
    docker container ps
    # 或者
    docker container ls
    
    # Commands
    docker ps
    

    使用此方法只能看到运行中的容器,对于以及停止的容器,还需要使用 -a 参数,比如:

    docker container ps -a
    

    容器运行(run,无参数)

    前面有说过,容器是镜像的实例。学习 docker 最终目的就是就是运行它。

    docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
    

    运行第一个测试容器:

    # Management Commands(推荐)
    docker container run hello-world
    
    # Commands
    docker run hello-world
    

    如图所示:

    hello-world 容器是一个测试容器,在输出一些文字之后就会退出,通过这个过程,我们可以发现:

    1. 对于运行容器,如果镜像不存在,则会去 registry 中自动下载。
    2. 使用 ps 查看容器的时候,如果不使用 -a 参数是看不到状态属于 Exited 的容器的。
    3. 使用 ps 可以简单的看到容器的 ID,使用的镜像,执行的命令,创建时间,运行状态,端口,容器的名字等信息。

    容器运行(run -d,守护态)

    在运行容器时,需要确定这个容器是运行在前台模式还是后台模式。

    -d,--detach ,守护态运行。能够将容器运行在后台模式。这样所有的 IO 都只能通过网络资源或存储卷来进行交互。容器不再监听执行 docker run 这个命令行的窗口。有点类似于 Linux 启动程序时候的 nohup + & 组合。

    docker container run -d hello-world
    

    如图所示:

    可以发现,hello-world 容器加了 -d 参数后不在输出它的信息,只是返回了一长串字符,其实就是完整的 Container ID,用法类似 Image ID。

    同时由于 hello-world 容器本身的特性,程序在后台执行完成之后就直接退出了,容器也跟着退出了。


    再次运行以 nginx 容器为例:

    docker container run nginx
    

    如图所示:

    可以发现以下信息:

    1. 由于没有跟 TAG,默认会以 latest 版本执行。在 docker 中,如果是运行 latest 版本,docker 都会去仓库试着拉取,而不是直接使用本地的镜像,因为本地的 latest 不一定是真正的 latest。
    2. 容器在运行之后会以前台模式运行,所有它 hung 在了命令行。
    3. 此时如果我们新开一个窗口来查看,可以发现容器处于 Up 状态,如下图所示:

    1. 如果我们去 docker run 的窗口使用 Ctrl + c 中断,然后再次查看容器运行状态,可以发现容器已经退出,这就是前台运行的问题,如图所示:


    如果使用后台运行模式运行该容器:

    docker container run -d nginx
    

    运行效果如图所示:

    容器被放在了后台运行,不会 hung 在命令行。当然所有的输出信息也不能直接看到了。

    容器运行(run -it,交互式运行)

    在使用 -d 参数之后,容器就不会 hung 在命令行窗口,而是以后台方式运行。但是这同时也有一个问题,某些时候我们是需要进入容器查看相关启动等信息的。此时就需要另外的参数配合使用:

    • -i,--interactive:打开一个交互式界面。
    • -t,--tty :打开一个 TTY 终端。

    将这个两个参数结合就是打开一个交互式的 TTY 终端。

    docker container run -it nginx /bin/bash
    

    如图所示:

    通过该方法在创建容器的时候指定运行命令,然后以 bash 进入容器内部的命令行。可以发现:

    1. 容器内部就是 linux 的目录结构,但是是一个很简化的 linux,很多基础命令都没有。
    2. 当退出容器命令行,容器也跟着退出。原因是我们重写容器内部的命令为 bash 之后,nginx 就没有启动了,当退出 bash 之后,容器内部就没有进程了,所有容器就退出了。
    3. 这种方式用的比较少,一般都是容器运行之后,使用专门的命令进入容器。

    容器运行(run --name,容器命名)

    在创建容器的时候,如果不给容器指定一个名字,容器会生成一个随机的名字,一般都是以 xxx_xxx 的格式。

    docker container run -d --name demo01 nginx
    

    如图所示:

    针对容器的名字,我们可以根据自己的需求指定相关的命名规范,以此来实现统一管理的目的。

    容器运行(run --rm,退出删除)

    某些容器可能是一次性容器,在运行之后,容器退出。同时不保留在 ps 中,此时就需要使用到 --rm 参数。

    docker container run --rm --name rm_test hello-world
    

    如图所示:

    容器运行(run --restart,重启规则)

    为了保障在以外的停止之后能够自动恢复,就需要对它配置相关 --restart 规则:

    • on-failure:容器停止时,容器出现报错,则容器会被重启。但是如果 docker 服务被重启了该配置就不会生效。
    • unless-stopped:容器停止,如果没有报错,则容器会被重启。即使重启了 docker 服务,该配置也生效。
    • always:不管如何,容器只要停止就重启。
    docker container run -d --restart always --name busybox_test busybox /bin/sh -c "sleep 60"
    

    busybox 镜像是一个精简的 Linux,非常小,适合用来做测试。结果如下:

    通过过一段时间查看,发现在容器内部 sleep 60 之后退出,然后被重启拉起一个新的。

    以上就是容器运行的基本参数,至于容器的存储卷,网络等内容,后面会单独分节介绍。

    查看详情(inspect)

    通过该命令可以查看容器的详细信息:

    docker container inspect busybox_test
    

    详细信息中需要关注的点包括:

    • Image:使用的镜像。
    • Volumes:数据存储卷。
    • IPAddress:容器的 IP 地址。
    • Ports:端口信息。

    状态管理

    通过该命令可以查看容器的运行时状态,如 Up,Exited 等:

    # 创建容器但不运行
    docker container create --name demo02 nginx
    
    # 启动容器
    docker container start demo02
    
    # 暂停容器
    docker container pause demo02
    
    # 继续运行容器
    docker container unpause demo02
    
    # 停止容器
    docker container stop demo02
    
    # 重启容器
    docker container restart demo02
    

    结果如图所示:

    进入容器(attach)

    通过该命令可以连接到一个运行中的容器:

    docker container attach --sig-proxy=false demo02
    

    使用 --sig-proxy=false 的目的是为了避免 Ctrl + C 或者 Ctrl + D 使容器退出。

    该命令会对容器进行监听,命令行处于交互式界面,此时从新窗口请求该容器的 nginx:

    可以看到日志直接输出到屏幕,Ctrl + C 就可以退出该界面且保持容器继续运行。

    进入容器(exec)

    上面的方法是将输出直接输出到屏幕上,无法操作,如果想将容器当虚拟机一样使用,则需要 exec:

    docker exec -it demo02 /bin/bash
    

    注意,exec 后面需要跟执行命令,由于是命令行,则需要使用 /bin/bash 或者 /bin/sh

    查看日志(logs)

    通过该命令可以实时查看容器运行的日志:

    docker container logs -f demo02
    

    如图所示:

    使用 -f 的参数可以让它像 linux 中的 tail 命令一样。否则就是一次性查看,跟 cat 一样。

    文件拷贝(cp)

    通过该命令可以实现容器和宿主机之间文件传输:

    # 拷贝文件到容器
    docker container cp anaconda-ks.cfg demo02:/tmp/
    
    # 拷贝文件到容器并改名
    docker container cp anaconda-ks.cfg demo02:/tmp/1.txt
    
    # 拷贝目录到容器
    docker container cp demo demo02:/tmp/
    
    # 拷贝文件到本地
    docker container cp demo02:/tmp/1.txt .
    

    如图所示:

    查看端口(port)

    通过该命令可以查看容器和宿主机的端口映射关系:

    docker container port demo02
    

    查看状态(stats)

    通过该命令可以查看容器内部系统资源使用情况:

    docker container stats demo02
    

    如图所示:

    查看进程(top)

    通过该命令可以查看到容器内部运行的进程:

    docker container top demo02
    

    如图所示:

    提交镜像(commit)

    该命令可以将现有的容器提交成镜像:

    docker container commit -a "Dylan <1214966109@qq.com>" -m "Copy file" -p demo02 dylan/nginx-copy-file:v1.0
    

    参数说明:

    • -a:作者信息。
    • -m:提交信息,有点像 git commit -m。
    • -p:生成镜像时容器暂停。

    如图所示:

    停止容器(kill)

    该命令相较于 stop 更暴力杀死一个或多个容器:

    docker container kill demo02
    

    如图所示:

    重命名容器(rename)

    该命令可以对容器重命名:

    docker container rename demo02 demo03
    

    如图所示:

    导出容器(export)

    该命令可以将容器当前的状态导出:

    docker container export -o /tmp/demo03.tar demo03
    

    如图所示:

    查看系统变化(diff)

    该命令可以查看容器目前的文件和文件系统本身的差异:

    docker container diff demo03
    

    如图所示:

    删除容器(rm)

    该命令可以删除指定的一个或多个容器:

    # 删除停止的容器
    docker container rm a7851616b54c
    
    # 删除运行中的容器
    docker container rm -f 338a3419e42e
    

    如果容器在运行,需要使用 -f 强制删除:

    批量删除(rm)

    对于容器或者镜像,都可以使用条件筛选的方式对它进行批量删除:

    # 删除所有容器
    docker container rm $(docker container ls -aq)
    
    # 删除所有 redis 镜像
    docker image rm $(docker image ls -aq redis)
    
    # 删除所有在 mongo:3.2 之前的镜像
    docker image rm $(docker image ls -aq -f before=mongo:3.2)
    

    使用 -q 参数能够增加筛选条件。

    删除容器(prune)

    该命令可以删除没有使用的容器:

    docker container prune
    

    可以通过 -f 参数直接删除,不用确认。

    到此,容器的大部分操作都已经体验完毕。接下来将讲解如何制作镜像!

  • 相关阅读:
    做汉堡
    结对运算(14曾柏树,15张奇聪)小学生四则运算总结体会
    一个能自动生成小学四则运算题目的程序
    css样式实现立方体制作
    bootstrap导航条+模态对话框+分页样式
    bootstrap 表单+按钮+对话框
    百度地图控件
    百度地图覆盖物0.1版本
    HTML5 javascript 音乐 音频
    html5 javascript 小型计算器
  • 原文地址:https://www.cnblogs.com/Dy1an/p/16372700.html
Copyright © 2020-2023  润新知