---
# System prepended metadata

title: 使用Dockerfile建立映像檔
tags: [DevOps]

---

# 使用Dockerfile建立映像檔

###### tags: `DevOps`

Docker 容器內部的各種系統資源（例如儲存、網路等）都是抽象的，我們需要自行定義內部抽象資源與外部實體資源的對應關係，這些設定都是寫在 Dockerfile 這個 Docker 容器的設定檔中

首先在一個空的目錄中，建立一個檔名為 `Dockerfile` 的文字檔

```dockerfile=
# 使用官方的 Python 執行環境作為基本的 Docker 影像
FROM python:2.7-slim

MAINTAINER madi <madi@gmail.com>

# 設定工作目錄為 /app
WORKDIR /app

# 複製目前目錄下的內容，放進 Docker 容器中的 /app
ADD . /app

# 安裝 requirements.txt 中所列的必要套件
RUN pip install -r requirements.txt

# 讓 80 連接埠可以從 Docker 容器外部存取
EXPOSE 80

# 定義環境變數
ENV NAME World

# 當 Docker 容器啟動時，自動執行 app.py
CMD ["python", "app.py"]
```
Dockerfile 需要用到另外兩個檔案，分別為 `requirements.txt` 與 `app.py`，`app.py` 就是我們自己撰寫的 Python 應用程式，而 `requirements.txt` 則是相依套件的列表，請在同一個目錄中建立這兩個檔案。

建立映像檔:

```
$ docker build -t first-demo .

// -t: 貼標籤，取好記的名字
// first-demo: 映像檔的名稱
// 注意最後的點，代表執行該目錄下的Dockerfile，以建立image
```

執行映像檔:
```
$ docker run -p 4000:80 first-demo
```
**本機的port:4000對應到docker的port:80**，打開瀏覽器，輸入`http://localhost:4000`

https://blog.gtwang.org/virtualization/docker-basic-tutorial/

除此之外，也可以利用docker建置 `busybox` 來熟悉Linux指令

[[容器] 容器技術之 Docker 篇 - 指令操作](https://blog.kevinyang.net/2020/07/31/docker-101-note-2/)

[Django-Docker容器化部署：Django-Docker本地部署](https://juejin.cn/post/6844903959056891912)