Docker-快速构建、运行、管理应用的工具
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 名称
Commandsup创建并启动所有 service 容器
down停止并移除所有容器、网络
ps列出所有启动的容器
logs查看指定容器的日志
stop停止容器
start启动容器
restart重启容器
top查看运行的进程
exec在指定的运行中容器中执行命令
关键概念
服务(Services): 定义在 Docker Compose 文件中的应用容器。
网络(Networks): 用于定义服务之间的通信方式。
卷(Volumes): 用于持久化数据,确保数据在容器重启后依然可用。
小结
Docker Compose 使得管理多个 Docker 容器变得简单,通过 YAML 文件结构化定义服务的配置,用户可以快速部署和管理容器化应用。