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: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- test-netredis:image: rediscontainer_name: redisports:- "6379:6379"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456volumes:- "./myredis/redis:/usr/local/etc/redis"- "./myredis/redis/data:/usr/local/etc/redis/data"- "./myredis/data:/data"networks:- test-netacme-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: hostnginx:image: nginxcontainer_name: nginxports:- "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-netdepends_on: - acme-shlifecolor: 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;# 不加刷新会404index 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;# 不加刷新会404index 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秒后重启