ARTICLE · 1182475
Docker编排与部署——从源码开始构建、部署和管理应用程序
1.编写单个服务的Compose文件
虽然Docker命令已经足以胜任单个服务容器的部署,但如果涉及的选项和参数较多,就会较为繁琐,此时采用Compose文件不失为一种好的选择。
以通过Docker Compose部署MySQL 8.0为例。
a. 通过vscode ssh连接到服务器(具体步骤可以参考下方视频)
如何通过VS code ssh连接自己的linux虚拟机
https://www.bilibili.com/video/BV1cayDYcEUN/
b. 创建mysql_demo文件夹,并切换到该目录
mkdir mysql_demo && cd mysql_demo#注:在Linux中执行多条命令可以用&&连接,如命令1&&命令2 只有命令1成功才会运行命令2,其他分隔符可以自行百度。
c. 编写docker-compose文件(vscode和vim都可以)
# 注意这里的版本是3.3,因为我们安装的docker-compose版本是1.18# 注意‘:’后的空格version: '3.3'services:mysql:image: mysql:8container_name: mysql8ports:- 3306:3306command:--default-authentication-plugin=mysql_native_passward--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1environment:- MYSQL_ROOT_PASSWORD=rootvolumes:- /etc/localtime:/etc/localtime:ro- mysql8-data:/var/lib/mysqlvolumes:# 注意‘:’后的空格mysql8-data: null

#注:为你的vscode安装Docker插件,能够在你编辑相关文件提供提示,另外编辑完后记得Ctrl+S保存,再去运行。
d. 通过docker-compose config命令验证和查看文件

e. 启动服务

f. 验证

g. 关闭并清理服务

2. 编写多个服务的Compose文件
此处将示范如何使用Docker Compose建立并和运行简单的Django和PostgreSQL的应用程序
2.1 定义项目组件
a. 建立并切换项目目录
mkdir django-ps && cd django-psb. 创建并编辑Dockerfile
# 以python 3为基础,此处需要约束python的版本(3.9已验证),很多依赖在3.13这类的更高的版本中存在问题。FROMpython:3.9ENVPYTHONUNBUFFERED 1# 创建code目录RUNmkdir /codeWORKDIR/codeCOPYrequirements.txt /code/RUNpip install -r requirements.txtRUNpip install setuptoolsCOPY . /code/
c. 创建并编辑requirements.txt,用于部署依赖
Django>=2.0,<3.0psycopg2>=2.7,<3.0setuptools
d. 创建并编辑docker-compose.yml
version: '3'services:db:image: postgresenvironment:-POSTGRES_DB=postgres-POSTGRES_USER=postgres-POSTGRES_PASSWORD=postgresvolumes:-db_data:/var/lib/postgresqlweb:build:context: .dockerfile: Dockerfilecommand: python manage.py runserver 0.0.0.0:8000volumes:-.:/codeports:-"8000:8000"depends_on:-dbvolumes:db_data: {}
2.2 创建Django项目
a. 通过docker-compose run 命令创建Django项(第一次运行比较耗时,耐心等待)


b. 通过tree命令检查目录的内容,可以看到样例工程里已经有文件了

#注:你的centos 系统可能没有tree命令,使用yum install tree安装。
2.3 连接数据库
a. 对myexample/setting.py进行修改(只展示改动部分)
ALLOWED_HOSTS = ['*']# 请注意这里的name、user、Password应该和docker-compose.yml中一致DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'postgresql','USER': 'postgresql','PASSWORD': 'postgresql','HOST': 'db','PORT': 5432,}}
b. 运行服务


c. 浏览器打开网页验证

d. 终止服务,并清除服务,终止通过Ctrl+C。

2.3 使用Docker Compose部署Web应用程序
a. 创建并切换工作目录
mkdir flask-web -p && cd flask-webb. 编写app.py、docker-compose.yml、Dockerfile、requirements.txt
app.py
import timeimport redisfrom flask import Flaskapp = Flask(__name__)cache = redis.Redis(host='redis',port=6379)defget_hit_count():# 命名需要能够自己解释自己retry_times = 5whileTrue:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:# 请注意教材中的条件有误,此处应该是!=if retry_times != 0:raise excretry_times -= 1time.sleep(0.5)@app.route('/')defhello():count = get_hit_count()return"hello from Docker! I have been seen {} times.\n".format(count)if __name__=="__main__":app.run(host='0.0.0.0',debug=True)
requirements.txt
flaskredis
Dockerfile
FROMpython:3.7-alpineADD. /codeWORKDIR/codeRUNpip install -r requirements.txtCMD["python", "app.py"]
docker-compose.yml
version: '3'services:web:build: .ports:-"5000:5000"volumes:-.:/coderedis:image: "redis:alpine"
c.启动服务



d. 验证,新开一个终端通过curl命令验证

#注:此处的ip和端口请留意上一步操作的提示信息,vscode 开启新终端操作见下图。


e.也可以选择后台运行服务

f. 通过docker-compose run 查看Web服务的环境变量

g. 停止并清除服务
















































































