Skip to content

docker 常用命令

https://docs.docker.com/reference/cli/docker/container/exec/

基础命令

命令含义示例
docker pull默认从 https://hub.docker.com/ 中拉取镜像docker pull centos:7.8.2003
docker images列出本地所有镜像
docker image rm {镜像id/tag}删除本地镜像或标签;可缩写成 docker rmi
docker ps查看正在运行的容器
docker logs {容器id}查看容器运行输出日志;logs -f 可以持续输出docker logs -f 1519ccae995b
docker stats查看容器占用资源;每秒输出
docker exec在正在运行的容器中执行命令docker exec -it 8568d0de237f /bin/bash
docker run从镜像创建并运行新容器docker run -it python:3.10 /bin/bash
docker cp在容器和本地之间传输文件/目录docker cp default.conf 8568d0de237f:/root/
  • 镜像 id 可以通过 docker images 查看
  • 容器 id 可以通过 docker ps 查看

从镜像启动容器

bash
docker run -it golang /bin/bash
docker run -v $(pwd):/data/www -it 93a9c3556fc0 /bin/bash
docker run -v $(pwd):/app -w /app -it 93a9c3556fc0 /bin/bash -c "goreleaser build --snapshot --rm-dist"
docker run -v $(pwd):/app -w /app -it 2a8f672c9358 /bin/sh -c "npm install && npm run build_docker"
docker run -d -p 6379:6379 --name redis0000 --network wechat-net -v /data/redis0000/data:/data redis redis-server --requirepass 123456
docker run -v $(pwd):/data -it centos /bin/bash
docker run -it --network=host --entrypoint /bin/bash 2a8f672c9358

容器保存为镜像

bash
docker commit 23faaaa8f886 op/node:12.18.2-alpine
  • 常用于创建自定义镜像

镜像保存成文件

bash
docker save dfda7a2cf273 | gzip > node.tgz

从文件导入镜像

bash
docker load < node.tgz

打标签

bash
docker tag dfda7a2cf273 mypython:3

从 Dockerfile 中创建镜像

bash
docker build -t node:v3 .

清理

https://stackoverflow.com/questions/17236796/how-to-remove-old-docker-containers

bash
# 删除无用的镜像、停止的容器、无用的 networks 以及构建缓存
docker system prune         # 会删除 <none> 的镜像
docker system prune -a      # 会删除所有未被当前运行容器使用的镜像,慎用

# 清理无用的 volumes
docker volume prune

# 删除已经停止的容器
docker container prune

自建镜像仓库代理

https://hub.docker.com/_/registry
https://distribution.github.io/distribution/recipes/mirror/
https://distribution.github.io/distribution/about/configuration/

实现思路

  1. 通过使用 docker 官方提供的 registry 镜像来自建镜像仓库
  2. 通过配置 proxy 字段来将自建的镜像仓库作为 Docker Hub 的拉取缓存

具体代码

yaml
services:
  dockerhub:
    image: "registry:2.8.3"
    container_name: "dockerhub"
    restart: "always"
    volumes:
      - "/etc/localtime:/etc/localtime"
      - "./data:/var/lib/registry"
      - "./config.yml:/etc/docker/registry/config.yml"
    ports:
      - "5000:5000"
yml
version: 0.1
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      dryrun: false
      interval: 1m
http:
  addr: 0.0.0.0:5000
proxy:
  remoteurl: https://registry-1.docker.io
  ttl: 0

使用方式

dockerhub.xxx.com 为上述代理服务的域名

1. 作为 Docker daemon 的代理

修改 /etc/docker/daemon.json 文件

json
{
    "registry-mirrors": [
        "https://dockerhub.xxx.com",
    ]
}

2. 在 pull 时直接指定镜像地址

bash
docker pull dockerhub.xxx.com/library/python:3.12
  • docker 官方的镜像,地址路径中需要加上 library