常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| docker update --restart=always 容器id # 设置自启动(随机器启动)
docker ps
docker ps -a # 查看全部容器
docker exec -it <container id> bash # 进入容器
docker logs --tail 50 --follow --timestamps <container id> # 查看容器日志
docker build -t game_community_be . # 构建镜像
docker-compose up -d --build --force-recreate # 构建和启动容器,--build重新构建镜像
docker cp 容器id:/app/test.txt . # 将容器中的test.ext文件拷贝到宿主机某个路径下
# 删除none镜像
docker images |grep none | awk '{print $3}'| xargs docker rmi
# 临时测试
docker run -it --rm CONTAINER ID bash
#重置上一次提交,并且不保留记录
git reset --hard HEAD~1
git push -f
|
dockerfile
| 指令 | 描述 |
|---|
| FROM | 设定基础镜像 |
| RUN | 在镜像中运行命令 |
| CMD | 提供默认的可执行命令 |
| LABEL | 添加元数据到镜像 |
| EXPOSE | 指定要在容器运行时开放的端口 |
| ENV | 设置环境变量 |
| ADD | 从上下文目录中复制文件到镜像 |
| COPY | 与 ADD 类似,但更好,因为它更明确 |
| ENTRYPOINT | 为容器提供可执行文件 |
| VOLUME | 在容器中创建一个挂载点 |
| USER | 设定运行容器时的用户名或 UID |
| WORKDIR | 设定工作目录 |
| ARG | 定义在构建过程中要使用的变量 |
| ONBUILD | 定义在构建子镜像时要运行的指令 |
| STOPSIGNAL | 定义停止容器时要发送的系统调用信号 |
| HEALTHCHECK | 配置容器的健康检查 |
| SHELL | 设置默认的 shell |
docker-compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| version: '3'
services:
app:
image: game_community_be
restart: on-failure
command: bash -c "gunicorn manage:app"
env_file: .env.test
ports: # 宿主机器端口:容器端口,浏览器访问9091端口即可映射到容器内5577端口
- "9091:5577"
volumes: # 宿主机目录:容器内目录
- /data/logs/game_community_be:/data/logs/game_community_be
celery_worker:
image: game_community_be
restart: on-failure:3
env_file: .env.test
command: celery -A make_celery.celery_app worker -l INFO
depends_on:
- app
celery_beat:
image: game_community_be
restart: on-failure:3
env_file: .env.test
command: celery -A make_celery.celery_app beat -l INFO
depends_on:
- app
|
本地构建推送到harbor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 1. 在有外网的机器上拉取镜像
docker pull ghcr.io/astral-sh/uv:latest
docker pull python:3.12-slim-bookworm
# 2. 重新打标签
docker tag ghcr.io/astral-sh/uv:latest harbor.yourdomain.com/library/uv:latest
docker tag python:3.12-slim-bookworm harbor.yourdomain.com/library/python:3.12-slim-bookworm
# 3. 推送到内网 Harbor
docker login harbor.yourdomain.com
docker push harbor.yourdomain.com/library/uv:latest
docker push harbor.yourdomain.com/library/python:3.12-slim-bookworm
# 4. 修改 Dockerfile
FROM harbor.yourdomain.com/library/python:3.12-slim-bookworm
COPY --from=harbor.yourdomain.com/library/uv:latest /uv /uvx /bin/
|
网络模式
flowchart TD
subgraph HOST [Docker 宿主机]
direction TB
subgraph BridgeMode [Bridge 模式]
B1[容器 A
eth0: 172.17.0.2]
B2[容器 B
eth0: 172.17.0.3]
B1 <-.-> B0[docker0 网桥
172.17.0.1]
B2 <-.-> B0
B0 <-.-> HostNet[宿主机网络栈]
end
subgraph HostMode [Host 模式]
H1[容器 C
共享宿主机网络栈]
H1 <-.-> HostNet
end
subgraph NoneMode [None 模式]
N1[容器 D
仅 lo 回环接口]
end
subgraph ContainerMode [Container 模式]
C1[容器 E
共享网络栈]
C2[容器 F
eth0: 172.17.0.4]
C1 <-.-> C2
end
end
External((外部网络)) --> HostNet| 网络模式 | 核心特点 | 适用场景 |
|---|
**bridge** (默认) | 通过 docker0 虚拟网桥为每个容器分配私有 IP,容器间可通过 IP 通信。外部访问需用 -p 进行端口映射。 | 单机运行多个需要相互隔离、但又要通信的普通容器。 |
**host** | 容器直接共享宿主机的网络栈,没有独立的 IP。性能最高,无 NAT 开销。 | 对网络性能要求极高,且能容忍端口冲突和较低隔离性的场景。 |
**none** | 容器完全隔离网络,仅有 lo 本地回环接口。 | 执行无需网络的高安全性或计算任务,如批处理、密码学计算。 |
**container** | 新容器与一个已存在的容器共享网络命名空间(IP 和端口等)。 | 实现“边车(Sidecar)”模式,如主应用容器与日志收集、网络监控容器紧密耦合 |
更改镜像源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 1. 配置 Docker registry mirror
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
# 写入:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://docker.1ms.run",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com"
]
}
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
|