【云原生】Docker中容器管理常用所有命令

1.docker 容器创建流程

2.容器运行本质

bash 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
创建容器基本选项:

--name:为容器命名
-i:交互式创建容器
-d:后台创建容器
-t:为容器分配伪终端

Docker 容器存在的意义就是为了运行容器中的应用,对外提供服务,所以启动容器的目的就是启动运行该容器中的应用。容器中的应用运行完毕后,容器就会自动终止。所以如果不想让容器启动后立即终止运行,则就需要使容器应用不能立即结束。通常采用的方式有两种,使应用处于与用户交互的状态或等待状态。

3.docker run

从镜像创建并运行一个新容器

格式:

bash 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

创建一个centos7.9镜像

bash 复制代码
[root@localhost ~]# docker run  -it --name centos7 centos:7.9.2009
[root@4c392a1a06d7 /]# 
#前台退出容器 ctrl+p+q
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE             COMMAND       CREATED          STATUS          PORTS     NAMES
4c392a1a06d7   centos:7.9.2009   "/bin/bash"   11 seconds ago   Up 10 seconds             centos7

前台退出容器快捷键 ctrl+p+q 容器在后台运行

4.docker exec

在正在运行的容器中执行命令

格式:

bash 复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

选项:

bash 复制代码
--detach,-d:分离模式:在后台执行命令
--detach-keys:覆盖分离容器的键序列
--env -e:设置环境变量
--env-file:读写一个环境变量文件
--interactive,-i:保持STDIN打开,即使没有连接
--privileged:赋予命令扩展权限
--tty,-t:分配一个伪终端
--user,-u;用户名或UID(格式:< name| UID >[:<group|gid>])
--workdir,-w:容器内的工作目录

进入centos7容器中

bash 复制代码
[root@localhost ~]# docker exec -it -w /tmp  centos7 /bin/bash
[root@4c392a1a06d7 tmp]# pwd
/tmp
docker attach

将本地标准输入、输出和错误流附加到正在运行的容器

格式:

bash 复制代码
docker attach [OPTIONS] CONTAINER
docker exec 与 docker attach的区别?
  • docke exec会新建一个进程来访问容器进程,一般与-it选项联合使用,一般使用exit命令退出i并终止当前进程

  • docker attach不会新建进程,而是进入容器原有的进程,根据情况可以使用exit或者ctrl+p+q来进行退出容器

5.docker ps

列表容器

格式:

bash 复制代码
docker ps [OPTIONS]

选项:

复制代码
-a,-all:显示所有容器(默认显示正在运行)
-f:根据提供的条件过滤输出
--latest,-l:显示最新创建的容器(包括所有状态)
--no-trunc:不要截断输出
--quiet,-q:只显示容器id
--size,-s:显示总文件大小

注意:docker ps不支持容器间的文件复制传递

6.docker top

显示容器的运行进程

格式:

bash 复制代码
docker top CONTAINER [ps OPTIONS]

7.docker 容器管理

启动
bash 复制代码
docker start [OPTIONS] CONTAINER [CONTAINER...]
停止
bash 复制代码
docker stop [OPTIONS] CONTAINER [CONTAINER...]
​
#强制停止
docker kill [OPTIONS] CONTAINER [CONTAINER...]
重启
bash 复制代码
docker restart [OPTIONS] CONTAINER [CONTAINER...]
暂停
bash 复制代码
docker pause CONTAINER [CONTAINER...]
取消暂停
bash 复制代码
docker unpause CONTAINER [CONTAINER...]

8.docker logs

获取容器日志

格式:

bash 复制代码
docker logs [OPTIONS] CONTAINER

选项:

复制代码
--details:显示日志提供的额外详细信息 
--follow,-f:跟踪日志输出
--since:显示从时间戳开始的日志(例如2013-01-02T13:23:37Z)或相对日志(例如42m的42minutes)
--tail,-n:从日志末尾开始显示的行数
-t:显示日志时间戳
--until:在时间戳之前显示日志(例如2013-01-02T13:23:37Z)或相对显示(例如42m表示42minutes)

查看5秒之前的日志内容的前3行

bash 复制代码
[root@localhost ~]# docker logs --until 5s -n 3 nginx1
2023/07/12 10:04:58 [notice] 1#1: start worker process 32
2023/07/12 10:04:58 [notice] 1#1: start worker process 33
2023/07/12 10:04:58 [notice] 1#1: start worker process 34

9.docker cp

在容器和本地文件系统之间复制文件/文件夹

格式:

bash 复制代码
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

选项:

复制代码
-a:归档模式(复制所有uid/gid信息)
--quiet,-q:在复制过程中抑制进度输出。如果没有终端连接,则自动抑制进度输出

10.docker rm

移除一个或多个容器

格式:

bash 复制代码
docker rm [OPTIONS] CONTAINER [CONTAINER...]

选项:

复制代码
--force,-f:强制移除正在运行的容器(使用SIGKILL)
--link,-l:移除指定的链接
--volumes,-v:移除与容器关联的匿名卷

11.docker commit

根据容器的更改创建一个新映像

格式:

bash 复制代码
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

选项:

复制代码
--author,-a:作者(如John Hannibal Smith <hannibal@a-team.com>)
--change,-c:在创建的镜像上应用Dockerfile指令
--message,-m:提交消息
--pause,-p:在提交期间暂停容器

创建一个centos7镜像,进行安装net-tools工具,然后进行打包成镜像

bash 复制代码
[root@localhost ~]#  docker run -itd --name centos centos:7.9.2009
1d1725c19cbe9c6e119f055827a316dd351eb4adeae291a878a39418312daed5
[root@localhost ~]# docker exec -it centos /bin/bash
[root@1d1725c19cbe /]# yum -y install net-tools

进行打包

bash 复制代码
[root@localhost ~]# docker commit -a 'conquerbug@163.com' centos centos7:net-tools
sha256:0db0f584d14de19f7b377fa385ea43e7abcb57223f4a51c690c5b1628e882f70
[root@localhost ~]# docker images
REPOSITORY        TAG         IMAGE ID       CREATED         SIZE
centos7           net-tools   0db0f584d14d   6 seconds ago   418MB

然后,再基于当前镜像创建容器即可

12.docker导出/导入

docker export

将容器文件系统导出为tar归档文件

格式:

bash 复制代码
docker export [OPTIONS] CONTAINER

选项:

复制代码
--output,-o:写入文件,而不是标准输出

将当前容器进行打包

bash 复制代码
[root@localhost ~]# docker export -o centos.tar centos
[root@localhost ~]# ls
centos.tar  Dockerfile  httpd-2.4.57.tar.gz  image.tar  my.cnf  original-ks.cfg
docker import

从压缩包中导入内容以创建文件系统映像

格式:

bash 复制代码
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

选项:

复制代码
--change,-c:在创建的镜像上应用Dockerfile指令
--message,-m:为导入的图像设置提交消息
--platform:如果服务器支持多平台,请设置平台

将刚刚打包的容器进行还原

bash 复制代码
[root@localhost ~]# docker import centos.tar centos:test
sha256:6bc2adb97476b7b797a5a129c68afcba4ce05ab487812727c7049003f2a1049e
[root@localhost ~]# docker images
REPOSITORY        TAG         IMAGE ID       CREATED             SIZE
centos            test        6bc2adb97476   4 seconds ago       394MB

13.docker镜像/容器导出和导入的区别

export与save
  1. export作用于容器,save作用于镜像,但它们导出的结果都是为tar文件

  2. export一次只能对一个容器进行导出,save一次可以对多个镜像进行导出

  3. export只是对当前容器的文件系统快照进行导出,其会丢失原镜像的所有历史记录与元数据信息,save则是保存了原镜像的完整记录。

import与load
  1. import导入的是容器包,load加载的是镜像包,但最终都会恢复为镜像

  2. import恢复为的镜像已包含当前镜像一层,load恢复的镜像与原镜像的分层是完全相同的。

  3. import恢复的镜像就是新构建的镜像,与原镜像的imageID不同,load恢复的镜像与原镜像是同一个镜像,即imageID相同。

  4. import可以为导入的镜像指定从<repository>与<tag>,load加载的镜像不能指定<repository>与<tag>,与原镜像的相同

14.docker system

管理码头工人

1.docker system df

查看docker磁盘使用情况

格式:

复制代码
docker system df [OPTIONS]

查看当前系统的docker磁盘使用情况

bash 复制代码
[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          9         2         1.504GB   1.435GB (95%)
Containers      2         1         213.9MB   213.9MB (100%)
Local Volumes   3         1         6.174MB   1.501MB (24%)
Build Cache     19        0         465.4MB   465.4MB

选项:

复制代码
--format:使用自定义模板格式化输出:` table `:使用
bash 复制代码
docker system events [OPTIONS]
复制代码
列标题以表格格式打印输出(默认)` table template `:使用给定的Go模板以表格格式打印输出` json `:使用给定的Go模板打印输出。有关使用模板格式化输出的更多信息,请参阅https://docs.docker.com/go/formatting/
​
--verbose,-v:显示空间使用的详细信息
2.docker system events

从服务器获取实时事件

格式:

bash 复制代码
docker system events [OPTIONS]

选项:

复制代码
--filter,-f:根据提供的条件过滤输出
--format:使用给定的Go模板格式化输出
--since:显示自时间戳以来创建的所有事件
--until:流事件直到这个时间戳

打开两个终端

终端1

bash 复制代码
docker system events

终端2

bash 复制代码
[root@localhost ~]# docker stop test
test

查看终端1

bash 复制代码
[root@localhost ~]# docker system events
2023-07-15T17:04:37.334836848+08:00 container kill d1a032d521d4e4a02cc7ea497d6d83ac137d4d03e838f4db01e0fe903b2cc290 (image=progrium/consul, name=great_easley, signal=15)
2023-07-15T17:04:41.428854481+08:00 network disconnect 462ad2de000e7aae527224ae21c66e15aac0e68ed45f96b65528e22e272851fa (container=d1a032d521d4e4a02cc7ea497d6d83ac137d4d03e838f4db01e0fe903b2cc290, name=bridge, type=bridge)
2023-07-15T17:04:41.430294298+08:00 volume unmount 0e452a14a460fdc4cfa0b2644761923359a263fe9abeca5fd1952927231ca0a7 (container=d1a032d521d4e4a02cc7ea497d6d83ac137d4d03e838f4db01e0fe903b2cc290, driver=local)
2023-07-15T17:04:41.430357838+08:00 container stop d1a032d521d4e4a02cc7ea497d6d83ac137d4d03e838f4db01e0fe903b2cc290 (image=progrium/consul, name=great_easley)
3.docker system info

显示系统范围的信息

格式:

bash 复制代码
docker system info [OPTIONS]

与docker info相同

4.docker system prune

移除未使用的数据

格式:

bash 复制代码
docker system prune [OPTIONS]

选项:

复制代码
--all,-a:删除所有未使用的图片,而不仅仅是悬挂的图片
--filter:提供过滤器值(例如label=<key>=<value>)
--force,-f:不提示确认
--volumes:删除卷

删除当前docker服务器所有没有使用的容器和空名空标签的镜像和没有使用的网络

bash 复制代码
[root@localhost ~]# docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache
  
复制代码
翻译:
警告!这将删除:
-所有停止的容器
—所有未被至少一个容器使用的网络
-所有悬挂的图像
-所有悬挂的构建缓存
你确定要继续吗?[y / N]
​
Are you sure you want to continue? [y/N] y
​
Deleted Containers:
1d1725c19cbe9c6e119f055827a316dd351eb4adeae291a878a39418312daed5
d1a032d521d4e4a02cc7ea497d6d83ac137d4d03e838f4db01e0fe903b2cc290
​
Deleted Networks:
mynet1
mac_net1
​
Deleted build cache objects:
kutjwzwfdu28eldqlwo07uax7
0p5xfeo29k8ojauchfzf97kp0
a9puvqnewb05luw84rnanr2lh
y6mdonbx0pvs2trx7xd97738u
kj09ara8y3v3b6f50xtzie6lv
itk7ujtbdy4c2nirz68e2ivck
2a7d9sfcsnvl9owzau11l0jrq
oe2ukyl2cpguwqjm0kddg5tcx
4fom9yi9x5i125uvb96d29ext
tdwcwf0eze1lrvgherr4sxrs5
9hffla6qush85p7jhf89l56ek
​
Total reclaimed space: 679.3MB
bash 复制代码
[root@localhost ~]# docker images
REPOSITORY        TAG         IMAGE ID       CREATED         SIZE
centos            test        6bc2adb97476   25 hours ago    394MB
centos7           net-tools   0db0f584d14d   26 hours ago    418MB
busybox           latest      beae173ccac6   18 months ago   1.24MB
nginx             latest      605c77e624dd   18 months ago   141MB
voltest           latest      3af6982c965f   18 months ago   141MB
redis             latest      7614ae9453d1   19 months ago   113MB
mysql             5.7         c20987f18b13   19 months ago   448MB
centos            7.9.2009    eeb6ee3f44bd   22 months ago   204MB
progrium/consul   latest      09ea64205e55   8 years ago     69.4MB
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
462ad2de000e   bridge    bridge    local
c598e7da9321   host      host      local
36391f761fe6   none      null      local

15.docker create

创建一个新容器

它与run类似,但是它唯一的区别就是,create只创建容器不运行,但是docker run是创建容器并运行

格式:

bash 复制代码
docker create [OPTIONS] IMAGE [COMMAND] [ARG...zz
相关推荐
网络研究院1 小时前
Am I Isolated:一款安全态势基准测试工具
容器·工具·基准测试·安全态势
涔溪2 小时前
Docker简介
spring cloud·docker·eureka
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
颜淡慕潇5 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
运维&陈同学5 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
信子姚青5 小时前
K8s使用nfs
容器
葡萄皮Apple5 小时前
[CKS] K8S RuntimeClass SetUp
java·容器·kubernetes
mit6.8246 小时前
[Docker#4] 镜像仓库 | 部分常用命令
linux·运维·docker·容器·架构
诡异森林。9 小时前
Docker--Docker是什么和对Docker的了解
运维·docker·容器