【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库

1、思路

  1. docker部署项目是将项目的不同程序放入不同容器中运行,这样可以方便管理不同程序。
  2. 我的项目有Springboot、Vue、mysql三部分,Vue用nginx代理,因为nodejs太占空间了。
  3. 一开始我是用Dockerfile创建镜像再运行容器的,但发现它是基于别的镜像再创建镜像,比较占空间。
  4. 用docker-compose直接配置原镜像,用数据卷实现配置文件挂载加载,就能运行容器,不需要额外创建镜像,很快很节约,还没发现弊端。

2、编写docker-compose

  • 在总项目(包含Springboot、Vue项目)目录下再创建一个文件夹app2Docker专门放打包后的项目,在app2Docker里创建docker-compose.yml,内容如下。
version: '3'
services: 
    mysql-container: 
        image: mysql:5.7
        container_name: mysql-container
        environment: 
            MYSQL_ROOT_PASSWORD: "root"
#            MYSQL_DATABASE:数据库名
        ports: 
            - "3306:3306"
        volumes: 
            - mysql-data:/var/lib/mysql
            
    blog_springboot: 
        image: openjdk:8-jdk
        container_name: blog_springboot
        ports: 
            - "8100:8100"
        volumes: 
#        目标文件夹会自动创建
            - ./blog_springboot:/app
            - ./myupload:/app/upload
        working_dir: /app
        command: java -jar simple_blog_backend-0.0.1-SNAPSHOT.jar --spring.config.location=file:./application.properties
            
    blog_vue_nginx: 
        container_name: blog_vue_nginx
        image: nginx
# 80http端口转发到8080https端口        
        ports: 
            - "80:80"
            - "8080:8080"
        volumes: 
            - ./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-compose

3、代码分析

  • 第一段创建mysql-container容器,设置数据库密码为root,保存数据库数据到数据卷mysql-data
  • 第二段创建blog_springboot容器,加载程序和配置文件到容器内/app,挂载./myupload文件夹来保存java程序上传图片等文件资源, 'working_dir: /app’设置后面command命令的容器内工作路径,application.properties是从Springboot工程里拷贝出来修改的,java加--spring.config.location=file:./application.properties参数运行时只加载外部配置文件,在里面我修改了mysql访问地址
spring.datasource.url=jdbc:mysql://mysql-container:3306/simple_blog?serverTimezone=UTC&characterEncoding=utf-8&useSSL=true

mysql-container是容器名,在docker-compose.yml里后面定义了容器间网络my_network,所以能通过容器名加端口号来进行通信。

  • 第三段创建blog_vue_nginx容器,通过数据卷把dist加载到nginx里,同时加载https的自签名证书mycert.crtmykey.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/html
	location / {
		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

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 准备工作 在服务器上安装dockerdocker-compose,具体安装方法可以参考官方文档。 2. 创建项目文件夹 在服务器上创建一个用于存放vue项目的文件夹,例如:`/home/vue-project/`。 3. 编写docker-compose文件 在项目文件夹中创建一个名为`docker-compose.yml`的文件,并编写以下内容: ``` version: '3' services: web: image: node:latest ports: - "8080:8080" volumes: - ./app:/app working_dir: /app command: "npm run dev" ``` 这个docker-compose文件定义了一个名为`web`的服务,使用最新版本的Node.js镜像,将本地的`./app`目录挂载到容器的`/app`目录,将容器的8080端口映射到主机的8080端口,最后在容器中执行`npm run dev`命令。 4. 编写Dockerfile文件 在项目文件夹中创建一个名为`Dockerfile`的文件,并编写以下内容: ``` FROM node:latest RUN mkdir /app WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "npm", "run", "dev" ] ``` 这个Dockerfile定义了一个基于Node.js镜像的Docker镜像,将容器的工作目录设置为`/app`,将本地的`package*.json`文件复制到容器中并执行`npm install`命令安装依赖,将本地的所有文件复制到容器中,将容器的8080端口暴露出来,最后在容器中执行`npm run dev`命令。 5. 构建镜像 在项目文件夹中运行以下命令构建镜像: ``` docker build -t vue-project . ``` 6. 启动容器项目文件夹中运行以下命令启动容器: ``` docker-compose up -d ``` 7. 访问应用 在浏览器中访问服务器的IP地址和端口号,例如:`http://<server_ip>:8080`,即可访问应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值