1. 程式人生 > >[小白學習]Docker入門(二)-Nginx配置Https

[小白學習]Docker入門(二)-Nginx配置Https

請這一篇前請先看完 《[小白學習]Docker入門》連結地址: https://blog.csdn.net/c364902709/article/details/80924690

一、啟動nginx
啟動nginx: docker run -d -p 81:80 nginx
檢視容器id: docker container list
進入nginx docker的shell:  docker container exec -it 容器id /bin/bash
停止容器: docker stop 容器id

二、Nginx 映象的配置檔案位置(在Docker中也是這個位置)
日誌檔案位置:/var/log/nginx
配置檔案位置: /etc/nginx
資源存放的位置: /usr/share/nginx/html
ssl證書存放位置: /ssl/
三、nginx docker 與本地配置檔案對映
拷貝容器內的配置檔案到本地:
docker cp 容器id:/etc/nginx/nginx.conf /home/tom/nginx/etc/nginx.conf

將Nginx映象和我們本機的目錄進行對映,方便我們修改檔案:
docker run -d -p 81:80  -v /home/tom/nginx/log/:/var/log/nginx  -v /home/tom/nginx/etc/nginx.conf:/etc/nginx/nginx.conf  -v /home/tom/nginx/html/:/usr/share/nginx/html   -v /home/tom/nginx/ssl:/ssl/ nginx

修改本機配置檔案後,重啟nginx Docker(目前我只知道這個)
docker restart 容器id

四、docker nginx配置https
我這邊只有一臺騰迅雲機器,開啟https時,有一些問題進行記錄。

1. 在宿主機器中配置ssl證書
將ssl證書放在宿主機的/home/tom/nginx/ssl目錄下

2. 在nginx的相關配置檔案
    server {
      listen 443 ssl;
      server_name www.mycoin.work;
      root html;
      index index.html index.htm;
      ssl_certificate  /ssl/1537168711434.pem;
      ssl_certificate_key  /ssl/1537168711434.key;
      ssl_session_timeout 5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;
      location / {
          root html;
          index index.html index.htm;
      }
    }

3. 啟動nginx docker容器
docker run -d -p 81:80 -p 443:443  -v /home/tom/nginx/log/:/var/log/nginx  -v /home/tom/nginx/etc/nginx.conf:/etc/nginx/nginx.conf  -v /home/tom/nginx/html/:/usr/share/nginx/html   -v /home/tom/nginx/ssl:/ssl/ nginx
要注意,這邊有兩個-p,其中一個是-p 443:443。我最初沒有加這個對映,發現https一直訪問不了,原來想明白了。在nginx配置的監聽埠是docker中的,我的宿主機並未監聽443埠,導致我無論訪問多少次都不可能生效

五、埠監聽
埠監聽:是指相應埠的程序正常開啟,如果埠未被監聽,可能是應用未開啟
如何檢視當前機器哪些埠進行了監聽
1. netstat -tnlp

六、其它
Docker問題: “Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”
解決方案: service docker start


Nginx問題: ngix the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/nginx.conf:35
解決方案: 刪除掉ssl on,改為listen 443 ssl;

docker run 命令詳解
參考: http://www.runoob.com/docker/docker-run-command.html

其它參考:
https://www.cnblogs.com/roverliang/p/8431206.html
https://lvtao.net/config/docker-nginx.html