Docker常用命令

 2022-08-25    0 条评论    50628 浏览

docker

arm64与amd64架构镜像

拉取适配当前平台镜像

docker pull <image-name>:<tag>

拉取指定平台镜像

docker pull --platform linux/arm64 <image-name>:<tag>

例如

docker pull --platform linux/arm64 onlyoffice/documentserver

或者指定版本

docker pull --platform linux/arm64 onlyoffice/documentserver:7.1.1

查看镜像架构

查看完整平台信息

docker inspect --format='{{.Os}}/{{.Architecture}}' 镜像名称:标签

例如

docker inspect --format='{{.Os}}/{{.Architecture}}' onlyoffice/documentserver:7.1.1

运行容器

docker run [参数] [镜像名] [命令]
# 常用参数:
-d           # 后台运行
-it          # 交互式终端(通常与 /bin/bash 配合)
-p 主机端口:容器端口  # 端口映射
-v 主机路径:容器路径  # 挂载数据卷
--name [名称]  # 指定容器名称
-e KEY=VAL    # 设置环境变量
--rm          # 容器退出后自动删除
--network [网络]  # 指定网络

# 示例
docker run -d -p 9090:9000 \
  --name whisper \
  -e ASR_MODEL=base \
  -e ASR_ENGINE=openai_whisper \
  -v $PWD/whisper_cache:/root/.cache/ \
  onerahmet/openai-whisper-asr-webservice:latest
docker run -dit --name galaxy-backend-arm galaxy-backend-arm:1.0

列出容器

docker ps      # 显示运行中的容器
docker ps -a   # 显示所有容器(包括已停止的)

停止/启动/重启容器

docker stop [容器ID/名称]
docker start [容器ID/名称]
docker restart [容器ID/名称]

删除容器

docker rm [容器ID/名称]  # 删除已停止的容器
docker rm -f [容器ID/名称]  # 强制删除运行中的容器
docker rm $(docker ps -aq)  # 删除所有容器(慎用)

查看容器日志

docker logs [容器ID/名称]
docker logs -f  # 实时跟踪日志(类似 tail -f)

查看容器最后10行

docker logs --tail 10 [容器ID]

进入运行中的容器

docker exec -it [容器ID/名称] /bin/bash  # 启动交互式终端
# 示例
docker exec -it my-nginx bash

查看容器详情

docker inspect [容器ID/名称]  # 显示详细配置信息

复制文件

docker cp [容器ID/名称]:容器路径 主机路径  # 从容器复制到主机
docker cp 主机路径 [容器ID/名称]:容器路径  # 从主机复制到容器

资源监控

docker stats  # 实时监控容器资源使用情况
docker top [容器ID/名称]  # 查看容器内进程

暂停/恢复容器

docker pause [容器ID/名称]
docker unpause [容器ID/名称]

提交容器为镜像

docker commit [容器ID/名称] [新镜像名]:[标签]
# 示例
docker commit my-nginx my-nginx-custom

容器提交为镜像的注意事项

  1. 停止容器后提交:避免数据不一致问题
  2. 清理临时文件和缓存:减小镜像体积
  3. 移除敏感信息:删除密码、密钥等
  4. 使用有意义的标签:避免仅用latest标签
  5. 数据卷数据不会被提交:重要数据需单独管理
  6. 每次commit增加新层:影响性能和存储空间
  7. 优先考虑Dockerfile:比直接提交容器更规范
  8. 添加提交信息:便于追踪变更
  9. 移除不必要的工具包:保持镜像精简
docker commit -a "作者" -m "说明" 容器ID 仓库名:标签

例如

docker commit 8b6570d74468 galaxy-backend-arm:2.0

生成的镜像为 galaxy-backend-arm:2.0


镜像管理

查看镜像digests信息

docker images --digests

拉取镜像

docker pull [镜像名]:[标签]  # 默认标签为 latest
# 示例
docker pull ubuntu:20.04

列出本地镜像

docker images  # 显示所有镜像
docker images -a  # 包含中间层镜像

删除镜像

docker rmi [镜像ID/名称]  # 删除单个镜像
docker rmi $(docker images -q)  # 删除所有镜像(慎用)

构建镜像

docker build -t [镜像名]:[标签] [Dockerfile路径]
# 示例
docker build -t myapp:v1 .

搜索镜像

docker search [关键词]
# 示例
docker search nginx

推送镜像到仓库

docker push [用户名]/[镜像名]:[标签]
# 示例
docker push user123/myapp:v1

标记/重命名镜像

docker tag [原镜像ID/名称] [新镜像名]:[标签]
# 示例
docker tag ubuntu:20.04 my-ubuntu:v1

镜像导出

docker save -o <保存的文件名>.tar <镜像名>:<标签>/镜像id

例如

docker save -o drawio.tar bc8e809625da

镜像导入

docker load -i <文件名>.tar

例如

docker load -i drawio.tar

查看镜像操作系统信息

查看架构

docker inspect --format='{{.Architecture}}' 镜像名称:标签

例如

docker inspect --format='{{.Architecture}}' apache/hadoop:3.3.5

查看完整平台信息

docker inspect --format='{{.Os}}/{{.Architecture}}' 镜像名称:标签

例如

docker inspect --format='{{.Os}}/{{.Architecture}}' apache/hadoop:3.3.5

网络管理

列出网络

docker network ls

创建自定义网络

docker network create [网络名]

连接容器到网络

docker network connect [网络名] [容器ID/名称]

断开网络

docker network disconnect [网络名] [容器ID/名称]


其他常用命令

登录/登出镜像仓库

docker login
docker logout

查看磁盘使用

docker system df

清理无用数据

docker system prune  # 删除停止的容器、未使用的镜像等

导出/导入镜像

docker save -o myimage.tar [镜像名]  # 导出镜像为文件
docker load -i myimage.tar          # 从文件加载镜像

常用命令组合

启动并进入容器

docker run -it --rm ubuntu:20.04 /bin/bash

查看容器日志的最后100行

docker logs --tail 100 [容器ID]

备份数据库容器数据

docker exec [mysql容器ID] mysqldump -u root -p密码 数据库名 > backup.sql