docker-compose容器编排
Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。
官网地址
# 官网地址
https://docs.docker.com/compose/compose-file/compose-file-v3/
# 官网下载地址
https://docs.docker.com/compose/install/
# 下载docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 赋权
chmod +x /usr/local/bin/docker-compose
# 查看docker版本
docker-compose version
compose核心概念
compose使用的三个步骤
compose常用命令
compose微服务实战
生成的一个jar包上传到host主机上的mydocker目录下。
dockerfile文件内容如下
# 基础镜像使用java
FROM java:8
# # 作者
MAINTAINER cz
# # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# # 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar cz_docker.jar
# # 运行jar包
RUN bash -c 'touch /cz_docker.jar'
ENTRYPOINT ["java", "-jar", "/cz_docker.jar"]
# #暴露6001端口作为微服务
EXPOSE 6001
然后运行打包dockerfile文件,生成镜像
# 注意代码最后的一个点
docker build -t cz_docker:1.6 .
# 查看是否已经生成镜像
docker images cz_docker:1.6
不使用docker compose时的部署
# 新建一个mysql容器
docker run -p 3306:3306 --name mysql57 --privileged=true -v /cz/mysql/conf:/etc/mysql/conf.d -v /cz/mysql/logs:/logs -v /cz/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# 查看生成的容器
docker ps
# 进入mysql容器
docker exec -it mysql57 bash
# 进入mysql
mysql -uroot -p
#输入密码
123456
# 创建一个新的数据表
create database db2023;
# 使用该数据表
use db2023;
新建mysql用户表
# 新建redis容器
docker run -p 6379:6379 --name redis608 --privileged=true -v /apps/redis/redis.conf:/etc/redis/redis.conf -v /apps/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
# 查看生成的容器
docker ps
# 进入redis容器
docker exec -it redis608 bash
# 进入redis数据库
redis-cli -p 6379
# 运行刚刚打包的镜像boot_docker
docker run -d -p 6001:6001 f519664c0440
运行了三次容器。
# 本地浏览器输入以下地址,ip换为自己的宿主机地址
http://192.168.0.5:6001/swagger-ui.html#/
不使用compose的缺点
使用compose
编辑docker-compose.yml文件
version: "3"
services:
microService:
image: cz_docker:1.6
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- cz_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- cz_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2023'
MYSQL_USER: 'cz'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- cz_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
cz_net:
进入mydocker文件目录下,编辑docker-compose.yml文件
vim docker-compose.yml
修改java包的代码,将写死的ip换为服务容器名。
# 文件名application.properties
server.port=6001
# ========================alibaba.druid????=====================
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 不使用compose时连接mysql
# spring.datasource.url=jdbc:mysql://192.168.0.5:3306/boot_docker?useUnicode=true&characterEncoding=utf-8&useSSL=false
# 使用compose时 连接mysql
spring.datasource.url=jdbc:mysql://mysql:3306/boot_docker?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.druid.test-while-idle=false
# ========================redis????=====================
spring.redis.database=0
# 不使用compose时连接redis
# spring.redis.host=192.168.0.5
# 使用compose时 连接redis
spring.redis.host=redis
spring.redis.port=6379
spring.redis.password=
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
# ========================mybatis????===================
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.wang.docker.entities
# ========================swagger=====================
spring.swagger2.enabled=true
在编辑器里maven package命令将微服务形成新的jar包,并上传到linux服务器/mydocker目录下,或者直接在linux机器上在线修改jar包。
# linux机器进入jar包
vim docker_boot-0.0.1-SNAPSHOT.jar
# 定位查找要修改的文件,然后直接回车进入编辑
/application.properties
然后编写dockerfile,与不使用compose时一样。
# 基础镜像使用java
FROM java:8
# # 作者
MAINTAINER cz
# # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# # 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar cz_docker.jar
# # 运行jar包
RUN bash -c 'touch /cz_docker.jar'
ENTRYPOINT ["java", "-jar", "/cz_docker.jar"]
# #暴露6001端口作为微服务
EXPOSE 6001
# 删掉旧的运行的容器,通过容器ID辨别
docker rm -f 8c3aa0299d0c 984684e703fe a87ecfac51e1
# 删除生成的旧镜像
docker rmi -f f519664c0440
# 重新构建新版本的镜像
docker build -t cz_docker:1.6 .
# 启动docker-compose服务
docker compose up -d
# 查看启动的服务
docker ps
# 进入mysql容器内部
docker exec -it a61af20bbfcb bash
# 进入mysql数据库 以cz用户进入
mysql -ucz -p
# 查看已有的数据库
show database
可以看到未使用compose时 新建的db2023又被恢复了。
仍然新建一个t_user表
浏览器输入地址
# ip地址换为自己宿主机的,
http://192.168.0.5:6001/swagger-ui.html#/user-controller/findUserByIdUsingGET