容器
简介
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, --tail | all | 从日志末尾开始显示的行数 |
-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, --time | 10 | 在杀死容器之前等待停止的秒数 |
- 说明:重新启动一个或多个容器
- 示例:
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, --time | 10 | 等待杀死的秒数,然后将其杀死 |
- 说明:停止一个或多个运行中的容器
- 示例:
bash
docker stop redis
docker commit
参数
参数 | 默认值 | 描述 |
---|---|---|
-a, --author | 作者 | |
-c, --change | 将 Dockerfile 指令应用于创建的映像 | |
-m, --message | 提交讯息 | |
-p, --pause | true | 提交期间暂停容器 |
- 说明:根据容器的更改创建新镜像
- 示例:
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