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/
实现思路
- 通过使用 docker 官方提供的 registry 镜像来自建镜像仓库
- 通过配置 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
- 代码来自 https://github.com/bboysoulcn/registry-mirror/tree/master/docker/dockerhub
- proxy 字段中可以配置 ttl 属性,配置的是缓存过期时间,默认值为
168h
(168小时 / 7天),设置为 0 表示永不过期 - 在海外的一个机器上运行即可;同时最好配置 https
使用方式
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