目录
一、前提说明
二、简单的Docker容器部署案例
1. Dockerfile 配置
2. docker-compose.yml 配置
3. application.properties 配置
4. pom.xml 配置
5. 上传文件
6. 创建基础Docker镜像
7. docker-compose.yml编排
8. 停止并删除容器编排
在配置好Docker和Docker Compose之后,部署一个JavaWeb项目。
使用到 spingboot+mysql+redis
# 基于那个镜像使用 java
# FROM openjdk:8-oracle
FROM java:8
# 作者
MAINTAINER cj
# 在主机 /var/lib/docker 目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar /springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]
# SpringBoot项目配置的端口号为 19311,需要将 19311 暴露出去
EXPOSE 19311
# docker-compose文件版本号
version: "3"
# 配置各个容器服务
services:
# 定义名为 microService 的服务
microService:
# 使用 springboot_docker:1.1 镜像作为容器
image: springboot_docker:1.1
# 设置容器的名称为 ms01
container_name: ms01 # 容器名称,如果不指定,会生成一个服务名加上前缀的容器名
# 将容器内部端口 19311 映射到宿主机端口 19311
ports:
- "19311:19311"
# 挂载宿主机的 /app/microService 目录到容器内的 /data 目录
volumes:
- /app/microService:/data
# 连接到名为 springboot_network 的自定义网络
networks:
- springboot_network
# 定义 microService 服务依赖的其他服务
depends_on:
- redis
- mysql
# 定义名为 redis 的服务
redis:
# 使用 redis:6.0.8 镜像作为容器
image: redis:6.0.8
# 主机端口:容器内部端口
ports:
- "6479:6379"
# 挂载宿主机的 redis 配置文件和数据目录到容器内
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
# 连接到名为 springboot_network 的自定义网络
networks:
- springboot_network
# 指定容器启动命令为 redis-server /etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
# 定义名为 mysql 的服务
mysql:
# 使用 mysql:latest 镜像作为容器
image: mysql:latest
# 设置 MySQL 的环境变量
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'boot_docker'
MYSQL_USER: 'cj'
MYSQL_PASSWORD: '123456'
# 将容器内部端口 3306 映射到宿主机端口 3406
# 主机端口:容器内部端口
ports:
- "3406:3306"
# 挂载宿主机的 MySQL 数据库文件、配置文件和初始化脚本到容器内
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
# 连接到名为 springboot_network 的自定义网络
networks:
- springboot_network
# 指定容器启动命令为 --default-authentication-plugin=mysql_native_password
command: --default-authentication-plugin=mysql_native_password # 解决外部无法访问
# 定义自定义网络 springboot_network
networks:
springboot_network:
# 设置服务器端口号为 19311
server.port=19311
# ======================== Alibaba Druid 数据库连接池配置 ======================
# 设置数据源类型为 Alibaba Druid 数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 设置数据库驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置数据库连接地址、字符集等相关信息
#spring.datasource.url=jdbc:mysql://192.168.153.133:3307/boot_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
# 将IP更换成容器名
spring.datasource.url=jdbc:mysql://mysql:3306/boot_docker?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
# 设置数据库用户名
spring.datasource.username=root
# 设置数据库密码
spring.datasource.password=123456
# 设置 Druid 连接池的 test-while-idle 属性为 false,表示在空闲时不测试连接是否有效
spring.datasource.druid.test-while-idle=false
# ======================== Redis 缓存配置 ======================
# 设置 Redis 数据库编号
spring.redis.database=0
# 设置 Redis 主机地址
#spring.redis.host=192.168.153.133
# 将IP更换成容器名
spring.redis.host=redis
# 设置 Redis 端口号
spring.redis.port=6379
# 设置 Redis 密码
spring.redis.password=123456
# 设置 Redis 连接池的一些属性
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 的映射文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
# 设置 MyBatis 实体类别名所在的包路径
mybatis.type-aliases-package=com.wang.docker.entities
# ======================== Swagger 配置 ======================
# 启用 Swagger2 API 文档生成
spring.swagger2.enabled=true
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.5.6
com.atguigu.docker
docker_boot
0.0.1-SNAPSHOT
UTF-8
1.8
1.8
4.12
1.2.17
1.16.18
8.0.30
1.1.17
4.1.5
1.3.0
2.9.2
com.google.guava
guava
23.0
org.redisson
redisson
3.13.4
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
io.springfox
springfox-swagger2
${swagger.version}
io.springfox
springfox-swagger-ui
${swagger.version}
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-cache
org.apache.commons
commons-pool2
redis.clients
jedis
3.1.0
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid-spring-boot-starter
${druid.version}
com.alibaba
druid
${druid.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.spring.boot.version}
commons-codec
commons-codec
1.10
cn.hutool
hutool-all
5.2.3
junit
junit
${junit.version}
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-test
test
log4j
log4j
${log4j.version}
org.projectlombok
lombok
${lombok.version}
true
javax.persistence
persistence-api
1.0.2
tk.mybatis
mapper
${mapper.version}
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-resources-plugin
3.1.0
上传文件到CentOS中,创建一个mydocker的文件夹,将打包的jar、Dockerfile、docker-compose.yml放在同一级目录中。如同:
ps:以下命令需要在包含jar包、Dockerfile、docker-compose.yml目录下进行,不然可能会出现找不到文件的错误
docker build -t springboot_docker:1.1 .
编写完成docker-compose.yml后,进行语法检查
# 进行语法检查
docker-compose config -q
如果语法检查没有任何问题,进行创建、启动
docker-compose up -d
docker-compose down