辽宁鞍山建设工程信息网站,福州公众号小程序制作公司,wordpress生成百度地图,牧风的在wordpress1、思路
docker部署项目是将项目的不同程序放入不同容器中运行#xff0c;这样可以方便管理不同程序。我的项目有Springboot、Vue、mysql三部分#xff0c;Vue用nginx代理#xff0c;因为nodejs太占空间了。一开始我是用Dockerfile创建镜像再运行容器的#xff0c;但发现它…1、思路
docker部署项目是将项目的不同程序放入不同容器中运行这样可以方便管理不同程序。我的项目有Springboot、Vue、mysql三部分Vue用nginx代理因为nodejs太占空间了。一开始我是用Dockerfile创建镜像再运行容器的但发现它是基于别的镜像再创建镜像比较占空间。用docker-compose直接配置原镜像用数据卷实现配置文件挂载加载就能运行容器不需要额外创建镜像很快很节约还没发现弊端。
2、编写docker-compose
在总项目包含Springboot、Vue项目目录下再创建一个文件夹app2Docker专门放打包后的项目在app2Docker里创建docker-compose.yml,内容如下。
version: 3
services: mysql-container: image: mysql:5.7container_name: mysql-containerenvironment: MYSQL_ROOT_PASSWORD: root
# MYSQL_DATABASE:数据库名ports: - 3306:3306volumes: - mysql-data:/var/lib/mysqlblog_springboot: image: openjdk:8-jdkcontainer_name: blog_springbootports: - 8100:8100volumes:
# 目标文件夹会自动创建- ./blog_springboot:/app- ./myupload:/app/uploadworking_dir: /appcommand: java -jar simple_blog_backend-0.0.1-SNAPSHOT.jar --spring.config.locationfile:./application.propertiesblog_vue_nginx: container_name: blog_vue_nginximage: nginx
# 80http端口转发到8080https端口 ports: - 80:80- 8080:8080volumes: - ./blog_vue/dist:/usr/share/nginx/html- ./blog_vue/SSL_test_key/mycert.crt:/etc/nginx/certs/mycert.crt- ./blog_vue/SSL_test_key/mykey.key:/etc/nginx/certs/mykey.key- ./blog_vue/my_nginx.conf:/etc/nginx/conf.d/my_nginx.conf
#调用Dockerfile的写法
# blog_springboot:
# build:
# dockerfile所在文件夹
# context: ./blog_springboot
# dockerfile:Dokerfile 名默认的话这一项可省略
# container_name: blog_springboot
# ports:
# - 8100:8100
# volumes:
# 目标文件夹会自动创建
# - ./myupload:/app/upload
#使用容器间网络
networks: default: name: my_network#不会覆盖已有数据卷
volumes: mysql-data: 运行docker-compose.yml 运行前把打包后的Springboot、Vue项目放入app2Docker里对应的子文夹里 然后把app2Docker文件夹拷贝到docker toolbox虚拟机的/home目录下 cd /home/app2Docker进入目录执行docker-compose up -d启动多个容器执行docker-compose down停止并删除多个容器安装docker-compose补充 但是docker toolbox虚拟机不自带docker-compose执行如下命令下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose赋予 Docker Compose 可执行权限
sudo chmod x /usr/local/bin/docker-compose3、代码分析
第一段创建mysql-container容器设置数据库密码为root保存数据库数据到数据卷mysql-data第二段创建blog_springboot容器加载程序和配置文件到容器内/app挂载./myupload文件夹来保存java程序上传图片等文件资源 working_dir: /app’设置后面command命令的容器内工作路径application.properties是从Springboot工程里拷贝出来修改的java加--spring.config.locationfile:./application.properties参数运行时只加载外部配置文件在里面我修改了mysql访问地址
spring.datasource.urljdbc:mysql://mysql-container:3306/simple_blog?serverTimezoneUTCcharacterEncodingutf-8useSSLtruemysql-container是容器名在docker-compose.yml里后面定义了容器间网络my_network所以能通过容器名加端口号来进行通信。
第三段创建blog_vue_nginx容器通过数据卷把dist加载到nginx里同时加载https的自签名证书mycert.crt和mykey.key生成证书方法看文章链接最后加载nginx代理的配置文件my_nginx.conf实现http转发到https。
server {listen 80;server_name 192.168.99.100;return 301 https://$host:8080$request_uri;location / {}
}
server {listen 8080 ssl;server_name 192.168.99.100;ssl_certificate /etc/nginx/certs/mycert.crt;ssl_certificate_key /etc/nginx/certs/mykey.key;# 根目录指向 /usr/share/nginx/htmllocation / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html;}
}4、扩展 在docker toolbox虚拟机中操作可启动虚拟机后用Xshell连接 主机192.168.99.100(虚拟机的地址) 用户名默认docker 密码默认tcuser 用Xftp传输文件Xshell连接成功后并且安装了Xftp点箭头所指就可以建立Xftp连接 docker toolbox里的虚拟机系统/home是临时系统重启会清空使用数据卷或在VirtualBox的设置中配置共享文件夹将主机上的目录共享到虚拟机的/home或其他目录。这样/home目录就可以作为持久存储。 【docker快捷部署系列一】docker快速入门安装docker 运行时日志报错jar Error: Unable to access jarfile …; 因为挂载了jar程序运行的当前文件夹可创建子文件夹来挂载。 运行时日志报错java.io.IOException: Problem reading font data. FROM openjdk:8-jdk-alpine 缺少字体库 改为FROM openjdk:8-jdk