Skip to content

容器

简介

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等) 和运行在其中的应用程序容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写。

docker ps

参数
参数默认值描述
-a, --all显示所有容器(默认显示为正在运行)
-f, --filter根据提供的条件过滤输出
--format使用GO 模板进行漂亮的打印搜索
-n, --last显示 n 个最后创建的容器(包括所有状态)
-l, --latest显示最新创建的容器(包括所有状态)
--no-trunct不要截断输出
-q, --quiet仅显示容器 ID
-s, --size显示文件总大小
  • 说明:列出容器
  • 示例:
bash
# 查看正在运行的容器
docker ps
# 查看正在运行的容器的ID
docker ps -q
# 查看正在运行+历史运行过的容器
docker ps -a
# 显示运行容器总文件大小
docker ps -s
# 显示最近创建容器
docker ps -l
# 显示最近创建的3个容器
docker ps -n 3
# 不截断输出
docker ps --no-trunc

docker top

  • 说明:列出容器中运行进程
  • 示例:
bash
# 列出容器中运行进程
docker top mysql
# 查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

docker port

  • 说明:列出端口映射或容器的特定映射
  • 示例:
bash
docker port mysql

docker stats

参数
参数默认值描述
-a, --archive存档模式
-L, --follow-link始终遵循 SRC_PATH 中的符号链接
  • 说明:显示容器资源使用情况统计信息的实时流
  • 示例:
bash
docker stats

如果您未使用来指定格式字符串--format,则会显示以下列。

栏名描述
CONTAINER ID容器的 ID
NAME容器的名称
CPU %容器正在使用主机 CPU 的百分比
MEM USAGE / LIMIT容器正在使用的总内存以及允许使用的总内存量
MEM %容器正在使用主机内存的百分比
NET I/O容器通过其网络接口发送和接收的数据量
BLOCK I/O容器已从主机上的块设备读取和写入的数据量
PIDs容器创建的进程或线程数

docker logs

参数
参数默认值描述
-f, --follow跟踪日志输出
--details显示提供给日志的其他详细信息
-n, --tailall从日志末尾开始显示的行数
-t, --timestamps显示时间戳
  • 说明:获取容器的日志
  • 示例:
bash
# 查看容器日志
docker logs mysql
# 查看redis容器日志
docker logs -f -t --tail=20 mysql
# 查看容器mysql从2023年02月18日后的最新10条日志。
docker logs --since="2023-02-18" --tail=10 redis

docker create

参数
参数默认值描述
-i让容器的输入保持打开
-t让 Docker 分配一个伪终端
-d后台守护进程的方式运行
  • 说明:基于镜像创建容器
  • 示例:
bash
docker create -it nginx:latest /bin/bash

docker rename

  • 说明:重命名容器
  • 示例:
bash
docker rename my_container my_new_container

docker run

参数
参数默认值描述
--format使用GO 模板进行漂亮的打印搜索
--no-trunc不要截断输出
-q, --quiet仅显示镜像 ID
  • 说明:新建并启动容器
  • 示例:
bash
# 使用run方式在创建时进入
docker run -it centos /bin/bash
# 关闭容器并退出
exit
# 仅退出容器,不关闭
快捷键:Ctrl + P + Q

# 新建并启动容器,
docker run -i -t --name mycentos
# 后台启动容器
docker run -d mycentos
# 使用镜像 tomcat:7 创建容器命名为 tomcat7
docker run --name tomcat7 tomcat:7
# 后台启动容器
docker run -d --name tomcat8 tomcat:7
# 后台启动容器,将容器的 8080 端口映射到主机的随机端口
docker run -d -P --name tomcat9 tomcat:7
# 后台启动容器,将容器的 8080 端口映射到主机的 9999 端口
docker run -d -p 9999:8080 --name tomcat10 tomcat:7
# 后台启动容器,将容器的 8080 端口映射到主机的 9999 端口
# 主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps
# 以后直接在主机的 webapps 目录上传 war 包,就能在浏览器访问对应的项目
docker run -d -p 9999:8080 -i --name tomcat11 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7
# 后台启动容器,将容器的 8080 端口映射到主机的 9999 端口
# 主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps
# 启动容器后,在容器内执行 bash 命令
# 这里不加 -it 的话,容器是无法再启动的,加上才能启动容器并执行 bash 命令
docker run -d -p 111.20.72.43:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat12 tomcat:7 bash
# 以交互模式启动一个容器,在容器内执行 bash 命令
docker run -it -p 1111:8080 tomcat:7 bash
# 以 root 权限创建容器,当进入容器之后,拥有 root 权限去执行命令
docker run -d --name jenkin2 --privileged=true jenkins/jenkins
# 该容器在 Docker 重启后会自动启动无需手动启动
docker run -d --name jenkins2 --restart always jenkins/jenkins

docker start

  • 说明:启动一个或多个已停止的容器
  • 示例:
bash
docker start my_container

docker restart

参数
参数默认值描述
-t, --time10在杀死容器之前等待停止的秒数
  • 说明:重新启动一个或多个容器
  • 示例:
bash
docker restart my_container

docker exec

参数
参数默认值描述
-d, --detach分离模式:在后台运行命令
-e, --env设置环境变量
--env-file读取环境变量文件
-w, --workdir容器内的工作目录
  • 说明:进入运行中的容器
  • 示例:
bash
# 直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,
# 参数:
#  --sig-proxy=false  确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
# 在 centos 容器中打开新的交互模式终端,可以启动新进程,
# 参数:
#   -i  即使没有附加也保持STDIN 打开;
#   -t  分配一个伪终端
docker exec -i -t  centos /bin/bash
# 以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
# 以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos  touch cache.txt

docker stop

参数
参数默认值描述
-t, --time10等待杀死的秒数,然后将其杀死
  • 说明:停止一个或多个运行中的容器
  • 示例:
bash
docker stop redis

docker commit

参数
参数默认值描述
-a, --author作者
-c, --change将 Dockerfile 指令应用于创建的映像
-m, --message提交讯息
-p, --pausetrue提交期间暂停容器
  • 说明:根据容器的更改创建新镜像
  • 示例:
bash
# 基于当前redis容器创建一个新的镜像
docker commit -a="muzili" -m="my nginx" [容器ID]  my/nginx:v1.1

docker cp

参数
参数默认值描述
-a, --archive存档模式
-L, --follow-link始终遵循 SRC_PATH 中的符号链接
  • 说明:在容器和本地文件系统之间复制文件/文件夹
  • 示例:
bash
# 将 mysql 容器中的文件 copy 至本地路径
docker cp mysql:/[container_path] [local_path]
# 将主机文件 copy 至 mysql 容器
docker cp [local_path] mysql:/[container_path]/
# 将主机文件 copy 至 mysql 容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]

docker kill

  • 说明:杀死一个或多个正在运行的容器
  • 示例:
bash
docker kill redis

docker rm

参数
参数默认值描述
-f, --force强制删除正在运行的容器(使用 SIGKILL)
-l, --link删除指定的链接
-v, --volumes删除与容器关联的匿名卷
  • 说明:删除一个或多个容器
  • 示例:
bash
# 格式:
docker rm [-f] 容器ID/名称
# 删除一个已停止的容器
docker rm redis
# 删除一个运行中的容器
docker rm -f redis
# 删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
# -l 移除容器间的网络连接,连接名为 db
docker rm -l db
# -v 删除容器,并删除容器挂载的数据卷
docker rm -v redis
# 删除所有运行状态的容器
docker rm -f `docker ps -q`
# 删除所有容器
docker rm -f `docker ps -aq`
# 有选择性的批量删除 (正则匹配)
docker ps -a l awk ' {print "docker rm "$1}'l bash
# 删除退出状态的容器
for i in `dockef ps -a l grep -i exit / awk '{print $1}' '; do docker rm -f $i;done