docker部署项目(三):docker-compose配置和部署

本节开始正式讲如何配置docker文件并进行前后端的部署。全部操作都是在阿里云上面。vue前端和springboot接口项目文末会给出git地址。

  1. 在usr/local目录下面创建一个docker文件夹
$ cd /usr/local
$ mkdir docker

进入docker文件里面创建一个demo的文件夹,docker-compose的项目及配置文件都会放在这里面。

$ cd docker
$ mkdir demo
  1. 创建一个Dockerfile的文件,主要是对springboot项目的操作运行配置
$ cd demo
$ vi Dockerfile

vi是一个编辑命令,可以进入编辑页面进行编辑。关于vi的操作,请自行百度。
Dockerfile 内容如下:

# 将当前目录下的jar包复制到docker容器的/目录下
add zhou-0.0.1-SNAPSHOT.jar /demo.jar
# 运行过程中创建一个demo.jar文件 
RUN bash -c 'touch /demo.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包

ENTRYPOINT ["java","-jar","/demo.jar"]
# 指定维护者的名字
MAINTAINER zhou

Dockerfile的作用是根据一系列命令及springboot项目jar包生成镜像,在后面的运行过程中可以自动运行。zhou-0.0.1-SNAPSHOT.jar是我们后端项目的打包文件,所以这里需要将zhou-0.0.1-SNAPSHOT.jar文件复制到与Dockerfile同目录的位置。

docker-compose.yml

同样用vi docker-compose.yml进入编辑。内容如下:

version: '3'
services:
  demo:
    # 指定服务使用的镜像
    #image: demo
    # 指定服务运行的端口
    #container_name: demo
    build: .
    network_mode: host
    depends_on:
      - redis
      - mysql
    ports:
      - 5000:8080
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /mydata/app/demo/logs:/var/logs

  mysql:
    hostname: localhost
    image: mysql
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
  adminer:
    image: adminer
    restart: always
    ports:
      - 8081:8080

  redis:  
    image: redis
    container_name: redis
    restart: unless-stopped
    command: redis-server /etc/redis.conf # 启动redis命令
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
      - ./redis/data:/data
      - ./redis/redis.conf:/etc/redis.conf
    ports:
        - 6379:6379
  nginxweb:
    image: nginx
    ports:
       - 8082:80
    volumes:
       - ./nginx/html:/usr/share/nginx/html
       - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
       - ./nginx/conf.d:/etc/nginx/conf.d
       - ./nginx/logs:/var/log/nginx
    restart: always
    container_name: nginxweb

从上面可以看出,文件分别配置的springboot项目,mysql,redis,nginx等。adminer是一个数据库管理工具,可有可无。
所以此时demo里面的文件如下:
在这里插入图片描述

这个时候我们直接输入:

$ docker-compose up

进行部署,就是这么简单,当然第一次的话,nginxweb提示报错了。主要是nginx的配置问题。
先通过

$ docker-compose down

删除所以运行的容器。查看当前目录,可以看到多了几个文件,这些是根据上面的docker-compose.yml配置挂载的数据卷。找到nginx并进入。
在这里插入图片描述
找到conf/nginx.conf,因为docker只能挂载目录,不能挂载具体文件,所以该处的nginx.conf事实上是一个目录,但是我们其实需要的是一个配置文件。将它删除再重新创建成配置文件。

$ cd conf
$ rm -rf nginx.conf
$ vi nginx.conf

nginx.conf内容如下:

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    include /etc/nginx/conf.d/*.conf;
}

include /etc/nginx/conf.d/*.conf;可以知道在conf.d目录里面还有其他配置文件。
我们cd 进入conf.d目录,创建default.conf,内容如下:

server {
    listen       80;
    server_name  http://服务器ip;
 
    # rewrite ^(.*)$  https://www.vhxsl.com permanent;
 
    location / {
      root   /usr/share/nginx/html;
      index  index.html index.htm;
    }
    location /api {
       proxy_pass http://服务器ip:8080/api;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

最后将上节打包的前端dist里面的文件复制到nginx/html目录里面。回到demo根目录,重新运行

$ docker-compose up

这时候发现nginx可以正常部署了,但是问题又来了,抛出了数据库连接异常,这很正常,因为我们数据库都没有创建啊。demo.sql已经一起放在git项目文件里面了。用可视化的数据库管理工具连接并运行demo.sql即可以生成数据库。这边就不具体操作了,有问题的小白可以评论问。
倒入数据库后,用docker-compose down删除容器,再重新部署安装。
特别说明
docker-compose up属于前置安装运行,就是log都会直接在当前显示,那你就没法再操作其他命令的。所以我们可以采用后台安装。

$ docker-compose up -d

在这里插入图片描述

好了,前后端的项目算是安装好了。以为停止和启动项目只要docker-compose updocker-compose down,就是这么简单快捷。

我们在浏览器输入地址:http://ip:8082

显示如下:
在这里插入图片描述

git前端地址:https://gitee.com/stonezry/Vue-Admin-Demo

git接口地址:https://gitee.com/stonezry/Springboot-Admin-Demo

欢迎关注本人公众号和小程序,谢谢
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/stonezry/article/details/106660755
今日推荐