springboot项目部分
1 将springboot项目打成jar包通过xftp复制到宿主机目录下,再同目录下创建Dockerfile
内容如下:
FROM java:8
VOLUME /tmp
ADD logistics-0.0.1-SNAPSHOTs.jar webapp.jar
ENTRYPOINT ["java","-jar","/webapp.jar"]
进入到Dockerfile文件所在位置(如Dockerfile在/usr/java下)
cd /usr/java
2创建项目镜像(注意加上.)
docker build -t springboot .
3 docker images查看镜像是否创建成功
mysql部分
下载mysql:运行命令 docker pull mysql:5.6
启动mysql容器:通过mysql镜像(本次测试mysql镜像是5.6版,直接docker pull mysql:5.6即可)创建mysql容器,命令如下:
docker run -p 3307:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=a -d mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
(--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci用来设置mysql编码)
注意:我之前是-p 3306:3306出现以下错误,于是将宿主机端口改为3307
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.
命令说明:
-p 3307:3306:将容器的3306端口映射到宿主机的3307端口
-v -v $PWD/conf:/etc/mysql/conf.d:将宿主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
二 sql脚本数据导入
要求:将logistics.sql文件导入docker中mysql的logistics数据库
1 运行docker ps,查看启动的容器
2 将宿主机上的sql文件复制到容器的文件下 --因为是-v 启动 文件结构目录保持一致(注意:宿主机/opt目录下存在logistics.sql脚本)
docker cp /opt/logistics.sql mymysql(即容器名称或者容器id) :/opt/logistics.sql
3 进入容器,docker exec -it mymysql(即容器名称或者容器id) bash
4 登录数据库 mysql -uroot -pa
5 创建logistics数据库 create database logistics;(数据库执行语句记得加;结尾 表示结束)
6 查看创建的数据库 show databases;
7 进入logistics数据库 use logistics;
8 导入sql脚本 source /opt/logistics.sql
9 退出 exit;
三 导出数据库
需求:将docker容器中的mysql的logistics数据库导出到宿主机/opt目录下
docker exec -it mymysql(容器名称) mysqldump -uroot -pa logistics >/opt/copy.sql
springboot项目与mysql容器互联部分
通过以上mysql部分已经完成了数据库创建以及数据的插入,可以通过以下命令运行springboot项目容器连接到mysql容器
docker run -d -p 8080:80 --name web --link mymysql:localhost springboot
命令解释:
--name web 给启动的springboot项目命名为web
--link mymysql(启动的数据库容器名称):localhost(别名) 容器互联(最好别名为localhost,因为项目jdbc配置为localhost,这样不用再去修改)
springboot 创建容器的镜像
至此,可以通过外网ip:8080访问项目
遇到的问题:mysql中文乱码
进入mysql容器发现编码格式并不是utf-8,如何查看自己mysql容器编码:
前提条件,如果有则跳过: 将宿主机上的sql文件复制到容器的文件下 --因为是-v 启动 文件结构目录保持一致(注意:宿主机/opt目录下存在logistics.sql脚本)
docker cp /opt/logistics.sql mymysql(即容器名称或者容器id) :/opt/logistics.sql
1.进入docker中的mysql容器
docker exec -it mymysql(mysql容器的名称) bash
2 进入数据库
mysql -uroot -pa
3查看编码
show variables like 'char%';
show variables like 'coll%';

发现不是utf-8
SET NAMES 'utf8';
它相当于 SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;
4 创建数据库
create database logistics;
5 查看数据库
show databases;
6进入数据库
use logistics;
7 执行sql脚本
source /opt/logistics.sql;
8 执行show variables like 'char%' 发现不是utf-8
9 再执行SET NAMES 'utf8';

10 再执行source /opt/logistics.sql;