[Docker] 一起寫 Dockerfile – ubuntu20.04 + nginx
[Docker] 一起寫 Dockerfile – ubuntu20.04 + nginx

[Docker] 一起寫 Dockerfile – ubuntu20.04 + nginx

目標

  • 使用 Ubuntu20.04 官方 image 當底,裝上 nginx 當網站伺服器。

步驟

  • step01 : 建立需要的目錄和檔案 (dockerfile、nginx.conf、index.hml)。
  • step02 : 編寫 dokcerfile。
  • step03 : 編寫 nginx.conf。
  • step04 : 編寫 index.html。
  • step05 : dockfile build 產出 Image 。
  • step06 : 使用 Image 建立 container,並測試結果。

建立目錄和檔案

.
└── ubuntu_nginx
    └── nginx
    │   └── myDomain.conf
    ├── index.html
    └── Dockerfile

Dockerfile

FROM ubuntu:20.04
MAINTAINER Jamie

# apt update、設定時區
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive && \
    apt-get install -y --no-install-recommends tzdata && \
    ln -snf /usr/share/zoneinfo/Asia/Taipei /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata

# 安裝 nginx
RUN apt-get install -y nginx

# 寫好的 nginx 設定檔,放到指定的目錄底下
COPY myDomain.conf /etc/nginx/sites-available/myDomain.conf

# 寫好的 index.html 也放到指定的目錄底下
COPY index.html /var/www/myDomain/html/index.html

# 加入軟連結,讓 nginx 知道設定
RUN ln -s /etc/nginx/sites-available/myDomain.conf /etc/nginx/sites-enabled/myDomain.conf

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

nginx.conf

server {
        listen 80;
        listen [::]:80;

        root /var/www/myDomain/html;
        index index.html index.htm;

        server_name my-domain www.my-domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1> Hello World !!</h1>
    </body>
</html>

Build Dockefile and Build Container

$ cd ubuntu_nginx
$ docker build -t ub_nginx_image .
# ---- building image ---- #
$ docker run -p 80:80 ub_nginx_image

到 C:\Windows\System32\drivers\etc\hosts 檔裡,加入my-domain。

127.0.0.1   my-domain

Test

打開瀏覽器輸入 http://my-domain,跑出Hello World !! 成功。

result
先挖個坑,提醒一下自己。之後要把以下內容補齊 ~

  • nginx.conf 設定檔寫法
  • nginx 路徑 /etc/nginx/sites-available//etc/nginx/sites-enabled/分別是 ?
  • Dockerfile 最後一句 CMD 為什麼不是 service nginx start ?