006、docker容器常用命令
本文最后更新于 65 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

docker容器常用命令

一.docker容器相关指令概述

如下图所示,均为docker容器相关的指令。但随着我们对docker工具的熟练,基本上可以省略container子选项,但新手建议还是加上container选项。

类似的,还有"docker image","docker network","docker volume"等,建议安装docker的时候一并安装上自动补全的功能哟~

image-20210610005724947

二.生产环境中常用的 docker容器相关指令

1.创建容器(create)

[root@docker201.oldboyedu.com ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        1.20.1    993ef3592f66   2 weeks ago    133MB
nginx        latest    d1a364dc548d   2 weeks ago    133MB
mysql        latest    c0cdc95609f1   4 weeks ago    556MB
centos       7         8652b9f0cb4c   7 months ago   204MB
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container create centos:7 
b0a46280a223b9a006eadcb4d6c64bcbb6a4b973e54b3c67f0cd2b930d54dc6b
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container create mysql:latest 
55fd7d0b64019facf444930db4e3eb2f64138249168e1e5b017c7df42c83dc49
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container create nginx:1.20.1 
283020072fec486d189bafc2c0b423ad04836a8c636964ead11d7487356d2aaf
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container create centos:6
Unable to find image 'centos:6' locally
6: Pulling from library/centos
ff50d722b382: Pull complete 
Digest: sha256:dec8f471302de43f4cfcf82f56d99a5227b5ea1aa6d02fa56344986e1f4610e7
Status: Downloaded newer image for centos:6
56ac0fdeffc677c7fa2e4065b02da0c3d41e99bea69cdd15089e736a61b93b18
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        1.20.1    993ef3592f66   2 weeks ago    133MB
nginx        latest    d1a364dc548d   2 weeks ago    133MB
mysql        latest    c0cdc95609f1   4 weeks ago    556MB
centos       7         8652b9f0cb4c   7 months ago   204MB
centos       6         d0957ffdf8a2   2 years ago    194MB
[root@docker201.oldboyedu.com ~]# 

温馨提示:
    (1)如下图所示,我们可以基于create指令来创建一个容器。
    (2)如果本地镜像中有容器,则直接创建,如果本地没有镜像则会去官方下载相应的镜像。

image-20210612122352572

2.查看已创建的容器(ps,ls,list)

[root@docker201.oldboyedu.com ~]# docker container ps --help

Usage:  docker container ls [OPTIONS]

List containers

Aliases:
  ls, ps, list

Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display container IDs
  -s, --size            Display total file sizes
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container ps -a -q  # 查看所有的容器ID
4432a298dd5e
784c9a734d65
f5891c2cf303
4cf79bf37806
[root@docker201.oldboyedu.com ~]# 

相关字段说明:
    CONTAINER ID:   
        容器的唯一ID编号。

    IMAGE:
        镜像的名称

    COMMAND:
        容器的初始化命令,该命令和镜像的默认设置有关,当然,在启动容器时我们时可以修改的。

    CREATED:
        创建的时间。

    STATUS:
        当前的状态。

    PORTS:
        对外暴露的端口。

    NAMES:
        容器的名称,若不指定,则docker引擎会自动帮咱们随机生成一个容器名称。

温馨提示:
    如下图所示,其中"ls", "ps", "list"均是别名信息哟~用哪个都成。

image-20210612125002886

3.运行一个已创建的容器(start)

[root@docker201.oldboyedu.com ~]# docker container start b0a46280a223
b0a46280a223
[root@docker201.oldboyedu.com ~]# 

如下图所示,我们基于已创建的容器名称或者其容器ID来启动一个容器。

温馨提示:
    容器刚刚创建时处于"Created"状态,下图还展示了退出状态("Exited ...")和启动状态("Up ..")。

image-20210612130055511

4.停止一个正在运行的容器(stop)

[root@docker201.oldboyedu.com ~]# docker container stop elastic_albattani
elastic_albattani
[root@docker201.oldboyedu.com ~]# 

如下图所示,我们可以将正在运行的容器将其停止。

image-20210612131052114

5.重启容器(restart)

如下图所示,我们可以重启一个容器。

image-20210612132304165

6.创建并启动一个容器(run,等效于"create + start")

[root@docker201.oldboyedu.com ~]# docker container run -it --name oldboyedu_linux centos:7 

常见的相关参数说明:
    -i:
        即"interactive",音标为[ˌɪntərˈæktɪv] ,表示交互式的类型。
        通常和"-t"选项搭配使用。

    -t:
        即"terminal",音标为[ˈtɜːmɪnl],表示启动一个终端。
        通常和"-i"选项搭配使用。

    -d:
        让容器在后台运行,默认情况下,容器是在前台(当前终端)运行的,这意味着会阻塞当前终端。

    --name:
        创建容器时指定名称。

温馨提示:
    docker run的时候,所有的参数,必须写在镜像名称前面哟~

image-20210612133609434

7.删除容器(rm)

    如下图所示,删除容器时既可以基于容器ID删除,也可以基于容器名称删除哟~

    当然,我们也可以批量删除容器,如下所示:
        [root@docker201.oldboyedu.com ~]# docker container ps -a -q
        4432a298dd5e
        784c9a734d65
        f5891c2cf303
        4cf79bf37806
        [root@docker201.oldboyedu.com ~]# 
        [root@docker201.oldboyedu.com ~]# docker container rm -f `docker container ps -a -q`
        4432a298dd5e
        784c9a734d65
        f5891c2cf303
        4cf79bf37806
        [root@docker201.oldboyedu.com ~]# 
        [root@docker201.oldboyedu.com ~]# docker container ps -a -q
        [root@docker201.oldboyedu.com ~]# 

image-20210612134926813

8.进入容器并不创建新的终端(attach)

温馨提示:
    退出该终端方式比较特殊,需要依次执行"ctrl + p","ctrl + q"。 
    生产环境中不推荐使用,忘记它吧。即了解即可。

[root@docker201.oldboyedu.com ~]# docker container ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
3f2a16e0d601   centos:7   "/bin/bash"   27 minutes ago   Up 10 seconds             sharp_swirles
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container attach 3f2a16e0d601
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# uname -r
3.10.0-1160.el7.x86_64
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# uname -m
x86_64
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 06:36 pts/0    00:00:00 /bin/bash
root         19      1  0 06:37 pts/0    00:00:00 ps -ef
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# echo "oldboyedu linux" > /dev/pts/0 
oldboyedu linux
[root@3f2a16e0d601 /]# 
[root@3f2a16e0d601 /]# read escape sequence
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
3f2a16e0d601   centos:7   "/bin/bash"   36 minutes ago   Up 9 minutes             sharp_swirles
[root@docker201.oldboyedu.com ~]# 

    如下图所示,我们分别开启2个终端使用attach来连接同一个容器,竟然发现这两个终端连接的是同一个容器哟~

image-20210612144119636

9.进入容器并创建新的终端(exec)

    如下图所示,我们可以进入到正在运行的容器。

image-20210612145358732

10.强杀容器(kill)

    如下图所示,我们可以使用kill指令强行杀死某个正在运行的容器。

image-20210612153609010

11.显式正在运行的容器中进程信息(top)

[root@docker201.oldboyedu.com ~]# docker container top b25c10758474

如下图所示,我们可以基于容器名称或者容器的ID查看相应容器中运行的进程。

image-20210612160211618

12.对容器的名称进行重命名(rename)

    如下图所示,我们可以已创建的容器进行重命名操作哟~

    但请注意,容器的命名规则为"[a-zA-Z0-9][a-zA-Z0-9_.-]",不要妄图使用其它特殊符号哟~

image-20210612160659638

13.获取容器的启动日志(logs)

[root@docker201.oldboyedu.com ~]# docker container logs -f -n 5 oldboy_nginx1.20.1 
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oldboy_nginx1.20.1  # 获取容器的IP地址。
172.17.0.3
[root@docker201.oldboyedu.com ~]# 

如下图所示,我们可以查看到访问容器服务的日志信息哟~

温馨提示:
    建议进入到nginx的容器内查看其访问日志,不难发现其就是一个符号链接哟。

image-20210612163257906

14.将宿主机的数据拷贝到虚拟机内(cp)

如下图所示,我们可以轻松的将宿主机的

image-20210612164408847

15.显示容器资源使用统计信息的实时流(stats)

[root@docker201.oldboyedu.com ~]# docker container stats -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker container stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output
[root@docker201.oldboyedu.com ~]# 

image-20210612164859898

16.暂停容器运行(pause)

[root@docker201.oldboyedu.com ~]# docker container pause oldboy_nginx1.20.1 

如下图所示,我们可以将容器暂停,但一旦将容器暂停,这也意味着该容器无法对外提供服务啦!

值得注意的时,暂停容器运行,其状态的时间并不会变动了,而是停在这一刻了。

image-20210612165629989

17.恢复容器运行(unpause)

[root@docker201.oldboyedu.com ~]# docker container unpause oldboy_nginx1.20.1 

如下图所示,恢复容器运行后,其时间还是会接着暂停时间的容器开始计数哟~

image-20210612170011087

18.阻止直到一个或多个容器停止,然后打印其出口代码(wait)

[root@docker201.oldboyedu.com ~]# docker container wait oldboy_centos7

image-20210612170458540

19.将容器的文件系统导出为tar存档(export)

[root@docker201.oldboyedu.com /yinzhengjie]# docker container ps
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS          PORTS     NAMES
b25c10758474   nginx:1.20.1   "/docker-entrypoint.…"   2 hours ago   Up 50 minutes   80/tcp    oldboy_nginx1.20.1
[root@docker201.oldboyedu.com /yinzhengjie]# 
[root@docker201.oldboyedu.com /yinzhengjie]# ll
总用量 0
[root@docker201.oldboyedu.com /yinzhengjie]# 
[root@docker201.oldboyedu.com /yinzhengjie]# docker container export oldboy_nginx1.20.1 -o oldboy_nginx.tar.gz
[root@docker201.oldboyedu.com /yinzhengjie]# 
[root@docker201.oldboyedu.com /yinzhengjie]# ll
总用量 184288
-rw------- 1 root root 188708864 6月  12 17:15 oldboy_nginx.tar.gz
[root@docker201.oldboyedu.com /yinzhengjie]# 

温馨提示:
    如下图所示,可以导出来完哟~

image-20210612171812190

20.列出端口映射或容器的特定映射(port)

战略性忽略,后期讲解网络映射后在进行讲解!

21.显示一个或多个容器的详细信息(inspect)

战略性忽略,等学完后面的内容后在进行讲解。

[root@docker201.oldboyedu.com ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oldboy_app01

推荐阅读:
    https://docs.docker.com/engine/reference/commandline/inspect/

image-20210621094954563

22.更新一个或多个容器的配置(update)

战略性忽略,后期找一个案例测试。

23.根据容器的更改创建新图像(commit)

战略性忽略,后期讲解自定义镜像时在进行集中讲解。

24.检查对容器文件系统上的文件或目录所做的更改(diff)

检查效果如下图所示,战略性忽略吧,目前感觉它的用处并不大。

image-20210612172606926

三.关于容器的其它补充知识点

1.启动容器时自定义初始化指令

[root@docker201.oldboyedu.com ~]# docker run -d -it centos:7 sleep 10
159c23951cf46b48d463a9a3220db9bd01854845d5ba4a1e00ca31a2a9a66646
[root@docker201.oldboyedu.com ~]# 

如下图所示,我们的容器运行10秒后会自动退出,这和我们自定义的命令有关,因为我们自定义容器初始化指令是"sleep 10"。这意味着程序守护进程的程序10秒后会自动退出,从而容器也会跟随着退出哟~

如果想要将容器放在后台一直运行的话,那么容器的守护程序(初始化指令)必须能够拥有阻塞当前终端的能力(比如"tail -100f /etc/resolv.conf"),否则容器就会退出哟。

image-20210612142024047

2.启动nginx是指定全局指令(global directives)概述

(1)安装nginx
[root@docker201.oldboyedu.com ~]# yum -y install epel-release
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# yum -y install nginx

(2)运行nginx,查看nginx默认的启动用户
[root@docker201.oldboyedu.com ~]# grep ^user /etc/nginx/nginx.conf
user nginx;
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# vim /etc/nginx/nginx.conf  # 将上面的user指令注释掉!
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# grep ^user /etc/nginx/nginx.conf
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# useradd oldboy
[root@docker201.oldboyedu.com ~]# 
[root@docker201.oldboyedu.com ~]# nginx -g "user oldboy;daemon off;"  # 将nginx设置为"daemon off"则会阻塞当前终端(即前台运行)哟~

image-20210612152500954

3.查看nginx容器的守护进程

[root@docker201.oldboyedu.com ~]# docker container exec -it b25c10758474 /bin/bash 
root@b25c10758474:/# 
root@b25c10758474:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@b25c10758474:/# 
root@b25c10758474:/# 
root@b25c10758474:/# apt-get update
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://deb.debian.org/debian buster InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Reading package lists... Done
root@b25c10758474:/# 
root@b25c10758474:/# 
root@b25c10758474:/# apt-get -y install procps
Reading package lists... Done
Building dependency tree       
Reading state information... Done
procps is already the newest version (2:3.3.15-2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
root@b25c10758474:/# 
root@b25c10758474:/# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 07:33 pts/0    00:00:00 nginx: master process nginx -g daemon off;
nginx        25      1  0 07:33 pts/0    00:00:00 nginx: worker process
nginx        26      1  0 07:33 pts/0    00:00:00 nginx: worker process
root         34      0  0 07:38 pts/1    00:00:00 /bin/bash
root        295     34 

image-20210612155324763

四.使用xshell添加快速命令集

1.每次敲击批量删除所有容器比较繁琐

    如下图所示,学习阶段,每次敲击"docker rm -f `docker ps -a -q`"是不是会觉得很烦呢?

    此时我们可以借助xshell工具来帮咱们实现一个快捷键。

image-20210613003539504

2.启用快速命令

依次点击"查看" ---> "快速命令" ---> 显示效果如下图所示。

image-20210613003836289

3.创建快速命令集

    如下图所示,双击标记的空白处,按照你的需求自定义指令即可,记得取消勾选"追加CR(A)"哟~

image-20210613004216206

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇