Docker技术编排
概述:
docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题?
如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具.--服务编排
Compose允许用户通过一个单独的docker-compose.yml模板文件[你写](YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
Docker Compose 安装使用
安装Docker Compose;
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
卸载 Docker Compose(根据需要选择);
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
使用docker compose编排springboot+redis+mysql项目;
1. 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
2. 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
3. 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线
第一步:将springboot项目打包成jar包;
application.properties配置文件
注:我们将以上三个文件放到根目录aaa_qy172文件夹里;
第二步:将dockerfile文件制作为镜像;
FROM java:8
MAINTAINER qy172
ADD redis-springboot-cache-0.0.1-SNAPSHOT.jar qy172.jar
EXPOSE 8080
CMD java -jar qy172.jar
第三步:配置docker-compose.yml文件;
# 版本号
version: "3"
# 服务
services:
# 项目名称
micro-service:
# 通过Dockerfile文件制作一个镜像
build:
# Dockerfile所在的路径
context: ./
# Dockerfile文件的名称
dockerfile: Dockerfile
container_name: qy172 # 容器名称
ports: # 端口映射 -p
- "8080:8080"
volumes: #数据卷 -v
- /app/microService:/data
networks: #网络--network=aa_net
- aaa_net
depends_on: #依赖服务名
- redis
- mysql
redis:
# 使用的镜像
image: redis:6.0.20
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf # 必须提前创建好redis.conf 宿主机
- /app/redis/data:/data
networks:
- aaa_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'qy172'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf:/etc/mysql/conf.d
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- aaa_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks: # 等级于docker network create aaa_net
aaa_net:
在根目录 下创建/app/redis/redis.conf文件
mkdir -p /app/redis 创建多层文件夹
cd /app/redis 移动到该目录下
touch redis.conf文件
第四步:docker-compose up (注意:把所有的容器都删除docker rm -f $(docker ps -aq)保证本地mysql和redis没有运行 或者关闭MySQL和redis的服务状态);
mysql
要是本地的mysql服务处于开启状态,此时运行docker-compose up该命令会报错,以为3306端口号被占用,只有关闭才可以运行;
systemctl status mysql 查看mysql服务状态;
systemctl stop mysql 关闭mysql服务;
进入到aaa_qy172文件目录下执行docker-compose up命令;
第五步:mysql客户端测试是否可以连接成功;
连接成功后,会在该数据库自动建成qy173数据库;
我们在该库中根据springboot项目中的实体类来创建表,表结构,数据;
表
表结构
数据
访问http://192.168.146.8:8080/dept/byId/1