文章目录
- Docker基础概念
- 镜像管理命令
- 容器生命周期管理
- 容器交互和调试
- 数据管理
- 网络管理
- [Dockerfile和Docker Compose的作用说明](#Dockerfile和Docker Compose的作用说明)
-
- Dockerfile的作用
- [Docker Compose的作用](#Docker Compose的作用)
- 两者的关系
- 总结
Docker基础概念
在深入命令之前,先理解几个关键概念:
- 镜像(Image):应用的只读模板,包含运行应用所需的所有内容
- 容器(Container):镜像的运行实例,是应用的实际运行环境
- 仓库(Repository):存储和分发镜像的地方,如Docker Hub
简单类比:镜像就像是"类",容器就是"类的实例对象"。
镜像管理命令
镜像查看和搜索
bash
# 查看本地镜像列表
docker images
docker image ls
# 搜索Docker Hub上的镜像
docker search nginx
docker search --limit 5 mysql # 限制搜索结果数量
镜像下载和删除
bash
# 下载镜像
docker pull nginx # 下载最新版本
docker pull nginx:1.20 # 下载指定版本
docker pull mysql:8.0 # 下载MySQL 8.0
# 删除镜像
docker rmi nginx:latest # 删除指定镜像
docker rmi $(docker images -q) # 删除所有镜像(慎用)
docker image prune # 删除悬空镜像(推荐)
镜像构建
bash
# 从Dockerfile构建镜像
docker build -t myapp:v1.0 . # 构建并打标签
docker build -t myapp:latest --no-cache . # 不使用缓存构建
# 从容器创建镜像(不推荐,但有时有用)
docker commit container_name new_image:tag
容器生命周期管理
创建和启动容器
bash
# 运行容器的基本命令
docker run hello-world # 运行测试容器
# 常用参数组合
docker run -d --name mynginx -p 8080:80 nginx
# -d: 后台运行
# --name: 指定容器名称
# -p: 端口映射 (主机端口:容器端口)
# 交互式运行
docker run -it ubuntu:20.04 /bin/bash
# -i: 交互模式
# -t: 分配伪终端
# 挂载数据卷
docker run -d --name myapp -v /host/path:/container/path nginx
docker run -d --name mydb -v myvolume:/var/lib/mysql mysql:8.0
容器控制命令
bash
# 查看容器状态
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括停止的)
docker ps -q # 只显示容器ID
# 启动和停止容器
docker start container_name # 启动已停止的容器
docker stop container_name # 优雅停止容器
docker kill container_name # 强制停止容器
docker restart container_name # 重启容器
# 暂停和恢复容器
docker pause container_name # 暂停容器
docker unpause container_name # 恢复容器
容器清理
bash
# 删除容器
docker rm container_name # 删除已停止的容器
docker rm -f container_name # 强制删除运行中的容器
docker rm $(docker ps -aq) # 删除所有容器
# 自动清理
docker container prune # 删除所有停止的容器
docker system prune # 清理未使用的镜像、容器、网络
docker system prune -a # 更彻底的清理(包括未使用的镜像)
容器交互和调试
进入容器
bash
# 在运行的容器中执行命令
docker exec -it container_name /bin/bash # 进入容器交互终端
docker exec container_name ls /app # 在容器中执行单条命令
docker exec -u root container_name /bin/bash # 以root用户身份进入
文件操作
bash
# 容器和主机之间复制文件
docker cp file.txt container_name:/app/ # 从主机复制到容器
docker cp container_name:/app/file.txt ./ # 从容器复制到主机
# 查看容器文件系统变化
docker diff container_name
日志和监控
bash
# 查看容器日志
docker logs container_name # 查看容器日志
docker logs -f container_name # 实时跟踪日志
docker logs --tail 100 container_name # 查看最后100行日志
docker logs -t container_name # 显示时间戳
# 查看容器详细信息
docker inspect container_name # 查看容器详细配置
docker stats # 实时查看所有容器资源使用情况
docker stats container_name # 查看指定容器资源使用
数据管理
数据卷(Volume)
bash
# 创建和管理数据卷
docker volume create myvolume # 创建数据卷
docker volume ls # 列出所有数据卷
docker volume inspect myvolume # 查看数据卷详情
docker volume rm myvolume # 删除数据卷
# 使用数据卷
docker run -d --name webapp -v myvolume:/app/data nginx
绑定挂载
bash
# 挂载主机目录到容器
docker run -d --name dev-env -v $(pwd):/workspace node:14
docker run -d --name logs -v /var/log:/container/logs nginx
# 只读挂载
docker run -d --name readonly-app -v /host/config:/app/config:ro nginx
网络管理
网络基础操作
bash
# 网络管理
docker network ls # 列出所有网络
docker network create mynetwork # 创建自定义网络
docker network inspect mynetwork # 查看网络详情
docker network rm mynetwork # 删除网络
# 容器连接到网络
docker run -d --name app1 --network mynetwork nginx
docker network connect mynetwork container_name # 将已存在容器连接到网络
docker network disconnect mynetwork container_name # 断开网络连接
端口映射
bash
# 各种端口映射方式
docker run -d -p 8080:80 nginx # 映射到指定端口
docker run -d -p 127.0.0.1:8080:80 nginx # 映射到指定IP
docker run -d -P nginx # 随机映射所有暴露端口
# 查看端口映射
docker port container_name
Dockerfile和Docker Compose的作用说明
Dockerfile的作用
Dockerfile是什么?
Dockerfile是一个文本文件,包含了一系列指令,用来自动化构建Docker镜像。它就像是"镜像的制作配方"。
主要作用:
-
标准化环境构建:确保每次构建的环境完全一致,让团队成员使用相同的运行环境。
-
自动化镜像制作
dockerfileFROM node:16 # 选择基础环境 WORKDIR /app # 设置工作目录 COPY package.json ./ # 复制依赖文件 RUN npm install # 安装依赖 COPY . . # 复制源代码 CMD ["npm", "start"] # 设置启动命令
Docker Compose的作用
Docker Compose是什么?
Docker Compose是用来定义和管理多容器应用的工具,通过一个YAML文件描述整个应用的架构。
主要作用:
-
多容器编排管理
yamlservices: web: # Web服务 image: nginx db: # 数据库服务 image: mysql cache: # 缓存服务 image: redis
-
简化复杂应用部署:只用一个命令启动整个应用栈、自动处理容器间依赖关系和统一管理网络和数据卷。
-
服务间通信管理:自动创建内部网络、服务间可通过服务名直接通信、统一管理端口映射。
两者的关系
协作关系:
- Dockerfile负责"如何制作镜像"
- Docker Compose负责"如何编排容器"
- 通常在docker-compose.yml中引用Dockerfile
使用场景:
场景 | 使用工具 | 原因 |
---|---|---|
单个应用容器化 | Dockerfile | 只需要构建一个镜像 |
微服务架构部署 | Dockerfile + Docker Compose | 需要编排多个服务 |
开发环境搭建 | Docker Compose | 需要数据库、缓存等多个服务 |
CI/CD流水线 | 主要用Dockerfile | 构建和推送镜像 |
总结
- Dockerfile = "制作配方":告诉Docker如何一步步构建你的应用镜像
- Docker Compose = "指挥家":协调多个容器协同工作,形成完整的应用系统
两者结合使用,能够实现从单个应用的容器化到复杂系统的自动化部署,是现代软件开发中不可或缺的工具组合。