#需求
目前有 初始化数据库文件oasys.sql,还有springboot的jar文件。oasys.jar中默认指向的数据库是127.0.0.1, 3306,用户名和密码都是root,版本为5.7及以下。需要运行的java版本是java1.8
oasys.jar启动默认的端口是8088.默认用户名是soli/123456
所需要的文件见本文附件。
考虑使用已有的Mysql5.7镜像
初始化目录
先安装好docker-ce
然后mkdir -p ~/docker/oasys
cd ~/docker/oasys
把附件中的二个文件复制到目录,如下
[root@master1 oasys]# tree -L 2
.
├── docker-compose.yml
├── Dockerfile
├── oasys.jar
├── oasys.sql
├── rebuild
└── supervisord.conf
0 directories, 6 files
选择supervior插件运行2个程序
docker默认一个docker只能运行一个进程,因此在目前的镜像中,要运行Mysqld和java二个程序需要考虑使用supervisor插件,而且需要配置supervisor.conf的配置文件。
由于默认的数据库用户名和密码都是root,因此使用ENV MYSQL_ROOT_PASSWORD=root执行,改镜像会按照此密码进行设置数据库。
默认情况下,该镜像会默认运行/docker-entrypoint_initdb.d目录下的所有sql文件,因此这这里增加初始化文件。
最后运行java -jar oasys.jar,
dockerfile如下
from mysql:5.7
ENV MYSQL_ROOT_PASSWORD root
RUN yum -y install java java-devel supervisor
WORKDIR /docker-entrypoint-initdb.d
# 设置工作目录
WORKDIR /docker-entrypoint-initdb.d
# 设置语言环境
ENV LANG=C.UTF-8
# 添加 SQL 初始化脚本
ADD oasys.sql .
# 复制 Java 应用程序
COPY oasys.jar .
# 复制 supervisor 配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 暴露端口
EXPOSE 8088
EXPOSE 3306
# 启动 supervisor
CMD [ "/usr/bin/supervisord", "-c" ,"/etc/supervisor/conf.d/supervisord.conf"]
给出supervisor.conf文件
[supervisord]
nodaemon=true
[program:mysql]
command=docker-entrypoint.sh mysqld
autostart=true
autorestart=true
[program:javaapp]
command=java -jar /docker-entrypoint-initdb.d/oasys.jar 2>/var/log/oasys.log >&2 &
autostart=true
autorestart=true
重新设置docker镜像
因为目前国外的镜像很多不能下载,需要使用代理,目前利用学校的自己准备好的镜像库进行配置.
注意: https://docker-push.ycjy.info
是用来提交镜像的,实际是反向代理到127.0.0.1:8083 http端口默认的用户名是yanfeng,密码是 1qaz!QAZ
https://nexus.ycjy.info 是用来获取公司内部镜像的,实际是反向代理到127.0.0.1:8082 http端口
因为docker-ce已经不支持http pull and push了,因此这2个方面都使用nginx做了https的反向代理。
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors" : [
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud" ,
"https://docker.m.daocloud.io",
"https://nexus.ycjy.info"
],
"insecure-registries" : [
"https://nexus.ycjy.info",
"http://nexus.ycjy.info:8082",
"https://docker-push.ycjy.info"
],
"dns" : [ "192.168.10.1" , "8.8.8.8" ]
}
EOF
执行
docker build -t docker-push.ycjy.info/oasys:1.0 .
# 其中-t是打标签,标签的名称和你将来要提交的服务器的名称是要一样的。
# 如果忘记打标签,可以重新打标签
docker tag 0eafe2323aefa docker-push.ycjy.info/oasys:latest
打包过程是实际上会遇到很多的错误,都是在不停尝试当中成功的。
提交编译
先登陆
docker login docker-push.ycjy.info
yanfeng
1qaz!QAZ
然后提交docker push docker-push.ycjy.info/oasys:1.0
测试
临时启动,并注意关闭防火墙或者放行8088
docker run --rm -p 8088:8088 nexus.ycjy.info/oasys:1.0
考虑使用docker-compose
用这个就更加简单了
看下面的docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./oasys.sql:/docker-entrypoint-initdb.d/oasys.sql
ports:
- "3306:3306"
javaapp:
image: openjdk:8-jdk
volumes:
- ./oasys.jar:/app/oasys.jar
working_dir: /app
command: ["java", "-jar", "oasys.jar"]
ports:
- "8088:8088"
depends_on:
- mysql
直接运行
docker-compose up -d
不成功,因为oasys.jar写死了localhost,不同的网络不能成为Localhost,除非使用解压oasys.jar重新打包
jar xf oasys.jar
jar cf oasys.jar ….
version: '3.0'
services:
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
# MYSQL_ROOT_HOST: localhost
volumes:
- ./oasys.sql:/docker-entrypoint-initdb.d/oasys.sql
ports:
- "3306:3306"
- "8088:8088"
javaapp:
image: openjdk:8-jdk
volumes:
- ./oasys.jar:/app/oasys.jar
working_dir: /app
#@ command: ["java", "-jar", "oasys.jar"]
command: ["sh", "-c", "sleep 60 && java -jar oasys.jar"] # 等待60秒后启动
depends_on:
- mysql
network_mode: "service:mysql" # 共享mysql容器的网络
需要等到60秒数据库启动完成。
最后编辑:严锋 更新时间:2025-05-09 15:48