准备环境
本项目运行需要以下环境,自行准备
- maven环境
- git
- docker
步骤
-
从git仓库拉取 spring boot集成docker插件的项目。
git clone https://github.com/1996yarbrough/mysql-spring-boot-todo.git
-
生成镜像
cd mysql-spring-boot-todo mvn clean package docker:build
-
经过等待之后,通过命令
docker images
查看是否构建成功。 -
镜像构建成功后,该项目需要mysql,所以我们需要启动一个mysql容器,可在 docker hub上直接pull,并制定用户名、密码,如下命令:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=tododb -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -d mysql:5.6
可以通过
docker logs mysql
查看容器启动日志,docker ps
来查看mysql是否启动成功。 -
启动我们的spring boot项目的容器,需要注意的是,因为需要连接的mysql服务在另一个容器中,需要用
link
来指定,这是在同一台主机下的不同容器,在不同主机下处理不同,设计网络连接相关内容,暂时不做考虑。使用下面命令来启动:
docker run -p 8080:8080 --name todo --link mysql -d zhanyang/todo-demo:1.0.0
同样,我们使用docker ps todo
来查看容器是否启动成功。 -
启动成功后,打开
http://192.168.1.163:8080/
进入页面,如果打不开,使用curl
在本地打开,本地可以打开,则是防火墙问题,关闭防火墙后,再从浏览器打开即可。 -
我们也可以进入mysql容器,进行sql查询,命令如下:
docker exec -ti mysql bash
mysql -uuser –ppass
use tododb;
select category,IF(complete, 'true','false') complete,name from
todo_item;
关于容器间连接
对于上面启动容器涉及到的容器间连接的原理,我们做一些探查。
-
进入容器
[root@localhost mysql-spring-boot-todo]# docker exec -it todo /bin/bash
-
查看hosts文件
admin@2e695f4a3d1e:/app$ cat /etc/hosts
我们可以看到多了一天mysql的连接,然后我们就可以通过
ping mysql
来进行网络通信。 -
查看环境
admin@2e695f4a3d1e:/app$ env
我们可以发现多了很多关于mysql 的环境变量。
这就是为什么能够进行容器间网络通信的原因。