docker的本质
镜像(Image)= 模板
容器(Container)= 运行中的进程
数据卷(Volume)= 持久化数据
网络(Network)= 容器互通
Compose = 多容器编排
镜像 -> 类似系统安装包
容器 -> 类似启动后的程序
docker 基础命令
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| docker ps
docker ps -a
docker logs 容器名
docker logs -f 容器名
docker logs -tail 100 容器名
docker logs -f -t 容器名
docker exec -it 容器名 bash docker exec -it 容器名 sh
exec 在运行中的容器执行命令 -i 保持输入 -t 分配终端
docker stop 容器名 docker start 容器名 docker restart 容器名
docker rm 容器名
docker rm -f 容器名
docker inspect 容器名
docker inspect 容器名 | grep IPAddress
|
ports的区别
10443/tcp
容器内部暴露了 10443 端口,但没有映射到宿主机
宿主机不能访问
浏览器不能直接访问
VPS公网不能访问
同 network 的其它容器可以访问
https://container:10443
0.0.0.0:80->80/tcp
公网可访问
镜像
1 2 3 4 5 6 7 8 9 10 11 12
| docker images
docker pull nginx
docker pull nginx:1.27
docker rmi nginx
|
Volume 数据持久化
网络
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker network ls
docker network inspect bridge
docker network create app-net
|
容器互通原理
同一个 network:容器名 = DNS
例如
proxy_pass http://s-ui:8080;
Docker 自动解析:
s-ui -> 容器IP
Compose 多项目互通
compose 会自动加项目名前缀
例如app_app-net
排障
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| docker stats
docker top nginx
docker compose exec nginx nginx -t
docker compose exec nginx nginx -s reload
docker exec my-nginx nginx -s reload
docker compose restart nginx
docker port nginx
docker diff nginx
A Added,新文件/目录 C Changed,被修改 D Deleted,被删除
docker builder prune
docker builder prune -a
docker system prune
docker system prune -a
docker events
docker events --filter container=nginx
docker events --filter image=nginx
docker events --filter event=start
docker events --filter event=die
docker events | grep nginx docker events | grep restart
global regular expression print
watch docker ps
apt install watch
|
prune 加 -a 的区别
docker system prune:
清理已停止的容器、未使用的网络、构建缓存、悬空镜像(none 镜像)。
docker system prune -a:
额外删除所有当前没有被容器使用的镜像,包括 nginx:latest、node:20 这种有 tag 的镜像。
docker builder prune:
清理构建缓存。
docker builder prune -a:
更彻底清理所有未使用的构建缓存。
默认都不会删除 volume,除非加 –volumes。
nginx reload 和 restart 的区别
nginx -s reload:
Nginx 重新读取配置,通常不中断已有连接。改 nginx.conf、站点配置、证书后优先用它,执行前先 nginx -t。
docker compose restart nginx:
停止并重新启动 nginx 容器,会有短暂中断。它不会重新创建容器;如果改了 docker-compose.yml、镜像或挂载配置,通常要用 docker compose up -d。
dockerfile
1 2 3 4 5 6 7 8 9 10
| FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
|
- FROM(基础镜像)
- COPY(复制文件)
- WORKDIR(工作目录)
- CMD(容器启动命令)
- EXPOSE(声明端口)
- ENV(环境变量)
- ENTRYPOINT(高级)
构建
1 2
| docker build -t myapp .
|
运行
生产
1 2
| restart: unless-stopped
|
日志限制
1 2 3 4 5
| logging: options: max-size: "10m" max-file: "3"
|