取得映像檔
輸入docker images
查詢目前擁有的映像檔
Copy root@vm:/home/jennifer# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.5-alpine d15e7a9f900e 3 weeks ago 68.1MB
cassandra latest 604151722441 2 months ago 379MB
alpine 3.11 f70734b6a266 2 months ago 5.61MB
nginx 1.13.3-alpine ba60b24dbad5 2 years ago 15.5MB
若沒有nginx映像檔,可上DockerHub 查詢,選擇版本並docker pull nginx:[tag]
拉映像檔到自己的機器上,Docker Hub上也會有使用範例
Copy root@vm:/home/jennifer# docker pull nginx:1.18
1.18: Pulling from library/nginx
8559a31e96f4: Pull complete
9a38be3aab21: Pull complete
522e5edd83fa: Pull complete
2ccf5a90baa6: Pull complete
Digest: sha256:159aedcc6acb8147c524ec2d11f02112bc21f9e8eb33e328fb7c04b05fc44e1c
Status: Downloaded newer image for nginx:1.18
啟動容器
情境一:使用Docker Bridge Network,並設定port mapping (host 8880 port <-> 容器 80port)
Copy root@vm:/home/jennifer# docker run --name some-nginx -d -p 8880:80 nginx:1.18
輸入http://host-ip:8880
,若有出現nginx畫面代表成功
情境二:使用Docker Bridge Network,並設定port mapping,-P
表示主機的port不指定,由電腦隨機取得
Copy root@vm:/home/jennifer# docker run --name test-nginx -d -P nginx:1.18
87b059c8b554bd69796ff509a790b5f0684cf88a0ea2e22eb4ec767413fffacf
root@vm:/home/jennifer# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87b059c8b554 nginx:1.18 "nginx -g 'daemon of…" 3 seconds ago Up 2 seconds 0.0.0.0:32768->80/tcp test-nginx
經docker ps
查詢容器對應的主機port為32768輸入http://host-ip:32768
,若有出現nginx畫面代表成功
情境三:使用host網路,並volume設定檔及NFS資料夾
Copy root@vm:/home/jennifer# docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=3,addr=192.168.0.0,rw \
--opt device=:/nfstemp \
volume_nfs #這個指令是用來建立docker data volume
root@vm:/home/jennifer# docker run -d --net=host --restart=always \
-v /var/docker_volume/nginx/default.conf:/etc/nginx/conf.d/default.conf \
-v volume_nfs:/tmp:ro nginx:1.18 #這個指令是用來建立nginx容器
調整nginx設定檔
我們用docker exec -it b5e1 bash
進到nginx的容器來看看設定檔(b5e1是某個nginx容器的ID,完整的ID是b5e16239b697,可只輸入前幾碼),再查詢、顯示設定檔的內容
Copy root@vm:/home/jennifer# docker exec -it b5e1 bash # 進入容器並執行BASH
root@b5e16239b697:/etc/nginx# nginx -t # 查詢nginx設定檔的位置
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@b5e16239b697:/etc/nginx# cat /etc/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,在容器內執行cat /etc/nginx/conf.d/default.conf
查看內容
Copy server {
listen 80;
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;
#}
}
以下是一個完整的default.conf,描述nginx如何處理request
Copy server {
listen 80;
server_name 192.168.0.100;
location ~* ^/book_api/(.*)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.0.100:8801/$1$is_args$args;
client_max_body_size 5M;
rewrite "^/book_api/(.*)" /$1 break;
}
location /fs/ {
alias /tmp/my_fs/;
try_files $uri default.jpg =404;
}
}
下面這段內容表示,當request的子目錄是book_api的時候,例如 http://host-ip/book_api/
或 http://host-ip/book_api/query?id=3
,都將內容再導向至http://192.168.0.100:8801
另外client_max_body_size 5M
表示允許上傳的檔案大小為5M
Copy location ~* ^/book_api/(.*)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.0.100:8801/$1$is_args$args;
client_max_body_size 5M;
rewrite "^/book_api/(.*)" /$1 break;
}
下面這段內容,表示當request的子目錄是fs的時候,例如 http://localhost-ip/fs/a.png
,事實上是返回 /tmp/my_fs/a.png
給前端
Copy location /fs/ {
alias /tmp/my_fs/;
try_files $uri default.jpg =404;
}