经过前两篇文章,
docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 1
docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 2
已经可以使用docker-compose发布小型的应用了。其实在开发环境中,我觉得还是挺方便的吧。(个人认为哈)
这里再扯点别的。
1. 个人以为,jenkins是个好东西,其实用jenkins, 前面 part 1, part 2 还可以更简单。 不过这里就不研究了。
2. 如果没有配置docker的阿里镜像加速,挂掉是必须的哈。 其实配置阿里的docker加速器,也不太难:
就注册个阿里的开发者帐号就行。 然后就会有你自己的加速配置。(自行X度吧)
如果想重新开始, 就先
# docker-compose down
如果实在搞不明白,就用docker stop, docker rm 等命令先停掉容器,再一个个删吧。
3. 查看 docker-compose.yml里的 db_data 映射到哪里
# docker volume ls
# docker volume inspect compose-demo_db_data
图中红框是实际db_data的位置。
因为这里实际保存mysql的数据,即使删除mysql的容器(docker-compose down, 或 docker rm xxx),下次再建立容器时,
数据还在,root密码不会变。
所以,如果docker-compose里密码改变的话,就要删除db_data这个volume,让docker-compose重建volume, 再重新初始化数据库。
(当然进入 docker容器里改root密码也行,不过这要用mysql客户端,相对麻烦,如果你mysql用得666, 就没什么好说了。那就改吧。)
# docker volume rm compose-demo_db_data
至此, <<docker-compose + spring boot + mysql + redis + nginx 发布web应用>> 结束。
--------------------------------------------------------------------------------------------------------------------
更新一波:
docker-compose.yml mysql部分:
mysql: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always volumes: 使用volumes 将 ./ 映射到 mysql 容器的 /docker-entrypoint-initdb.d/ 目录 - ./:/docker-entrypoint-initdb.d/ 这样,./ 里的sql就会被自动执行了。 environment: MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: compose MYSQL_USER: boot MYSQL_PASSWORD: boot123
使用volumes 映射后,第二部分中的mysql初始化就可以省略了。
但这样会每次docker-compose up -d 都会执行,所以如果不想mysql里的数据丢失的话 (因为sql里有删库的操作,删库但不跑路,哈哈)
执行初始化后,就要把volumes这两行去掉。免得以后再次执行sql文件。