創建Nginx容器
- 下載nginx鏡像
docker pull nginx
- 創建nginx容器
docker run --name nginxweb -p 8080:80 -d nginx
- 這樣一來nginx就創建好了,直接訪問ip:8080就可以看到nginx安裝好的頁面
4、改變配置實現更多功能,這種情況下得進入容器更改配置信息
docker exec -it nginxweb /bin/bash
配置文件在容器內/etc/nginx/路徑下的nginx.conf和conf.d文件夾內的default.conf文件
但是默認使用vi或vim去修改是沒有用的,因為沒得,得去安裝,這種情況下就很麻煩,更常用的是做個數據卷,將容器內文件映射到容器外,這樣改變主機文件就改變了容器內文件,方便些。
如果不嫌麻煩在容器內改完配置文件后,重啟容器
docker restart nginxweb
這樣不是很方便,先刪除容器。
docker stop nginxweb
docker rm nginxweb
掛載配置文件
在主機上設置配置文件,以方便主機直接修改nginx容器內的配置信息。
建立映射文件夾
- 先建立幾個文件夾用於存放數據卷的
mkdir -p /docker/nginx
mkdir -p /docker/nginx/conf
mkdir -p /docker/nginx/www
mkdir -p /docker/nginx/logs
這幾個文件對應着nginx內的配置文件,如此下來,重新創建nginx容器並指定數據卷,這樣當我們修改本地文件時候,也就是nginx容器內部文件修改了。
2. 創建一個臨時容器用來復制配置信息
docker run --name nginxweb -p 8080:80 -d nginx
- 先將臨時容器內已有的配置信息拷貝到主機文件中
docker cp nginxweb:/etc/nginx/nginx.conf /docker/nginx
docker cp nginxweb:/etc/nginx/conf.d /docker/nginx/conf
docker cp nginxweb:/usr/share/nginx/html /docker/nginx/www
docker cp nginxweb:/var/log/nginx /docker/nginx/logs
詳細描述
- 第一步,將容器內etc/nginx/nginx.conf文件拷貝到主機docker/nginx文件夾下
- 第二步,將容器內etc/nginx/conf.d文件夾拷貝到主機docker/nginx/conf文件夾內,這樣主機conf文件夾內有文件夾conf.d,這個文件夾內有default.d文件
- 第三步,將容器內usr/share/nginx/html文件夾拷貝到主機docker/nginx/www文件夾內,這樣主機www文件夾內有文件夾html,這個文件夾內有index.html和50x.html文件
- 第四步,將容器內var/log/nginx文件夾拷貝到主機docker/nginx/logs文件夾內,這樣主機logs文件夾內有文件夾nginx,這個文件夾內有access.log和error.log文件
- 刪除臨時容器
docker stop nginxweb
docker rm nginxweb
再次創建nginx容器
創建帶數據卷映射的容器
docker run \
--name nginxweb \
-p 8080:80 \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/www:/usr/share/nginx \
-v /docker/nginx/logs:/var/log \
-d \
nginx
命令解釋:
- --name 容器名字
- -p 映射端口,將宿主機的8080端口和容器的80端口進行綁定
- -v 掛載文件
- 第一個,將主機的nginx.conf映射到容器內的nginx.conf文件,也就是將這個nginx.conf文件拷貝到容器內nginx文件夾下的nginx.conf文件
- 第二個,將主機的conf.d文件夾映射到容器內conf.d文件夾,也就是將conf.d文件夾內的defaut.d文件拷貝到容器內conf.d文件夾內
- 第三個,將主機的www文件夾映射到容器內nginx文件夾下,也就是將www文件夾內的html文件夾拷貝到容器內nginx文件夾內
- 第四個,將主機的logs文件夾映射到容器內log文件夾下,也就是將logs文件夾內的nginx文件夾拷貝到容器內log文件夾內
- -d 后台進程
- 最后一個是鏡像名
這樣一來,再次訪問ip:8080又可以看到Nginx安裝成功的頁面了。
更改配置實現功能
反向代理
修改/docker/nginx/nginx.conf文件,增加反向代理設置,此處我下載了一個winscp工具以方便修改文件。從第31行開始,增加反向代理配置。
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 {
location / {
proxy_pass http://119.3.138.127:80/;
proxy_redirect default;
}
}
}
如此一來保存后重新啟動容器
docker restart nginxweb
再次訪問,發現並不能直接請求到期望的代理地址,而是仍然看到歡迎頁。
因為/docker nginx/conf/conf.d中的default.conf文件夾內有這個location /配置,在nginx.conf中通過include使用了這個文件,優先匹配。
- 注釋掉Include后,不走歡迎頁面,直接會請求到代理地址
- 或是直接刪除默認文件conf.d文件夾內的default.conf也行,這樣就會直接使用nginx.conf中的配置。
這樣一來,便方便的將請求轉發了,還有很多參數的使用此處不詳細說明。
2021-09-19,望技術有成后能回來看見自己的腳步