目录
这篇文章中的操作只需要下载了docker就行,不用下载docker-compose。
version: "3.8"
services:
mysql:
image: mysql
container_name: custom-mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 1234
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- custom-net
custom-jar:
build:
context: .
dockerfile: custom_dockerfile
container_name: custom-jar
ports:
- "8080:8080"
networks:
- custom-net
depends_on:
- mysql
nginx:
image: nginx
container_name: custom-nginx
ports:
- "80:80"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- custom-jar
networks:
- custom-net
networks:
custom-net:
name: custom
一,配置含义:
1,version为配置文件版本,一般为3x
2,services的二级标签为服务名,服务名在同一个docker compose中唯一,在整个docker中不一定唯一
3,container_name为容器名,是唯一的,不能重复命名
4,TZ是时区
5,volumes里面跟着数据卷,“宿主机中的目录 : 容器中的目录”
6,networks里面加自定义的网络名
7,depends_on里面加服务名而不是容器名,depends_on是指因为依赖问题,该容器需要在该容器的依赖容器之后启动,例如:后端依赖于mysql,需要在mysql启动后启动,而nginx又依赖于后端。
8,costum-jar为spring框架用mybatis生成的jar包的镜像,这里需要用dockerfile,dockerfile为将jar打包成镜像的配置文件,后面会有示例 + 说明。
9,ports 表示的是将宿主机的 端口映射到容器内部的端口。语法为"宿主机端口:容器内服务端口"
二,dockerfile配置
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY custom.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
openjdk是jdk的基础镜像,省去了打包jar的一些步骤
三,一键部署
将docker-compose.yum文件,dockerfile文件,nginx.conf文件拷贝到ubuntu上输入命令:
docker conpose up -d
可以一键部署docker (不用下载或创建镜像,输入命令一键部署)
ps:nginx.conf要放到宿主机相应的数据卷目录中不然会报错
如果要迁移mysql,我试过直接移动data目录好像不行,这里能够给到的解决方案是原数据库中导出成sql脚本,并放在conf对应的数据卷中,进入docker容器中执行sql脚本
进入docker命令如下:
docker exec -it <容器名或容器ID> bash
mysql导出导入脚本:
// mysql 指定数据库导出成sql脚本
mysqldump -u root -p rizao > rizao.sql
// mysql 执行sql脚本
mysql -u root -p -D rizao < rizao.sql