dockerfile制作java应用的docker镜像,运行并读取mysql数据库

方式一、访问本地数据库

  • 创建应用Dockerfile:

FROM openjdk:8-jre-alpine

COPY ./demo-0.0.1-SNAPSHOT.jar /app/app.jar

WORKDIR /app

#ENV DATABASE_URL jdbc:mysql://192.168.1.28:3306/demo

#ENV DATABASE_USERNAME root

#ENV DATABASE_PASSWORD 123456

EXPOSE 8880

# 入口,java项目的启动命令

ENTRYPOINT java -jar /app/app.jar

  • java应用连接本地数据库

数据库连接url设置:localhost改为IP

  • 制作镜像命令

#docker build -t demo-project .

  • 在portainer中运行容器

  • 验证

浏览器输入:http://192.168.1.28:8880/user/show

输入:2,读取数据库成功

​​​​​​​方式二、访问mysql数据库容器

  • 创建应用dockerfile

FROM openjdk:8-jre-alpine

COPY ./demo-0.0.1-SNAPSHOT.jar /app/app.jar

WORKDIR /app

#ENV DATABASE_URL jdbc:mysql://192.168.1.28:3306/demo

#ENV DATABASE_USERNAME root

#ENV DATABASE_PASSWORD 123456

EXPOSE 8880

# 入口,java项目的启动命令

ENTRYPOINT java -jar /app/app.jar

  • ​​​​​​​java应用连接容器数据库

数据库连接url设置:localhost改为host.docker.internal

  • ​​​​​​​制作应用镜像命令

#docker build -t project-d .

给镜像打tag并导入镜像project-d到harbor 仓库

  • ​​​​​​​制作数据库镜像

  • 1.创建Dockerfile:

FROM mysql:8.0.33

ENV MYSQL_DATABASE=demo

ENV MYSQL_USER=root

ENV MYSQL_PASSWORD=123456

ENV MYSQL_ROOT_PASSWORD=123456

COPY ./demo.sql /docker-entrypointdb.d/

EXPOSE 3306

CMD ["mysqld"]

2.生成镜像

#docker build -t mysqldemo:8.0.33 .

3.运行数据库容器,导入数据库文件demo.sql

Portainer中运行数据库容器

docker exec -it mysql-d bash进入mysql容器

#mysql -u username -p -e "CREATE DATABASE demo;" 创建数据库

#mysql -u username -p demo < demo.sql             导入数据库文件

4.进入mysql容器,允许远程访问

  use mysql

  update user set host=’%’  where user='root';   //改 user 表

  select host,user from user; 进入user表查询

  flush privileges;  //刷新权限

5.解决容器部署MySQL的数据在docker commit导出的镜像中丢失

(#docker inspect mysqldemo:8.0.33 -f "{{json .ContainerConfig.Volumes}}"

输出"/var/lib/mysql":{},即:容器启动后,自动分配一块Volume挂载到容器中/var/lib/mysql挂载点上,也就是说Volume不会在docker commit时保存到镜像中。)

变更数据目录为其他目录:

# 进入mysql容器

docker exec -it mysql-d bash

# 修改数据目录到/data/,版本不同位置可能不同

sed -i "s#datadir.*/var/lib/mysql#datadir=/data/#g" /etc/my.cnf

# 迁移数据目录

mkdir /data

cp -r /var/lib/mysql/* /data/

chown mysql:mysql /data -R

# 退出容器,重启容器使用新数据目录

exit

docker restart mysql-d

# 容器启动后,导入数据(见3))

# 关闭myql容器以保存正常关闭状态

docker stop mysql-d

# 导出含数据的镜像

docker commit mysql-d mysqldemo:8.0.33

给镜像mysqldemo:8.0.33打tag并导入至harbor

  • ​​​​​​​创建docker-compose文件

version: '2.3'

services:

  demo:

    image: reg.westos.org/library/project-d:1.0

    container_name: project-d

    restart: always

    environment:

      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/demo

      - SPRING_DATASOURCE_USERNAME=root

      - SPRING_DATASOURCE_PASSWORD=123456

    ports:

      - 8882:8880

    depends_on:

      - mysql

    links:

      - mysql

  mysql:

    image: reg.westos.org/library/mysqldemo:8.0.33

    container_name: mysql-d

    environment:

      - MYSQL_ROOT_PASSWORD=123456

      - MYSQL_DATABASE=demo

    ports:

      - 33062:3306

  • ​​​​​​​在portainer中通过add stacks 创建并容器

Build method:upload

验证

浏览器输入:http://192.168.1.28:8882/user/show

输入:2,读取数据库成功

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值