方式一、访问本地数据库
-
创建应用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,读取数据库成功