1. 程式人生 > >利用docker部署nginx

利用docker部署nginx

用docker部署mysql,mongodb,redis等

建議移步 菜鳥教程

我感覺學習docker,菜鳥教程也會介紹的很詳細,我下面重點介紹一下nginx,因為你學習完以後會發現,所有的部署你不用懂,安裝菜鳥教程上的命令都能啟動,不要太簡單,但是到了nginx就不能直接去用了,因為會有些小問題.

第一步,肯定是先下載映象對吧

docker pull nginx

第二步,檢視映象

docker images nginx

說明也沒問題

第三步,啟動容器

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx  

這時候就會報錯了


[[email protected] overlay2]# docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx  
13bdd883e2d3854231ea92aee362592d2b3cfefbd5b71b7001a4289ddeb57470
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/var/lib/docker/overlay2/conf/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged\\\" at \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\""
: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

這是為什麼呢,我們來分析一下

  • -p 80:80:將容器的80埠對映到主機的80埠

  • --name mynginx:將容器命名為mynginx

  • -v $PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www

  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf

  • -v $PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs

主要是因為conf檔案的問題,ok,我們先刪除該容器,避免重名

 sudo docker rm myginx

再來一次,先不掛載nginx.con配置檔案

docker run -p 80:80 --name mynginx -v $PWD/www:/www  -v $PWD/logs:/wwwlogs  -d nginx

然後使用如下命令進入互動式終端:

sudo docker exec -it mynginx /bin/bash

然後使用如下命令找到nginx.conf 配置檔案 

[email protected]:/# cd /etc/nginx/ 
[email protected]:/etc/nginx# ls
conf.d    fastcgi_params    koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params    uwsgi_params  win-utf

最後使用exit命令退出互動式終端,使用如下命令進行配置檔案的拷貝,將其貼上到/root/conf/nginx.con.

注意:1)最後加/就是資料夾,不加/就是檔案如下命令所示,前面的nginx.conf 和後面的nginx.conf 都是檔案,所以沒有以/結尾。

   2 ) ab77dcbfcb81與上面的[email protected]要對應

docker cp ab77dcbfcb81:/etc/nginx/nginx.conf $PWD/conf/nginx.conf #使用id或names【mynginx】

此時已經成功配置使用ip+80埠即可訪問。但是在修改/root/conf/nginx.conf檔案實現負載均衡的時候不起作用。你就發現還沒完成任務需要使用docker rm mynginx重新刪除nginx容器,再次使用第一次使用的命令重新新建nginx容器:

ocker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx

這時候就可以了訪問了.

如果想配置其他埠(下面是我自己的,將容器的80埠對映到主機的8081埠,當前使用者下的demo資料夾,docker名為mynginx2)

sudo docker run -p 8081:80 --name mynginx2 -v $PWD/www:/www  -v $PWD/demo:/usr/share/nginx/html  -d nginx

需要注意的是,使用其他埠時,要關閉80埠的容器,80代表所有的,要避免產生衝突,而且如果不能啟動,請在阿里雲伺服器的管理控制檯開啟相關的tcp埠.