centos7使用docker-compose部署项目

目录

1、多容器运行环境配置(docker-compose.yml)

2、创建项目Dockerfile文件(启动遇到找不到类问题,原因是模块包版本错误)

3、创建挂载目录

4、配置nginx.conf

5、通过docker-compose.yml脚本启动

6、acme操作

7、相关操作命令

8、验证结果

9、注意事项


1、多容器运行环境配置(docker-compose.yml)
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - test-net
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "./myredis/redis:/usr/local/etc/redis"
      - "./myredis/redis/data:/usr/local/etc/redis/data"
      - "./myredis/data:/data"
    networks:
      - test-net
  acme-sh:  
	image: neilpang/acme.sh  
	container_name: acme.sh  
	command: daemon  
	environment:  
	  - Ali_Key=LTAI5xxxxq5fMExxxxpc2  
	  - Ali_Secret=Q3xxxxx7Bd1XzxxxxXPpitQa  
	volumes:  
	  - "./nginx/certs:/acme.sh"  
	  - "/var/run/docker.sock:/var/run/docker.sock"  
	network_mode: host
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
      - "8090:8090"
      - "8091:8091"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
      - "./nginx/certs:/etc/nginx/certs"  
	  - "./nginx/logs:/var/log/nginx"
    networks:
      - test-net
    depends_on:  
	  - acme-sh
  lifecolor:  
	build:  
	  context: .  
	  dockerfile: Dockerfile  
	container_name: lifecolor  
	ports:  
	  - "8080:8080"  
	networks:  
	  - test-net  
	depends_on:  
	  - mysql  
	  - redis
networks:
  test-net:
    name: test-net
2、创建项目Dockerfile文件(启动遇到找不到类问题,原因是模块包版本错误)
FROM openjdk:17
WORKDIR /
COPY ./lifecolor-web.jar lifecolor-web.jar
CMD ["java", "-jar", "lifecolor-web.jar"]
3、创建挂载目录
mkdir -p /data/nginx
cd /data/nginx
touch nginx.conf # 该文件必须先创建
4、配置nginx.conf
  • 未安装acme适用: 无ssl证书模版
worker_processes  1;

pid /run/nginx.pid;

events {
    worker_connections  1024;
}
 
http {
    include       mime.types;
    default_type  application/json;
 
    sendfile        on;
    
    keepalive_timeout  65;
 
    server {
        listen            80;
		listen            [::]:80;
		server_name       www.ahuaya.com;

        # 前端静态资源
        location / {
            root   /usr/share/nginx/html/lifecolor;
            try_files $uri $uri/ /index.html;# 不加刷新会404
            index  index.html index.htm;
        }

		# 转发后端
		location ^~/prod-api/ {
	 	    proxy_pass http://lifecolor:8080/;
		}
    }
}
  • 安装acme适用: 有ssl证书模版
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
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;

	server {
	        listen  80;
	        listen  [::]:80;
	        server_name  www.xxx.com;
	        rewrite ^(.*) https://$server_name$1 permanent;
	}
	
	server {
	    listen  443 ssl;
	    server_name  xxx.com;
	
	    # 注意证书文件名字和位置,是从/etc/nginx/下开始算起的
	    ssl_certificate        /etc/nginx/certs/${server_name}/fullchain.cer;
        ssl_certificate_key    /etc/nginx/certs/${server_name}/${server_name}.key;
	    ssl_session_cache    shared:SSL:1m;
	    ssl_session_timeout  5m;
	
	    ssl_ciphers  HIGH:!aNULL:!MD5;
	    ssl_prefer_server_ciphers  on;
	
	    location / {
	        proxy_set_header   X-Real-IP         $remote_addr;
	        proxy_set_header   Host              $http_host;
	        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
	        root   /usr/share/nginx/html/lifecolor;
	        try_files $uri $uri/ /index.html;# 不加刷新会404
	        index  index.html index.htm;
	    }

		location ^~/prod-api/ {
		 	proxy_pass http://lifecolor:8080/;
		}
	
	    error_page   500 502 503 504  /50x.html;
	    location = /50x.html {
	        root   /usr/share/nginx/html;
	    }
	}
}
5、通过docker-compose.yml脚本启动
# 将docker-compose.yml文件上传到data目录后打开命令窗口
cd /data
docker compose -f ./docker-compose.yml up -d # 后台运行多个容器
6、acme操作
## 注册证书服务商账号
docker exec acme.sh --register-account -m flxxxx5@163.com

## 申请www.ahuaya.com证书
docker exec acme.sh acme.sh --issue --dns dns_ali -d xxxx.com -d *.xxxx.com --force --dnssleep

# 重启nginx
docker compose -f ./env-compose.yml restart nginx

# 执行命令
crontab -e

# 每天凌晨12点执行任务续签
0 0 * * * docker exec acme.sh --cron
7、相关操作命令
docker ps # 列出运行中容器
docker ps -a # 查看所有容器
docker inspect nginx # 查看容器详细信息
docker exec -it nginx bash # 进入容器
exit # 退出容器

docker rm -fv mysql redis # 删除容器及创建的匿名数据卷
docker images # 列出镜像
docker rmi -f mysql redis nginx # 删除镜像

docker compose down # 停止并删除多个容器
docker compose exec mysql bash # 进入容器
8、验证结果
# 访问地址成功则表示启动成功
http://www.xxxx.com
http://8.xx.x.24:80
9、注意事项
  • 挂载的nginx.conf必须先创建文件,否则docker compose启动报错

  • 服务器要开放80端口,否则访问报错

  • 域名要配置解析到服务器,否则访问报错

  • acme的environment配置不能加引号,加了生成ssl证书报错

  • centOs内核版本过低可能会导致nginx容器映射问题,具体表现为在容器内正常,容器外不能访问

# 容器内获取nginx页面正常
docker exec -it nginx bash
curl http://localhost:80 
exit;

# 容器外获取报错
curl http://localhost:80 

# 解决方案:升级内核
https://www.cnblogs.com/xzkzzz/p/9627658.html
shutdown -r -t 3 # 3秒后重启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值