1.拉取 nginx镜像
docker pull nginx:1.27
查询nginx镜像包可使用,OFFICIAL-[OK],表示官方镜像
docker search nginx
2.创建nginx配置文件,无特殊要求可跳过
//创建配置文件
touch /xxx/default.conf
//编辑
vi /xxx/default.conf
i
//保存退出
esc
:wq
default.conf 内容
server {
listen 80;
# 填写绑定证书的域名
server_name 域名 www.域名;
# 把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
# 证书文件路径, 私钥文件名称 .crt和.pem都可以用
ssl_certificate /etc/nginx/cert/xxx(域名).pem;
# 私钥文件路径
ssl_certificate_key /etc/nginx/cert/(xxx)域名.key;
# 服务域名
server_name 域名 www.域名;
# 日志格式化规则
#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/host.access.log main;
# 小程序端+学生端API接口
location /wx_mini/ {
# 服务一:
proxy_pass http://服务一IP:端口/;
}
# 教师端+校管端API接口
location /pc_manager/ {
# 服务二
proxy_pass http://服务二IP:端口/;
}
# PC用户管理系统前端页面
location /manager {
# 托管前端网站一:
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /manager/index.html;
}
# 后管端API
#location /admin_sys/ {
# 服务三:
# proxy_pass http://服务三IP:端口/;
#}
# 范围大的放后面
# 访问域名直接打开的网站,这里配置服务端不分离的项目
location / {
# 根目录直接代理服务端前后不分离项目
proxy_pass http://服务四:端口/;
#proxy_redirect http://150.158.123.38:8902/ /;
#root /usr/share/nginx/html;
#index index.html index.htm;
#try_files $uri $uri/ /index.html;
}
# 状态码404 -> 指向首页
# error_page 404 /index.html
# 状态码为xxx -> 指向xxx
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
3. 创建单个容器或使用docker-compose配置nginx
1.创建单个容器
# 多行便于展示()
docker run -p 80:80 -p 443:443 \
-d --name nginx \
# nginx的根配置文件,可不挂载使用其默认的
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
# nginx自定义的配置文件,做反向代理和负载均衡时,需修改里面的default.conf文件内容
-v /data/nginx/conf.d:/etc/nginx/conf.d \
# 挂载域名证书和私钥
-v /data/nginx/cert:/etc/nginx/cert
# 静态资源目录,一般用来挂载前端打包的网站项目或静态资源
-v /data/www:/usr/share/nginx/html \
nginx:1.27
2.使用容器编排创建
version: '3'
services:
nginx: # 服务名称 建议与容器名称一致
image: nginx:1.27 # 当前数据库的版本
container_name: nginx # 容器名称
environment:
# - TZ=Asia/Shanghai # 设置容器时区 我这里通过下面挂载方式同步的宿主机时区和时间了,这里忽略
volumes:
# 静态网站
- /www/wwwroot/java_psm/nginx/www:/usr/share/nginx/html
# 日志文件
- /www/wwwroot/java_psm/nginx/log:/var/log/nginx
# 证书目录
- /www/wwwroot/java_psm/nginx/cert:/etc/nginx/cert
# 主配置
- /www/wwwroot/java_psm/nginx/nginx.conf:/etc/nginx/nginx.conf
# 自定义配置
- /www/wwwroot/java_psm/nginx/conf.d:/etc/nginx/conf.d
ports:
- "80:80"
- "443:443" # 指定宿主机端口与容器端口映射关系,宿主机:容器,宿主机ip根据使用情况进行修改
restart: always # 容器随docker启动自启
docker-compose 常用指令
docker-compose stop <容器ID/服务名> # 停止指定服务容器,不指定停止所有
docker-compose restart <容器ID/服务名> # 重启指定服务容器,不指定全部重启
docker-compose build <容器ID/服务名> # 重新构建指定容器,不指定全部重新构建
docker-compose -f docker-compose.yml up -d # -f运行指定的编排文件,不指定则默认在当前目录寻找docker-compose.yml
docker exec -it <容器名/容器ID> bash(bin/bash) 进入某个容器内部