iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Modern Web

傳承D的意志~ 邁向Django的偉大航道系列 第 27

[Day 27] 激戰篇: 新世界人人都要會的Docker?

  • 分享至 

  • xImage
  •  

嗨大家好,我是Sean!
在昨天我們的實務經驗分享大概到了一個段落了!讓我們來邁向新世界!
https://ithelp.ithome.com.tw/upload/images/20221012/20151096Zmcfn6rjtI.jpg

從今天到結束,我們每天接觸一項應該得熟悉的後端技能/工具,算是送給鐵人賽的小小挑戰。
好的,那麼我們從Microservice的始祖說起,Docker。

初遇Docker


初遇Docker是在某間公司的面試測驗裡,當時並不懂Docker實際上的作用以及它的強大之處,僅會操作他的啟動方法,還有一點基本環境設置。

那麼,甚麼是Docker呢?
Docker是一種工具,使我們可以讓應用程式在容器(container)裡運作。
容器可以把它想像成一種環境的概念,可以把應用程式給包在裡面。

那麼使用Docker的優點是甚麼呢?

  1. 快速部署、使用: 在不同環境中,部署、使用我們的應用程式,可以省去大量時間,而不用費勁心力設定環境。
  2. 統一標準的容器: 如同剛剛所述,容器其實本身就像是一種環境,在這樣的環境中運作,有助於後續的維運工程(DevOps)的進行。
  3. 硬體需求降低: 由於是使用容器的概念,我們在同一台機器上,其實是可以使用多個容器的,並且他們可以共享機器的硬體資源,比起傳統的虛擬主機(VM)需要的資源來的少。

建置Docker中的應用程式


首先,我們要做的第一件事,自然是下載Docker囉。
Install Docker Desktop

下載完成後,我們來正式開始建立docker。
打開cmd,安裝成功後,輸入指令可以看到我們目前的docker版本:

docker version

另外,在安裝完成Docker Desktop的時候:
他其實已經自動幫我們安裝另外一個所需要的套件了!

docker-compose version

輸入以上的指令來確認我們的版本,以及確認安裝完成。

我們建立一個資料夾,來放入requirements.txt、Dockerfile以及docker-compose.yml的檔案。

requirements.txt的內容,跟我們之前在部署GCP時,使用的檔案一樣,這裡就不贅述了!

pip freeze > requirements.txt

Dockerfile的話,主要是寫docker的設定檔。

# Dockerfile

FROM python:3.8-alpine

ENV PYTHONBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app /app

最後則是我們 docker-compose.yml,主要用來定義compose的功能對象以及指令。
其中的縮排都很重要,所以還請務必小心縮排的問題。

# docker-compose.yml

version: "3"

services:
  app:
    build:
        context: .
    ports:
      - "8080:8080"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8080"

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'admin'
      MYSQL_PASSWORD: 'admin'
      MYSQL_ROOT_PASSWORD: 12345678
    ports:
      - '3306:3306'

完成後,我們就可以來啟動docker-compose

docker-compose build

完成以後,我們就可以透過docker的指令,來建立django的專案

docker-compose run app sh -c "django-admin startproject app ."

新增完專案後,我們就可以啟動docker-compose來啟動專案啦!

接著,我們就輸入指令:

docker-compose up

那麼,今天的文章就先到此結束! 感謝大家的收看!
我是Sean,你各位海上的人,我們明天見!
https://ithelp.ithome.com.tw/upload/images/20221012/2015109620mi8bwzaq.jpg


上一篇
[DAY 26] 激戰篇: 如何序列化複數個model
下一篇
[Day 28] 激戰篇: 新世界的夥伴: Celery & Redis(上)
系列文
傳承D的意志~ 邁向Django的偉大航道30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言