用Docker安裝nginx和vsftpd搭建文件服務器

關注我更多精彩文章第一時間推送給你

講真的我這輩子絕對不會學docker-----------------能香,哈哈!

docker在centos7的安裝方式建議看官網教程,否則docker安裝nginx極可能出錯。html

安裝docker能夠直接參照我簡書上的安裝過程 https://www.jianshu.com/p/3b28f3416ddanginx

<!--more-->docker

  • 用docker安裝Nginx的過程又學到了不少,例如複製docker容器內的文件到宿主機上等等數據庫

  • 使用nginx的很重要的一點是修改nginx.conf這個配置文件windows

  • 首先從dockerhub上拉取nginx最新的鏡像centos

    docker pull nginx
  • 先簡單的啓動一個nginx容器,爲了從容器中複製nginx.conf文件瀏覽器

    # docker啓動nginx容器,命名爲test
    docker run --name test -d nginx
  • 查看nginx容器idbash

    docker ps -a

    注意:docker啓動nginx須要兩個配置文件

    <a href="https://blog.csdn.net/weixin_42880943/article/details/100777093?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task" class="LinkCard">此處參考☛迷彩誘惑的青春</a> https://blog.csdn.net/weixin_42880943/article/details/100777093?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task服務器

    • 一個是位於容器內部的/etc/nginx/nginx.conf
    • 另外一個是位於容器內部的/etc/nginx/conf.d/default.conf
    • default.conf配置的是server { } 的內容

    因此在這裏咱們須要把這兩個配置文件複製到宿主機用於掛載

  • 建立目錄用於存放nginx.conf 和 default.conf網絡

    # -p建立多級目錄
    mkdir /usr/docker/nginx -p
    mkdir /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鏡像

image-20200402213717324

  • 開啓防火牆相關端口
#開啓宿主機防火牆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中了

image-20200402204959612

image-20200402205847973

到這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 "myuser\n5678" >> /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

image-20200402211508955

  • 用nginx是方便咱們使用http協議訪問靜態資源服務器

  • 其實只須要安裝vsftpd就能ftp協議上傳圖片了,瀏覽器訪問ftp://192.168.16.128,填寫咱們以前設置的用戶名root 密碼5678

image-20200402211957464

相關文章
相關標籤/搜索