Docker 部署Nginx 而且掛載默認請求路徑和配置文件

首先進入宿主機終端命令行 啓動docker
service docker start
查看已安裝docker鏡像列表
docker imagesphp


若是沒有安裝就安裝下
docker pull nginx
而後得啓動這個鏡像 正常啓動是下面的命令,可是先彆着急敲
docker run -d -p 80:80 nginx 簡單解釋下這裏面的值都表明啥意思
-d 是讓這個nginx容器服務後臺運行
-p 是指定端口 後面跟的80:80 前面的80是宿主機的端口 後面的是容器裏nginx的端口, 好比改爲 8080:80 那麼咱們在外部訪問這個nginx服務 地址應該是 xx.xx.xx.xx:8080 就能夠看到nginx的歡迎頁了
nginx 固然是啓動的鏡像名字啦

可是啊,這麼寫很差,若是你像改這個nginx的配置文件,或者改個靜態頁咋改啊,咱們獲得這個容器的內部去改啊, 簡單說下如何進入這個容器的內部html

先獲取到這個nginx容器的id , 查詢全部容器 不管是運行的仍是exit的,其實在不在執行你都能看出來了,由於上面有exit標識着呢
docker ps -anginx

你看,映射的端口號都給你了,我這裏面沒有其餘被關閉的容器服務,我有強迫症,都清理了,你也有的話執行這個命令 xxxxx是這個容器的id 圖裏有
docker rm xxxxx

扯這麼多沒用的,如今開始說重點的,若是去改這個nginx容器裏的配置文件,日誌文件的具體路徑和內容呢,這就要使用到掛載,我理解的掛載的意思就是在使用這個nginx容器的時候,不去使用容器內的配置和文件路徑,使用宿主機上的資源文件,對了 我還沒說怎麼去容器內,執行這個命令,對了 你要是否是root用戶前面加 sudo
docker exec -it xxxx bash
xxxx是容器iddocker

是否是有點眼熟 其實這個鏡像本身的世界,不受外界打擾,可是功能指定沒有宿主機全啊,好比你想在裏面使用vim命令....vim

咱們接着回來談掛載,既然你想掛載,你得知道你鏡像裏面nginx的配置文件啥的都在哪吧,而後掛載到你宿主機的指定位置啊,因此咱們先看看他們都在哪呢
鏡像中nginx.conf配置文件路徑
/etc/nginx/nginx.conf
default.conf配置文件的路徑
/etc/nginx/conf.d/default.conf
默認首頁文件夾html路徑
/usr/share/nginx/html
日誌文件路徑
/var/log/nginxbash

來個圖驗證一下, 而後輸入 exit 退出nginx容器回到宿主機

下面在宿主機上建掛載使用的文件夾
mkdir -p /nginx/{conf,conf.d,html,logs} 建這4個文件夾都知道是幹啥用的了吧, 沒權限記住前面加sudoapp

下面就開始往對應的路徑扔配置文件或者資源文件了,logs裏不用,掛載好自動往裏輸出 error.log 和 access.log
html裏你放首頁須要展現的.html文件,而後你在訪問,你加進來的html就把默認的nginx歡迎界面替換掉了...如今整沒有用啊,你還沒掛載呢,等會的。tcp

conf裏放 nginx.conf 配置文件, 這個文件的內容要從鏡像裏的複製出來哦,咱們儘可能保持和鏡像裏面的一致
下面咱們再來講說怎麼將剛剛在容器裏看到的配置文件copy到宿主機裏面
前面是容器的路徑 後面是宿主機的路徑 docker cp 容器id:/etc/nginx/nginx.conf /nginx/conf/nginx.conf工具

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush on;

    keepalive_timeout  65;

    #gzip on;

    include /etc/nginx/conf.d/*.conf;
}

複製代碼

一樣在把conf.d 下的default.conf 複製過來
docker cp 容器id:/etc/nginx/conf.d/default.conf /nginx/conf.d/default.confui

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log /var/log/nginx/host.access.log main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    # root html;
    # fastcgi_pass 127.0.0.1:9000;
    # fastcgi_index index.php;
    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    # include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    # deny all;
    #}
}


複製代碼

而後,咱們本身寫一個簡單的html頁面,給他隨意命個名,我就不改了,叫index.html

而後把這個文件丟到 宿主機的 /nginx/html/ 路徑下
我是用FileZilla工具傳輸文件到宿主機的

最後到了最關鍵的環節了

開始掛載了 咱們先把以前起的nginx容器服務關閉了 我直接一點, docker rm 容器id OMG 咱們得先關閉再刪除, docker stop 容器id

都弄好了以後再次啓動 此次和上次不一樣之處就是須要用到 -v 進行掛載了

docker run --name mynginx -d -p 80:80 -v /nginx/html:/usr/share/nginx/html -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /nginx/logs:/var/log/nginx nginx
複製代碼

前面是宿主機路徑 後面的nginx容器路徑

我也是初學Java和Docker 哪有有不足請多指教,主要是給本身留個記錄

相關文章
相關標籤/搜索