利用docker nginx,redis,mysql部署springboot应用集群环境

以前我们部署一个集群环境,需要我们手动安装各种软件,现在有了docker,一切变得非常简单,只需要编写好docker file和docker-compose.yaml文件,然后执行docker-compose up就一切搞定了。简直是部署神器,码农福音。下面通过docker配置一套包含redis,mysql,nginx的guns代码集群环境,来说明利用docker如何部署springboot应用集群环境。

1. 首先安装docker环境,我安装的docker for windows。

2. 配置docker国内镜像地址,可以参考我的博客,Docker for window Docker加速器设置

3.准备guns jar文件。

mvn package -Dmaven.test.skip=true

4.创建docker release需要的相关文件夹,我是放在d:/docker目录下的。

d:/docker/guns/guns-admin/
d:/docker/guns/guns-admin/guns-admin
d:/docker/guns/guns-admin/logs
d:/docker/guns/guns-admin/upload
d:/docker/guns/guns-admin/nginx
d:/docker/guns/guns-admin/logs/admin1
d:/docker/guns/guns-admin/logs/admin2


5. 拷贝guns-admin-1.0.0-SNAPSHOT.jar到d:/docker/guns/guns-admin/guns-admin,并在同级目录创建Dockerfile。

#基于哪个镜像
FROM java:8

# 拷贝文件到容器,也可以直接写成ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar /app.jar
ADD guns-admin-1.0.0-SNAPSHOT.jar /app.jar

# 开放8080端口
EXPOSE 8080

# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

6. 在d:/docker/guns/guns-admin目录下创建docker-compose.yaml文件。

mysql1:
  image: mysql
  environment:
     - MYSQL_ROOT_PASSWORD=123456
  ports:
        - "3306:3306"
  expose:
         - "3306"

redis1:
  image: redis
  ports:
        - "6379:6379"
  expose:
         - "6379"

nginx1:
  image: nginx
  volumes:
         - d:/docker/guns/guns-admin/nginx/nginx.conf:/etc/nginx/nginx.conf
         - d:/docker/guns/guns-admin/logs/nginx:/var/log/nginx/
  ports:
        - "80:80"
  expose:
         - "80"
  links:
    - admin1
    - admin2

admin1:
  build: ./guns-admin
  volumes:
         - d:/docker/guns/guns-admin/upload:/upload
         - d:/docker/guns/guns-admin/logs/admin1:/logs
  ports:
    - "8081:8080" #端口映射
  expose:
    - 8081        #暴露容器端口
  links:
    - mysql1
    - redis1

admin2:
  build: ./guns-admin
  volumes:
         - d:/docker/guns/guns-admin/upload:/upload
         - d:/docker/guns/guns-admin/logs/admin2:/logs
  ports:
    - "8082:8080" #端口映射
  expose:
    - 8082        #暴露容器端口
  links:
    - mysql1
    - redis1

7. 然后在d:/docker/guns/guns-admin/nginx文件夹创建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;

	upstream mysvr {
		#weigth参数表示权值,权值越高被分配到的几率越大
		server admin1:8080  weight=5;
		server admin2:8080  weight=5;
    }
    server {
        listen       80;
        server_name  guns;

        location / {
			proxy_pass       http://mysvr;
        }
    }
}

这里我耽搁了两天才调通,遇到了下面两个坑。

  • admin1和admin2,nginx都应该通过8080端口访问,因为他们是同一个内网。
  • #include /etc/nginx/conf.d/*.conf; 这句必须注释掉,否则只有nginx的default.conf会生效,完全不会跳转。

8.在d:/docker/guns/guns-admin目录执行docker-compose up命令。

docker-compose up

9.这里可以看到应用会被启动起来,但是druid会报错,因为我们的mysql还是一片空白。通过navicat连接到mysql,然后执行guns.sql文件。不出意外数据库会被创建。

10. 暂停刚开始执行的docker-compose up命令,然后再次执行docker-compose up命令。

11. 现在就可以正常访问了。



连接redis,可以看到session已经被缓存到redis当中。


到此就完成了,所有代码可以到码云上找到,guns_master0125

猜你喜欢

转载自blog.csdn.net/jzd1997/article/details/79315919