
Docker 是一种基于 Linux 容器(LXC) 的开源容器化平台。
它通过将应用及其依赖环境打包在一个轻量级的容器中,实现 一次构建,随处运行。

| 对比项 | Docker(容器) | KVM(虚拟机) |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | 轻量(共享宿主机内核) | 重(需要完整 OS) |
| 性能 | 接近物理机 | 有明显开销 |
| 隔离性与安全 | 进程级隔离,安全性略弱 | 完全隔离,安全性更强 |
| 使用要求 | 依赖宿主机内核 | 依赖 CPU 虚拟化支持 |
总结:容器更快、更轻量,适合敏捷开发和微服务架构;虚拟机适合高隔离和安全性要求场景。
| 命令 | 作用 | 示例 |
|---|---|---|
| ls | 查看镜像列表 | docker image ls |
| search | 搜索镜像 | docker search nginx |
| pull | 拉取镜像 | docker pull redis:6 |
| rmi | 删除镜像 | docker rmi imageID |
| history | 查看镜像构建历史 | docker history nginx |
| inspect | 查看镜像详细信息 | docker inspect imageID |
| save | 保存镜像为 tar 包 | docker save -o redis.tar redis:6 |
| load | 从 tar 包导入镜像 | docker load -i redis.tar |
| tag | 给镜像打标签 | docker tag redis:6 myrepo/redis:v1 |
| push | 推送镜像到仓库 | docker push myrepo/redis:v1 |
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 启动容器 | docker run -it ubuntu /bin/bash |
交互式进入容器 |
| 后台运行 | docker run -d nginx |
容器后台运行 |
| 查看容器 | docker ps -a |
查看容器状态 |
| 停止容器 | docker stop containerID |
优雅停止 |
| 强制终止 | docker kill containerID |
相当于 kill -9 |
| 删除容器 | docker rm containerID |
删除容器 |
| 批量删除 | docker rm $(docker ps -aq) |
删除所有容器 |
| 进入容器 | docker exec -it containerID /bin/bash |
推荐使用 exec 而不是 attach |
| 拷贝文件 | docker cp containerID:/path/in/container ./localdir |
容器 ↔ 本地文件拷贝 |
Docker 默认提供 四种网络模式:
| 网络模式 | 命令示例 | 特点 |
|---|---|---|
| bridge | --network bridge (默认) |
通过虚拟网桥连接容器,容器间可互通 |
| host | --network host |
容器直接使用宿主机网络,性能最好,但无隔离 |
| container | --network container:containerID |
与指定容器共享网络,常用于 Pod(K8s) |
| none | --network none |
无网络,仅本地 loopback |
注意:生产环境常用 自定义 bridge 网络 或 overlay 网络(多主机通信)。
两种方式:
docker commit -m="add nginx" -a="user" containerID mynginx:v1
FROM node:18
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install --production --registry=https://registry.npmmirror.com
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
构建:
docker build -t myapp:v1 .
作用:通过 docker-compose.yml 文件,实现 多容器编排。
pip install docker-compose
| 命令 | 作用 |
|---|---|
| up | 启动服务 |
| down | 停止并删除容器、网络、卷 |
| ps | 查看容器状态 |
| logs -f svc | 查看服务日志 |
| exec svc sh | 进入容器执行命令 |
| scale web=3 | 启动多个容器副本(服务伸缩) |
version: "3"
services:
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: mynginx
ports:
- "8080:80"
- "8443:443"
volumes:
- ./wwwroot:/usr/share/nginx/html
networks:
ydq:
ipv4_address: 172.100.0.10
networks:
ydq:
driver: bridge
ipam:
config:
- subnet: 172.100.0.0/16