Docker - 常用命令合集

2025年03月22日 09:03:38    [原创]


一. 容器

1. 容器生命周期管理

命令
作用
run
创建一个新容器并运行
start/stop/restart
开启/停止/重启 一个容器并使其在后台运行
kill
杀掉一个容器进程
rm
删除容器
create
从镜像中创建一个容器
exec
对一个容器执行shell命令
pause/unpause
暂停容器/恢复暂停容器
attach
链接正在运行的容器

2. 容器操作

命令
作用
ps
列出容器
top
查看正在运行中的容器进程信息
logs
获取docker日志
port
列出一个容器的端口映射情况
export
将一个容器的文件系统打包至tar,但不会保留元数据(如环境变量、启动命令、卷等)
import
导入 tar 文件为新镜像
commit
提交一个容器的文件系统,使之生成一个新的镜像
cp
向一个正在运行的容器复制文件,或将容器中的文件复制出来
diff
检查一个容器文件系统更改情况
inspect
获取容器或镜像的元数据
events
从docker服务器获取事件
wait
让一个容器进入等待,使其进入阻塞状态
container
管理已经运行的容器的
update
更新容器
rename
重命名容器
system df
查看docker(容器/镜像/数据卷)磁盘占用情况
system prune -af
可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像

3. 常用操作

示例
命令
启动容器
docker run -it 镜像名 /bin/bash
进入容器
docker exec -it 容器名 bash
运行容器
docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看log信息
docker logs 容器名
终止容器
docker stop 容器名
导入导出容器
导入 tar 文件为新镜像
删除容器
docker rm 容器ID或容器名
查询容器信息
docker inspect [容器名]
查看容器状态
docker inspect -f [容器名]
查看容器ip
docker inspect -f [容器名]
查看docker占用的系统资源
docker stats [容器名]

二. 镜像

1. 镜像仓库

命令
作用
login
docker登入
docker login -u cn-north-4@HST3WDEEOB8E5CQJZCPX -p d7e83c824ef4a69e4ac363cfe9eb8fde312aa3c6ec0904a9f29e405308c867c6 swr.cn-north-4.myhuaweicloud.com
logout
docker登出
docker logout swr.cn-north-4.myhuaweicloud.com
pull
拉取镜像
push
推送镜像
search
在docker hub上查询镜像

2. 本地镜像管理

命令
作用
images
列出镜像
rmi
修改本地某一镜像的标记,使其镜像属于某一仓库
tag
修改本地某一镜像的标记,使其镜像属于某一仓库
import
从tar中创建一个新镜像
build
通过指定Dockerfile文件编译镜像
history
查看镜像历史
save
将制定镜像保存成tar文件
load
从tar中恢复镜像
checkpoint
设置checkpoint,类似于恢复点,可以让镜像撤销到曾经设置的某一个checkpoint上
image
docker镜像管理
manifest
docker镜像清单管理
trust
docker可信镜像管理
inspect
查看镜像元数据

3. 获取镜像

  
  docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
  docker pull ubuntu:16.04
  

4. 提交镜像

  
  docker commit 容器ID或名称 镜像名称:标签
  docker commit abc123 my_image:latest
  

5. 导入镜像

  
  docker load < nginx.tar
  

6. 保存镜像

  
  docker save > nginx.tar nginx:latest 
  

7. 修改镜像名称

  
  docker tag 旧镜像名  新镜像名
  

8. 清理镜像

  
  docker system prune -af
  

9. 运行镜像

  
  docker run -it --rm ubuntu:16.04 bash
  

10. 列出镜像

  
  docker image ls
  

11. 查看docker资源占用空间

  
  docker system df
  

12. 根据仓库名列出镜像

  
  docker image ls ubuntu
  

13. 列出特定的某个镜像

  
  docker image ls ubuntu:16.04
  

14. 删除本地镜像

  
  docker image rm [选项] 镜像1 [镜像2…]
  

15. docker 定制镜像

docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)
  
# 创建自己的镜像路径
在路径下touch Dockerfile
docker build [选项] 上下文路径/URL/-
docker build -t scrapy:v3 .

# 镜像构建上下文(Context)
  1> ENV 设置环境变量
  2> CMD 容器启动命令
  3> ADD 更高级的复制文件
  4> WORKDIR 指定工作目录,格式为 WORKDIR 工作目录路径
  5> 列出所有在指定image 之后创建的image的父image: docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxx) # xxx image ID
  6> 强制删除none镜像

# 查看none镜像
docker images | grep none

# 查看none镜像ID
docker images | grep none | awk '{print $3}'

# 强制删除none镜像
docker images | grep none | awk '{print $3}' |xargs docker rmi
  

16. docker update

  
  docker update [OPTIONS] CONTAINER [CONTAINER...]

  # 更新 CPU 共享数量, f361b7d8465 为 容器ID
  docker update --cpu-shares 512 f361b7d8465

  # 更新容器内存
  docker update -m 500M f361b7d8465

  # 更新容器的重启策略
  Docker容器的重启策略如下:
    no,默认策略,在容器退出时不重启容器
    on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    on-failure:3,在容器非正常退出时重启容器,最多重启3次
    always,在容器退出时总是重启容器
    unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
  docker update --restart=always f361b7d8465
  
名称
描述
--blkio-weight
阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止)</i>
--cpu-period
限制CPU CFS(完全公平的调度程序)期限</i>
--cpu-quota
限制CPU CFS(完全公平的调度程序)配额
--cpu-rt-period
API 1.25+,将CPU实时时间限制为微秒
--cpu-rt-runtime
API 1.25+,将CPU实时运行时间限制为微秒
history
查看镜像历史
--cpu-shares,-c
CPU份额(相对权重)
--cpus
API 1.29+,CPU数量
--cpuset-cpus
允许执行的CPU(0-3,0,1)
--cpuset-mem
允许执行的MEM(0-3,0,1)
--kernel-memory
内核内存限制
--memory-swap
交换限制等于内存加交换,“-1”以启用无限交换
--memory-reservatio
内存软限制
--memory,-m
内存限制
--pids-limit
API 1.40+,调节容器pids限制(-1表示无限制)
--restart
容器退出时重新启动策略以应用

三. 数据卷

数据卷
1> 是一个可供一个或者多个容器使用的特殊目录它绕过 UFS,可以提供很多有用的特性:
a. 数据卷 可以在容器之间共享和重用
b.对 数据卷的修改会立马生效
c. 对 数据卷的更新不会影响镜像
d. 数据卷 默认会一直存在, 即使容器被删除

1. 查看所有的数据卷

  
  docker volume ls
  

2. 创建一个数据卷

  
  docker volume create [数据卷名称]
  

3. 以查看指定 数据卷 的信息

  
  docker volume inspect my-vol
  

4. 启动一个挂载数据卷的容器

  
  docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py
  

5. 删除数据卷

  
  docker volume rm my-vol
  

6. 清理无主数据卷

  
  docker volume prune
  

7. 挂载主机目录

  
  docker run -p 28018:27017 -v /data/db:/data/db -d --name mongo_server mongo:3.4
  

8. 复用其他容器的数据卷

注:即使删除挂载了数据卷的容器(包括初始的容器和其他子容器), 复用的数据卷并不会被删除。 如果想删除该数据卷, 必须在删除最后一个引用该数据卷的时候调用docker rm -v 显示删除数据卷

  
  #db1 的数据卷复用现有容器dbdata的数据卷, dbdata是容器名
  docker run -d --volumes-from dbdata --name db1 taining/postgres
  

9. 备份数据卷

通过参数 --volumes-from 从数据卷挂载数据卷, 然后备份数据卷中的数据。/dbdata是容器内数据卷对应的目录。

  
   docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backip.tar /dbdata
  

10. 备份、还原数据卷

可以利用数据卷容器来备份、恢复、迁移数据卷

将备份的数据恢复到原有的容器或者其他任何容器。 备份到新的容器

  
  # 首先使用--volumes-from创建一个加载dbdata容器卷的容器,并从本地主机挂载当前到容器的/backup目录
  docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
  
  # 然后创建另一个容器,挂载 dbdata2 的容器,并使用 tar 解压备份文件到挂载的容器卷中。
  docker run -v /dbdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar
  

四. 手动联合挂载

  
  mount -t overlay overlay -o lowerdir=/a,upperdir=/b,workdir=/work /c
  

五. XFS限额配置

  
  uquota/usrquota/quota      // 用户配额限制,usrquota (ext4),uquota (XFS)。quota:旧版 Linux 系统的通用配额选项(已逐渐淘汰)。
  gquota/grpquota            // 组配额限制,grpquota (ext4),gquota (XFS)
  pquota/prjquota            // 目录配额限制,不能与 grpquota 同时设定。prjquota(ext4),pquota(XFS)