利用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埠.