docker安裝mysql,配置SSL
nginx安裝
下載映象並測試
1.docker pull nginx
2.docker images nginx 檢視我們拉取到本地的nginx映象IMAGE ID
3.首先測試下nginx映象是否可用,使用docker run -d --name mynginx -p 80:80 imgae ID建立並啟動nginx容器
將nginx容器內部配置檔案掛載到主機
將nginx容器內部配置檔案掛載到主機,之後就可以在主機對應目錄修改即可。適合頻繁修改,複雜使用的情況
1.在主機/mnt目錄下執行 mkdir -p ./nginx/{conf,html,logs}建立掛載目錄
2.將容器內的nginx.conf與default.conf檔案分別拷貝到主機/mnt/nginx和/mnt/nginx/conf下,分別執行
docker cp ef:/etc/nginx/nginx.conf
dokcer cp ef:/etc/nginx/conf.d/default.conf ./conf/
cp 命令代表複製
ef是我們nginx容器的ID,/etc/nginx/nginx.conf 是容器內部nginx.conf 路徑
3.執行docker stop 容器ID 命令停止剛剛建立的nginx容器,b3是容器Id,然後執行docker rm 容器ID 移除容器。
4.執行下方命令重建容器
docker run -d --name mynginx -p 80:80 -p 443:443 -v /mnt/nginx/nginx.conf:/etc/nginx/nginx.conf -v /mnt/nginx/logs:/var/log/nginx -v /mnt/nginx/html:/usr/share/nginx/html -v /mnt/nginx/conf:/etc/nginx/conf.d -v /mnt/nginx/ssl:/ssl --privileged=true 容器ID
-v 掛載目錄,格式 -v: 表示將主機目錄與容器目錄之間進行共享,
--privileged=true 容器內部對掛載的目錄擁有讀寫等特權
5.這時我們在容器的掛載 /mnt/nginx/html目錄下建立index.html,內容隨便寫上hello docker nginx,再次訪問主機IP
到這裡就大功告成了!
需要注意的:我們在掛載目錄的操作,都實際會對映到容器內部,寫配置檔案的時候一定要注意路徑問題!!(我在配置SSL的時候浪費了很長的時間不清楚最後是什麼原因,在配置SSL檔案路徑的時候一定要寫對應的docker容器內部地址,否則會找不到。)
貼一個nginx.conf
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; gzip on; client_max_body_size 10m; map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream tomcat1 { server 172.17.0.1:8080; } server { #SSL 訪問埠號為 443 listen 443 ssl; #填寫繫結證書的域名 server_name www.xxx.com; #證書檔名稱 ssl_certificate /ssl/xxx.crt; #私鑰檔名稱 ssl_certificate_key /ssl/xxx.key; #ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; #keepalive_timeout 70; #請按照以下協議配置 ssl_protocols TLSv1.2 TLSv1.3; #請按照以下套件配置,配置加密套件,寫法遵循 openssl 標準。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location /html{ #alias配置靜態vue專案的時候用,之前用了root一直沒法訪問浪費我1天時間才找到問題所在 #root和alias的區別 #root會在目錄後加上location後的路徑,在本示例就是/usr/share/nginx/html/dist/html才能正確訪問到 #aliac就是絕對地址,在本示例把前端放 /usr/share/nginx/html/dist 下就可以 alias /usr/share/nginx/html/dist; index index.html; } location / { proxy_ssl_server_name on; #網站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。 #root html; proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://tomcat1; #index index.html index.htm; } } server{ listen 80; server_name www.xxx.com; location / { proxy_read_timeout 360s; proxy_pass http://tomcat1; proxy_set_header Host $host:$server_port; proxy_http_version 1.1; #websocket用 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } }