首先,系統(3.8以上核心的linux)中安裝好 Docker 這個運用程式。由于網絡原因,我們下載下傳一個Docker官方的鏡像需要很長的時間,甚至下載下傳失敗。為此,阿裡雲容器鏡像服務提供了官方的鏡像站點,進而加速官方鏡像的下載下傳速度。
[ 不會的可以參考我之前的文章:Docker <一> 架構簡介與Linux上安裝 https://my.oschina.net/u/3375733/blog/1582281]。
一、Docker pull 安裝 Nginx
1、檢視docker倉庫中的 nginx 指令
# 使用 docker search 指令搜尋存放在 Docker Hub 中的鏡像
docker search nginx
以看到下圖所示的資訊:
2、為標明需要pull到系統中的官方 Nginx 鏡像
# docker pull nginx -------- nginx 為標明需要pull到系統中的官方 nginx 鏡像
docker pull nginx
整個pull過程需要花費一些時間,耐心等待。
若見下圖證明pull成功。
二、檢視并啟動Docker 鏡像
1、列出已下載下傳的鏡像
# 使用 docker images 指令即可列出已下載下傳的鏡像
docker images
執行指令後,可看到類似于如下的表格:
2、列出運作中的容器
# 使用 docker ps 指令即可列出運作中的容器
docker ps
# 使用 docker ps -a 指令即可列出所有(包括已停止的)的容器
docker ps -a
執行指令後,可看到類似于如下的表格:
可以發現,目前沒有運作的 nginx 容器。故,接下來我們建立并啟動一個 nginx 容器。
三、啟動容器,部署nginx并修改配置檔案
1、啟動跑個靜态網頁,測試下 nginx 容器
# 啟動一個名為nginx81(名字自己根據需求起名字,一般見名知意即可) 的容器
docker run --name nginx81 -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html nginx
# 預設容器對這個目錄有可讀寫權限,可以通過指定ro,将權限改為隻讀(readonly)
# docker run --name my-nginx -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html:ro -d nginx
通路 http://Docker主控端IP:指定的Docker主控端端口 ,可以通路說明
2、部署nginx 項目并修改配置檔案
一般情況下docker啟動時進行配置,隻要把配置檔案的目錄挂載出來就可以,但是nginx卻是先加載一個主配置檔案nginx.conf,在nginx.conf裡再加載conf.d目錄下的子配置檔案(一般最少一個default.conf檔案)。
# 普通的挂載方式
docker run --name mynginx2 --mount source=/var/www,target==/usr/share/nginx/html,readonly \
--mount source=/var/nginx/conf,target=/etc/nginx/conf,readonly -p 80:80 -d nginx
docker 啟動 nginx 加載自定義配置:
# 1. 第一個“-v”,是項目位置,把項目放到挂載到的目錄下即可
# 2. 第二個“-v”,是挂載的主配置檔案"nginx.conf",注意"nginx.conf"檔案内有一行
# "include /etc/nginx/conf.d/*.conf;" ,
# 這個include指向了子配置檔案的路徑,此處注意include後所跟的路徑一定不能出錯
# 3. 第三個“-v”,把docker内子配置檔案的路徑也挂載了出來,注意要與 “2.” 中include指向路徑一緻
# 4. nginx.conf是挂載了一個檔案(docker是不推薦這樣用的),conf.d挂載的是一個目錄
docker run \
--name nginx81 \
-d -p 81:80 \
-v /usr/docker/nginx81/html:/usr/share/nginx/html \
-v /etc/docker/nginx81/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /etc/docker/nginx81/conf.d:/etc/nginx/conf.d \
nginx
準備挂載的 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;
}
準備挂載的 default.conf :
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;
}
location /api{
proxy_pass http://192.168.1.1:9999/api;
# access_log "logs/test.log";
}
}
上述的依然不夠靈活,可以直接進入容器操作:
1) 啟動
# 啟動一個名 nginx81 的 nginx 容器
docker run --name nginx81 -d -p 81:80 -v \
/usr/docker/nginx81/html/:/usr/share/nginx/html:ro -d nginx
# 添加日志記錄啟動
docker run --name nginx81 -d -p 81:80 -v /usr/docker/nginx81/html/:/usr/share/nginx/html:ro \
-v /logs:/var/log/nginx -d nginx
2)拷貝容器内的配置檔案到本地,進行個性化配置等操作
docker cp nginx:/etc/nginx/nginx.conf /usr/docker/nginx81/nginx.conf
3)重新指定配置檔案啟動
docker run --name nginx81 -d -p 81:80 -v /usr/docker/nginx81/html:/usr/share/nginx/html:ro
-v $PWD/logs:/var/log/nginx -v /usr/docker/nginx81/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
4)進入容器
sudo docker exec -it d3a86da6fad1 /bin/bash
# 退出容器:Ctrl+P+Q
四、通過 Dockerfile 建構 Nginx
相關連結
· docker 官網 Nginx 安裝文檔: https://docs.docker.com/samples/library/nginx/#hosting-some-simple-static-content
· Nginx 官網文檔:https://www.nginx.com/blog/deploying-nginx-nginx-plus-docker/
本文為部落客原創文章,轉載請注明出處!
https://my.oschina.net/u/3375733/blog/