使用项目 https://gitee.com/weim/docker-first进行修改
一 项目更改
a 首先更改application.properties内容
spring.profiles.active=dev
b 添加application-dev.properties文件
server.port=8088
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.redis.database=0
# Redis server port.
spring.redis.port=6379
spring.redis.host=localhost
c 添加application-prod.properties文件
server.port=8088
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql2:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.redis.database=0
# Redis server port.
spring.redis.port=6379
spring.redis.host=172.17.0.1
** 注意spring.datasource.url 部分 mysql2 后续说明。
二 编译
a 使用命令mvn clean package -Dmaven.test.skip=true dockerfile:build 编译spring boot文件,生成docker 镜像。(-Dmaven.test.skip=true 跳过测试用例部分)
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my/one latest 326b84df5960 About a minute ago 683MB
b 使用命令 docker pull mysql:5.7 下载mysql镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my/one latest 326b84df5960 About a minute ago 683MB
mysql 5.7 5195076672a7 4 weeks ago 371MB
三 启动mysql镜像
docker run --name mysqltemp -v /tmp/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --rm mysql:5.7
--name 别名
-v 挂载
-d 后台执行
--rm 容器停止时删除
-e MYSQL_ROOT_PASSWORD=root 设置mysql密码 root用户
***********************************************************************************************************
诡异问题:上述命令使用了 -d 参数之后, 执行命令,等好久,容器启动不起来。进入设置的/tmp/mysql路径,就是上面-v指定的地方,会多一个ib_buffer_pool文件,删除掉之后,再次运行上述命令。容器就可以启动起来了。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88751523c75e mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 3306/tcp mysqltemp
***********************************************************************************************************
容器启动后才可以使用docker logs mysqltemp -f 持续查看日志,-f参数 持续
使用命令docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysqltemp 查看容器ip
我的是172.17.0.2
然后使用命令mysql -uroot -proot -h 172.17.0.2 就可以访问数据库了。
***********************************************************************************************************
进入数据库之后,创建test数据库。
四 启动my/one镜像
使用以下命令起启动
docker run --name mine --link mysql2:mysqltemp -p 8088:8088 -e SPRING_PROFILES_ACTIVE=prod --rm -d my/one
--link mysql2:mysqltemp 连接容器 需要连接容器:容器别名
** 注意--link mysel2 对应上面mysql容器别名。
启动起来之后,访问http://localhost:8088/ 显示hello user。
***********************************************************************************************************
redis没有添加,有兴趣者,可以自己操作。
***********************************************************************************************************
--link 有可能会被后续版本取消,建议还是使用自定义的Docker网络来连接多个容器
使用docker network create -d bridge my-net命令创建docker网络。
可以使用docker network ls 命令查看创建的网络。
使用mysql镜像启动容器 注意mysql2
docker run --name mysql2 -v /tmp/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --network my-net --rm mysql:5.7
使用my/one镜像启动容器
docker run --name mine --network my-net -p 8088:8088 -e SPRING_PROFILES_ACTIVE=prod --rm my/one
使用命令docker inspect 容器名|id 查看启动之后的容器信息