技術部落格 - Docker 部署和執行Web服務
阿新 • • 發佈:2020-11-04
作業要求檢視作業要求 20201029-3 事後諸葛亮會議 及 交換1人。
Docker 部署和執行Web服務
Docker 是一個開源的應用容器引擎,Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出任何機器上(區分Linux和Windows系統)。Docker技術極大的簡化了運維部署服務的難度,也加快了服務上線的速度和提高了成功率。
安裝Docker
Docker容器在各個系統的安裝文件可以在Install Docker Engine找到。本組採用了Ubuntu 20.04 LTS,以下以Ubuntu 20.04 LTS為例。
在Ubuntu 20.04 LTS中安裝Docker,在Bash中執行如下指令即可,指令上方的註釋說明了該指令的用途。由於Docker官方安裝源速度較慢,以下指令採用阿里雲提供的映象。
# 移除老版本的Docker相關元件 sudo apt-get remove docker docker-engine docker.io containerd runc # 更新APT倉庫 sudo apt-get update # 安裝可能需要的工具軟體 sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # 安裝Docker阿里雲源的金鑰 curl-fsSLhttp://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd- # 新增Docker阿里雲源 sudoadd-apt-repository"deb[arch=amd64]http://mirrors.aliyun.com/docker-ce/linux/ubuntu$(lsb_release-cs)stable" # 更新APT倉庫 sudoapt-get-yupdate # 安裝Docker sudoapt-get-yinstalldocker-ce # 安裝Docker-Compose sudo apt-get -y install docker-compose #新增docker使用者組 sudogroupadddocker #添加當前使用者到docker使用者組 sudogpasswd-a$USERdocker # 重啟Docker服務 sudo service docker restart #執行一個hello-world測試是否安裝成功 dockerrunhello-world
編寫Dockerfile
編寫Dockerfile的最佳實踐請檢視Best practices for writing Dockerfiles。
Dockerfile檔案用以要求Docker容器引擎構建使用者自己的容器。本組在Python映象的基礎上進一步構建了我們需要的Django容器。構建程式碼如下。
FROM python:3.8 ENV PYTHONUNBUFFERED=1 RUN mkdir /code WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple COPY ./manage.py /code/manage.py COPY ./src /code/src
編寫docker-comspoe
編寫docker-compsoe.yml用以編排多個容器。如本組最終使用了三個容器,包括資料庫容器,我們自主構建的Web服務容器,和Nginx容器。Docker-Compose使得多種服務的安裝、啟動和維護更為便捷。
更多Docker-Compose資訊,請查閱文件Get started with Docker Compose。
本組的docker-compose.yml檔案編寫如下。
version: "3"
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1492
services:
mariadb:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: 1214
MYSQL_DATABASE: soul
volumes:
- ./mariadb:/var/lib/mysql
ports:
- "3306:3306"
django:
build: .
command: bash -c "python3 manage.py makemigrations scale setting story user wechat && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"
volumes:
- ./src:/code/src
- ./manage.py:/code/manage.py
- ./static:/var/static
ports:
- "8000:8000"
depends_on:
- mariadb
restart: always
nginx:
image: nginx
volumes:
- ./nginx:/etc/nginx
- ./static:/var/static
depends_on:
- django
ports:
- "8080:80"
使用Docker-Compose啟動服務
docker-compose up