Docker-快速构建、运行、管理应用的工具
🐳 Docker 基础
“Docker 是一个快速构建、运行和管理应用的工具,能够帮助开发者以更简单的方式进行应用的部署和管理。”
- Docker 的核心概念
1.1 镜像与容器
镜像(Image):包含应用及其所需的环境、配置和系统库的打包文件。
容器(Container):运行镜像时创建的隔离环境,每个镜像可以启动一个或多个容器。
1.2 镜像仓库
镜像仓库:存储和管理镜像的平台,Docker Hub 是最大的公共镜像仓库。 - Docker 命令解析
2.1 常见命令
命令 说明
docker run 创建并运行一个容器
docker pull 从镜像仓库拉取镜像
docker push 推送镜像到镜像仓库
docker ps 查看正在运行的容器
docker stop 停止运行中的容器
docker rm 删除一个或多个容器
docker images 查看本地镜像列表
docker rmi 删除一个或多个镜像
2.2 部署 MySQL
命令示例:
bash
Copy
docker run -d --name ms -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
说明:
-d:让容器在后台运行。
–name ms:容器命名为 ms,必须唯一。
-p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口。
-e MYSQL_ROOT_PASSWORD=123:设置环境变量,定义 MySQL 的 root 密码。
2.3 镜像命名规范
镜像名称格式为 [repository]:[tag]。
默认情况下,tag 为 latest 代表最新版本。 - 数据卷(Volume)
3.1 数据卷的作用
数据卷是一个虚拟目录,用于映射容器内目录与宿主机目录之间的桥梁,方便容器内文件的操作和数据迁移。
3.2 常见数据卷命令
命令 说明
docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷的详情
docker volume prune 清除未使用的数据卷 - 自定义镜像
4.1 Dockerfile 的作用
Dockerfile:一个文本文件,定义了构建镜像的指令和过程。常见指令如下:
指令 说明 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./jre11.tar.gz /tmp
RUN 执行 Linux 的 shell 命令 RUN apt-get install -y package
EXPOSE 指定容器运行时监听的端口 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令 ENTRYPOINT java -jar xx.jar
4.2 构建镜像命令
使用以下命令构建镜像:
bash
Copy
docker build -t 镜像名 Dockerfile目录 - Docker Compose
5.1 Docker Compose 介绍
Docker Compose:通过一个 docker-compose.yml 文件定义一组相关联的应用容器,帮助实现多个容器的快速部署。
5.2 示例配置
yaml
Copy
version: “3.8”
services:
mysql:
image: mysql
container_name: mysql
ports:- “3306:3306”
environment:
MYSQL_ROOT_PASSWORD: 123
volumes: - “./mysql/data:/var/lib/mysql”
- “3306:3306”
- 网络配置
6.1 默认网络
默认情况下,所有容器通过 bridge 方式连接到 Docker 的虚拟网桥上。
6.2 自定义网络命令
命令 说明
docker network create 创建一个网络
docker network ls 查看所有网络
docker network rm 删除指定网络
docker network prune 清除未使用的网络 - 项目部署
7.1 部署 Java 应用
需求:将 Java 项目打包为镜像并部署,镜像名为 hmall。
7.2 部署前端
需求:创建一个新的 Nginx 容器,将配置文件和 HTML 目录挂载到容器中。
🐳 Docker Compose 概述
“Docker Compose 通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的 Docker 容器的快速部署。”
Docker Compose 文件结构
示例配置
以下是一个 Docker Compose 文件的示例,定义了 MySQL 和 Nginx 服务:
yaml
Copy
version: “3.8”
services:
mysql:
image: mysql
container_name: mysql
ports:
- “3306:3306”
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- “./mysql/conf:/etc/mysql/conf.d”
- “./mysql/data:/var/lib/mysql”
- “./mysql/init:/docker-entrypoint-initdb.d”
networks:
- hmall
nginx:
image: nginx
container_name: nginx
ports:
- “18080:18080”
- “18081:18081”
volumes:
- “./nginx/nginx.conf:/etc/nginx/nginx.conf”
- “./nginx/html:/etc/nginx/html”
depends_on:
- hmall
networks:
- new
networks:
new:
name: hmall
启动 MySQL 容器
使用以下命令启动 MySQL 容器:
bash
Copy
docker run -d
–name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v ./mysql/data:/var/lib/mysql
-v ./mysql/conf:/etc/mysql/conf.d
-v ./mysql/init:/docker-entrypoint-initdb.d
–network hmall
mysql
Docker Compose 命令格式
命令和选项
类型 参数或指令 说明
Options -f 指定 compose 文件的路径和名称
-p 指定 project 名称
Commands up 创建并启动所有 service 容器
down 停止并移除所有容器、网络
ps 列出所有启动的容器
logs 查看指定容器的日志
stop 停止容器
start 启动容器
restart 重启容器
top 查看运行的进程
exec 在指定的运行中容器中执行命令
关键概念
服务(Services): 定义在 Docker Compose 文件中的应用容器。
网络(Networks): 用于定义服务之间的通信方式。
卷(Volumes): 用于持久化数据,确保数据在容器重启后依然可用。
小结
Docker Compose 使得管理多个 Docker 容器变得简单,通过 YAML 文件结构化定义服务的配置,用户可以快速部署和管理容器化应用。