首先進入宿主機終端命令行 啓動docker
service docker start
查看已安裝docker鏡像列表
docker images
php
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 -a
nginx
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/nginx
bash
exit
退出nginx容器回到宿主機
下面在宿主機上建掛載使用的文件夾
mkdir -p /nginx/{conf,conf.d,html,logs}
建這4個文件夾都知道是幹啥用的了吧, 沒權限記住前面加sudo
app
下面就開始往對應的路徑扔配置文件或者資源文件了,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.conf
ui
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 哪有有不足請多指教,主要是給本身留個記錄