1. 程式人生 > 其它 >docker安裝mysql,配置SSL

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";
		}
	}

}