docker部署springboot项目(ubuntu16)


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%';

docker部署springboot项目(ubuntu16)_第1张图片

发现不是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';

docker部署springboot项目(ubuntu16)_第2张图片

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
















你可能感兴趣的:(Docker)