昨天尝试了下SpringBoot 的Docker部署,虽然踩了很多坑,但是总算是弄出来了,下面整理一下思路,方便以后使用。 这里部署的难点,主要是我的SpringBoot项目用到了redis和mysql,如果直接在一个镜像里安装redis和mysql,那就和在虚拟机上部署一样了,所以我把SpringBoot的jar包和redis,mysql分别做成了三个镜像
1.部署mysql
- Dockerfile
FROM mysql
ADD sell.sql sell.sql //sell.sql 为项目sql脚本
//这里应该其实应该写执行1.登录mysql 2.创建数据库 3.导入sql脚本 的命令
//另一种直接在命令行写
另一只直接在构建镜像的时候就把数据导入工作做好的请看这篇文章http://www.zhimengzhe.com/shujuku/MySQL/317712.html
- 构建镜像
docker build -t mysql:sell .
- 启动容器
docker run --name sell/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root mysql:sell //这里实际上不应该-p 因为除了api接口其他的都应该隐藏,我是为了测试方便,所以暴露了
- 导入mysql脚本
mysql -uroot -proot
create database sell;
use sell;
source sell.sql;
2.部署redis
docker pull redis;
docker run -d --name sellredis redis; //这里我的redis写的比较简单,所以就直接run了
3.部署springboot
-
打包这个就不说了,不过需要提醒一点,打包先按照链接本地数据库的方式打包,保证不报错,然后把jar包移到docker build目录
-
然后把application.yml复制一份到docker build目录,这里如果application.yml和jar包在同一目录,那么启动的时候会有限加载同目录下的application.yml而不是jar包内的,这样就可以再运行的时候改变ip了,具体参考http://www.cnblogs.com/xiaoqi/p/6955288.html
-
进入mysql,redis容器内部,这里以mysql为例
docker exec -it mysqlsell bash
,然后使用cat /etc/hosts查看ip
root@63b5997e1f12:/data# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 63b5997e1f12 //主要记住这个ip 这是容器内互联需要用到的ip
root@63b5997e1f12:/data# exit
exit
-
修改application.yml中的数据库和redisurl的ip为刚刚查看到的ip,在启动容器的时候--link的参数是 链接容器名:别名,也可以用这个别名代替ip
-
编写dockerfile
FROM hub.c.163.com/xbingo/jdk8:latest
ADD sell.jar sell.jar
ENTRYPOINT ["java","-jar","/sell.jar"]
- 构建 docker build -t sell:v1 .
4.启动
docker run -d -p 9000:9000 --name selltest --link sellmysql:mysql --link sellredis:redis sell:v1
以上用到的docker命令不懂的请参考 www.jianshu.com/p/7f457cb1b…