隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,現(xiàn)如今web應(yīng)用的開發(fā)越來越迅速,然而在應(yīng)用的發(fā)布環(huán)節(jié)上卻仍有不少繁瑣的工作,比如如何在不同的環(huán)境中,快速、且不產(chǎn)生沖突地發(fā)布應(yīng)用,這個問題對于很多開發(fā)者來說仍然是一個頭疼的問題。而這時候docker就能派上用場。
首先,什么是Docker?Docker 是一個開源項(xiàng)目,它為開發(fā)者提供了數(shù)據(jù)容器、鏡像打包、發(fā)布和運(yùn)行的能力,使開發(fā)者可以輕松創(chuàng)建、部署和運(yùn)行應(yīng)用程序,而不必關(guān)心應(yīng)用程序在不同環(huán)境下的變化問題。因此,將web應(yīng)用鏡像化并通過Docker部署是一種非常好的選擇。
下面我們來看如何使用Docker發(fā)布web應(yīng)用。首先,需要在docker中安裝所需的軟件環(huán)境,例如Python,Nginx等。下面是利用Dockerfile編寫的安裝Python環(huán)境的代碼示例:
#定義一個從Ubuntu16.04的開始的基礎(chǔ)鏡像 FROM ubuntu:16.04 #更新依賴 RUN apt-get update && apt-get install -y \ python3.5 \ python3.5-dev \ python3-pip \ libpq-dev \ libmysqlclient-dev #安裝必備python庫 RUN pip3 install --upgrade pip \ && ln -s /usr/bin/python3 /usr/bin/python \ && ln -s /usr/bin/pip3 /usr/bin/pip \ && pip install -i https://pypi.tuna.tsinghua.edu.cn/simple setuptools \ wheel \ uwsgi \ uwsgitop #創(chuàng)建一個代碼和靜態(tài)文件的鏡像目錄 ENV DJANGO_HOME /djangoApp RUN mkdir -p $DJANGO_HOME WORKDIR $DJANGO_HOME #將當(dāng)前項(xiàng)目目錄(.)加入到代碼文件及靜態(tài)文件的鏡像目錄中 COPY . $DJANGO_HOME #將本地的nginx代理配置文件復(fù)制到容器的/etc/nginx/sites-available/目錄中 COPY ./config/nginx.conf /etc/nginx/sites-available/
接著,我們編寫Docker Compose文件中來啟動我們的web應(yīng)用程序。下面是一個典型的Docker Compose文件示例:
version: '3' services: django: build: . command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000" volumes: - .:/djangoApp ports: # 映射容器端口 - "8000:8000" depends_on: - mysql networks: # 集成到公共網(wǎng)絡(luò)中 - public_net mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: db_test volumes: - mysql_data:/var/lib/mysql networks: - public_net networks: public_net: driver: bridge volumes: mysql_data:
我們通過創(chuàng)建定義各類組件的yaml格式的描述文件,運(yùn)行文本命令啟動各個組件,最終將所有組合起來發(fā)布出去。
綜上所述,使用Docker發(fā)布web,大大減輕了開發(fā)者的運(yùn)維負(fù)擔(dān),為web開發(fā)提供了更方便、快捷的部署方式。