一、Docker 基本概念
1.1 什么是 Docker
Docker 是一个开源的应用容器引擎,允许开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
1.2 核心概念
镜像(Image):Docker 镜像就是一个只读的模板,用于创建 Docker 容器。
容器(Container):容器是从镜像创建的运行实例,可以被启动、停止、删除。
仓库(Repository):仓库是集中存放镜像文件的场所,如 Docker Hub。
二、Docker 镜像管理
2.1 查看本地镜像
docker images2.2 拉取镜像
从 Docker Hub 拉取镜像:
docker pull <镜像名>:<标签>示例:
docker pull nginx:latest
docker pull mysql:5.72.3 搜索镜像
在 Docker Hub 搜索镜像:
docker search <关键词>2.4 删除镜像
删除单个镜像:
docker rmi <镜像 ID 或镜像名:标签>删除所有镜像:
docker rmi $(docker images -q)2.5 构建镜像
使用 Dockerfile 构建镜像:
docker build -t <镜像名>:<标签> <Dockerfile 所在目录>示例:
docker build -t myapp:v1 .三、Docker 容器管理
3.1 查看容器
查看正在运行的容器:
docker ps查看所有容器(包括停止的):
docker ps -a3.2 创建容器
创建但不启动容器:
docker create --name <容器名> <镜像名>:<标签>3.3 启动容器
启动一个已创建的容器:
docker start <容器 ID 或容器名>3.4 运行容器
创建并启动容器:
docker run [选项] <镜像名>:<标签> [命令]常用选项:
-d:后台运行容器-p:端口映射,格式:主机端口:容器端口-v:挂载数据卷,格式:主机目录:容器目录--name:指定容器名-e:设置环境变量
示例:
docker run -d -p 80:80 --name mynginx nginx:latest
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql57 mysql:5.73.5 停止容器
docker stop <容器 ID 或容器名>3.6 重启容器
docker restart <容器 ID 或容器名>3.7 强制停止容器
docker kill <容器 ID 或容器名>3.8 删除容器
删除单个容器:
docker rm <容器 ID 或容器名>删除所有停止的容器:
docker container prune3.9 进入容器
使用 exec 进入正在运行的容器(推荐):
docker exec -it <容器 ID 或容器名> /bin/bash对于 Alpine 镜像,使用 sh 代替 bash:
docker exec -it <容器 ID 或容器名> sh3.10 查看容器日志
查看容器实时日志:
docker logs -f <容器 ID 或容器名>查看指定行数的日志:
docker logs -n 100 <容器 ID 或容器名>3.11 查看容器详情
docker inspect <容器 ID 或容器名>3.12 查看容器内进程
docker top <容器 ID 或容器名>3.13 复制文件
从容器复制到主机:
docker cp <容器 ID 或容器名>:<容器内路径> <主机路径>从主机复制到容器:
docker cp <主机路径> <容器 ID 或容器名>:<容器内路径>四、Docker 网络管理
4.1 查看网络
docker network ls4.2 创建网络
创建自定义网络:
docker network create <网络名>4.3 查看网络详情
docker network inspect <网络名>4.4 连接容器到网络
docker network connect <网络名> <容器名>4.5 断开容器与网络的连接
docker network disconnect <网络名> <容器名>4.6 删除网络
docker network rm <网络名>五、Docker 数据卷管理
5.1 查看数据卷
docker volume ls5.2 创建数据卷
docker volume create <数据卷名>5.3 查看数据卷详情
docker volume inspect <数据卷名>5.4 删除数据卷
删除单个数据卷:
docker volume rm <数据卷名>删除未使用的数据卷:
docker volume prune六、Docker Compose
6.1 什么是 Docker Compose
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。
6.2 基本命令
启动服务:
docker-compose up -d停止服务:
docker-compose down查看服务状态:
docker-compose ps查看日志:
docker-compose logs -f七、Docker 常用技巧
7.1 清理 Docker 资源
清理所有未使用的资源(容器、镜像、网络、数据卷):
docker system prune -a7.2 查看 Docker 信息
docker info7.3 查看 Docker 版本
docker version八、Dockerfile 基础
8.1 什么是 Dockerfile
Dockerfile 是一个文本文件,包含了一系列命令,用于构建 Docker 镜像。
8.2 常用指令
FROM:指定基础镜像MAINTAINER:维护者信息RUN:执行命令ADD:复制文件到镜像COPY:复制文件到镜像(推荐)WORKDIR:设置工作目录ENV:设置环境变量EXPOSE:暴露端口CMD:容器启动时执行的命令ENTRYPOINT:容器入口点
8.3 示例 Dockerfile
FROM nginx:latest
MAINTAINER example@example.com
WORKDIR /usr/share/nginx/html
COPY index.html .
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]九、Docker 实战示例
9.1 运行一个简单的 Web 服务器
docker run -d -p 8080:80 --name myweb nginx:latest9.2 运行 MySQL 容器
docker run -d -p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
mysql:5.7十、Docker 最佳实践
尽可能使用官方镜像作为基础镜像
最小化镜像大小,使用 Alpine 等轻量级镜像
每个容器只运行一个进程
使用 .dockerignore 文件排除不需要的文件
合理使用数据卷持久化数据
避免在容器内存储敏感信息,使用环境变量或 secrets 管理
定期清理未使用的资源
使用标签管理镜像版本
编写清晰的 Dockerfile 并添加注释
使用 Docker Compose 管理多容器应用