docker在centos7的安裝方式建議看官網教程,不然docker安裝nginx很可能出錯。
安裝docker可以直接參照我簡書上的安裝過程
- 用docker安裝Nginx的過程又學到了很多,例如復制docker容器內的文件到宿主機上等等
- 使用nginx的很重要的一點是修改nginx.conf這個配置文件
- 首先從dockerhub上拉取nginx最新的鏡像docker pull nginx
- 先簡單的啟動一個nginx容器,為了從容器中復制nginx.conf文件# docker啟動nginx容器,命名為test
docker run –name test -d nginx - 查看nginx容器iddocker ps -a注意:docker啟動nginx需要兩個配置文件此處參考?迷彩誘惑的青春一個是位于容器內部的/etc/nginx/nginx.conf另一個是位于容器內部的/etc/nginx/conf.d/default.confdefault.conf配置的是server { }的內容所以在這里我們需要把這兩個配置文件復制到宿主機用于掛載
- 創建目錄用于存放nginx.conf 和 default.conf# -p創建多級目錄
mkdir /usr/docker/nginx -pmkdir /usr/docker/nginx/conf.d/ -p - 從nginx容器中復制出nginx文件到剛才新建的目錄# docker復制容器id為e9bf057b53bb的/etc/nginx/nginx.conf路徑的nginx.conf文件到容器外宿主機的/docker/nginx/目錄
docker cp e9bf057b53bb:/etc/nginx/nginx.conf /usr/docker/nginx/# 復制default.conf,含義參考上條注釋docker cp e9bf057b53bb:/etc/nginx/conf.d/default.conf /usr/docker/nginx/conf.d/ - 復制出來之后刪除剛才臨時啟動的test的容器#停止名為test的容器
docker stop test#刪除名為test的容器docker rm test - 重新啟動一個完整的nginx容器docker run -d -p 80:80
–name nginx –net host -v /usr/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/docker/nginx/html:/usr/share/nginx/html -v /usr/docker/vsftpd/root:/mnt/data -v /usr/docker/nginx/logs:/var/log/nginx –privileged=true –restart=always nginx
下面的配置解釋很重要****結合我default.conf的配置看
解釋:
-p 宿主機的80端口映射到容器的80端口
–name nginx 容器命名為nginx
–net host 容器和宿主機公用網絡
-v 映射宿主機和容器內的路徑,首先是把兩個配置文件nginx.conf和default.conf從容器目錄映射到宿主機的/usr/docker/nginx下的相應目錄中,之后只要改宿主機的配置就相當于改了容器中的配置文件。
其次看下面圖片中的配置全是去找的容器相應位置的文件,沒錯,就是找容器相應位置,但是這些位置我也做了映射,例如把nginx的主頁位置映射到了/usr/docker/nginx/html最重要的是把靜態資源的位置映射到了宿主機的vsftpd靜態資源服務器/usr/docker/vsftpd/root目錄下,結合default.conf中的配置,就能通過nginx訪問vsftpd下的靜態圖片文件了。
-v 還做了日志文件目錄的映射
–privileged=true 給容器內root權限
–restart=always 隨docker自啟動
啟動nginx:latest鏡像


- 開啟防火墻相關端口
#開啟宿主機防火墻80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重啟防火墻
firewall-cmd --reload
#查看防火墻已經啟動的端口
firewall-cmd --zone=public --list-ports
- 這時候打開瀏覽器訪問宿主機ip我這里是192.168.137.100就應該訪問調到nginx歡迎頁,這里會報錯403因為/usr/docker/nginx/html路徑下并沒有index.html這個歡迎頁
- 額,但是準確的說nginx已經作為docker容器啟動了# 簡單的自己寫一個歡迎頁吧,最起碼訪問宿主機ip我這是192.168.137.100要看到效果啊 cd /usr/docker/nginx/html # 添加一個index.html文件寫入hello nginx echo “hello nginx” > index.html # 容器中的nginx熱更新 docker exec -it nginx nginx -s reload # 不管用就直接重啟ngixn容器 docker restart nginx # 強迫癥非要nginx首頁如我的話,我直接拷貝windows中nginx的index頁到/usr/docker/nginx/html中了




到這nginx容器啟動好了,下面啟動vsftpd容器
#拉取vsftpd鏡像
docker pull fauria/vsftpd
#啟動容器
docker run -d -v /usr/docker/vsftpd:/home/vsftpd
-p 20:20 -p 21:21 -p 21100-21110:21100-21110
-e FTP_USER=root -e FTP_PASS=123456
-e PASV_ADDRESS=192.168.137.100 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110
--name vsftpd --privileged=true --restart=always fauria/vsftpd
#開啟20防火墻端口
firewall-cmd --zone=public --add-port=20/tcp --permanent
#開啟21防火墻端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
#開啟21100-21110防火墻端口
firewall-cmd --zone=public --add-port=21100-21110/tcp --permanent
#重啟防火墻
firewall-cmd --reload
#查看防火墻已經啟動的端口
firewall-cmd --zone=public --list-ports
docker啟動命令解釋:
-v掛載目錄,相當于把容器內目錄掛載到本地
-p 端口映射本地20容器20 ….等等
-e 分別設置用戶名、密碼、宿主機地址、最小最大端口
–name 命名容器為vsftpd
–privileged=true 給容器root權限
–restart=always 隨docker開啟而自啟動
fauria/vsftpd 運行的run的這個名字的鏡像
- 打開瀏覽器訪問ftp://192.168.137.100
- 至此文件服務器搭建成功
- 將新的FTP用戶添加到現有容器中# 進入容器內部 docker exec -it vsftpd bash # 新建myuser用戶的文件夾 mkdir /home/vsftpd/myuser # 添加新用戶myuser換行密碼5678寫入文件中 echo -e “myusern5678” >> /etc/vsftpd/virtual_users.txt # 密碼寫入數據庫 /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db # 退出容器內部 exit # 重啟vsftpd docker restart vsftpd
- 通過nginx訪問到靜態資源服務器中的圖片了http://192.168.16.128/images/test.png


- 用nginx是方便我們使用http協議訪問靜態資源服務器
- 其實只需要安裝vsftpd就能ftp協議上傳圖片了,瀏覽器訪問ftp://192.168.16.128,填寫我們之前設置的用戶名root 密碼5678
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。