---
# System prepended metadata

title: 用docker把django包起來
tags: [給瑞起手式note, python, django, docker]

---

# 用docker把django包起來
###### tags: `docker`、`django`、`python`

## 簡單步驟

### <kbd>Step1</kbd> 建立django專案

你可以直接拿要準備上去的django專案，或是直接新增一個。
相信各位是專業django大腿才看到這邊，所以我就省略了。

~~絕對不是因為我忙沒時間寫這段~~

### <kbd>Step2</kbd> 新增dockerfile

接著來新增dockerfile，這邊就放在django的根目錄來動，先新增`dockerfile`檔案後用編輯器開啟，內容大概長這樣

```dockerfile=
# 確定python版本來讓docker建立時載入
FROM python:3.7.4

# --- 在這邊設定和python有關的環境變數 ---

# 是否啟用緩衝載入
ENV PYTHONUNBUFFERED 1

# ===================================

# 建立資料夾作為部署用容器
RUN mkdir /code
# 指定資料夾為部署docker工作用
WORKDIR /code

# 更新 pip
RUN pip install pip -U

# 把 requirements.txt 檔案複製進容器裡
ADD requirements.txt /code/

# 在容器裡安裝plugin建立環境
RUN pip install -r requirements.txt

# 把寫完的django project整包帶進去容器裡
ADD . /code/
```

### <kbd>Step3</kbd> 新增docker-compose.yml

完成dockerfile之後接著新增docker-compose的部分，主要也是因為要開啟多個容器還是用docker-compose比較穩。

在那之前先看看有沒有docker-compose，來用這句話檢查一下。
```bash=
$ docker-compose --version

# 有的人看到的
docker-compose version 1.25.5, build 8a1c60f6
# 麻瓜(X)沒有的人(O)看到的
/usr/local/bin/docker-compose: line 1: {error:Not Found}: command not found
```

若你發現你的電腦沒有，下面三個步驟讓你安心上工
```bash=
# 給他抓下來
$ curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 調整權限
chmod +x /usr/local/bin/docker-compose

# 再確認一次
$ docker-compose --version
```

安裝完成後讓我們新增`docker-compose.yml`檔案吧。

```dockerfile=
version: "3"
services:
  django_web:
    restart: always
    build: .  #現在位置
    command: "python3 manage.py runserver 0.0.0.0:15000" #port可以自己橋
    volumes:
      - .:/code
    ports:
      - "15000:15000" #port可以自己橋 "內部port:外部port"
```

### <kbd>Step4</kbd> 執行docker

直接輸入下方指令，一切就完成了。
快打開 `docker ps -a` 看看，當你看到其中STATUS上面寫的是 `Up __ time` 就可以輸入 `自己的IP:port` 進去看看結果了

```
CONTAINER ID        IMAGE          COMMAND                  CREATED             STATUS               PORTS                      NAMES
735b87ad7732        django_web     "python3 manage.py r…"   34 minutes ago      Up 32 minutes        0.0.0.0:15000->15000/tcp   django_web_1
```