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