Docker进阶实战之flask-mongo部署

前言

上一篇极简实践主要是对docker有个认识,了解一下常用命令,实际应用太过麻烦。实际应用中更多是采用docker-compose去拉取镜像、构建镜像和部署应用。

拉取:从docker hub官网拉取已有镜像,并根据使用说明进行应用。
构建:构建属于自己的docker镜像。
部署:将程序包和docker部署文件放到宿主机上,docker compose命令进行部署。

示例程序已上传git地址如下:
https://gitee.com/bjjoy/FlaskDockerExample

Docker安装

1、docker下载

下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-mac/
直接下载、双击、拖动安装。实在不明白,下边有安装和配置教程

2、详细安装教程

教程地址:https://www.runoob.com/docker/macos-docker-install.html

程序结构

在这里插入图片描述
1、config:程序配置参数,如mongo链接等,通过系统环境变量读取
2、db:mongodb增删改查
3、docker-compose.yml:docker构建部署文件
4、Dockerfile:自建镜像文件
5、main.py:自建镜像服务主程序
6、requirements.txt:自建镜像系统需要安装的python包

使用说明

1、将FlaskDockerExample文件夹压缩,放到宿主机中,宿主机生成文件夹

mkdir -p FlaskDockerExample

2、解压到 FlaskDockerExample文件夹下。

mv FlaskDockerExample.zip ~/FlaskDockerExample
cd ~/FlaskDockerExample
unzip FlaskDockerExample.zip

3、构建自己的程序镜像,或者拉取docker hub官网镜像

docker-compose build

打开Docker Desktop,点击左侧Images:

可以看到生成如下两个镜像,上边flaskdockerexample_flask是自己构建的镜像,下边mongo是从docker hub拉取的镜像,具体细节在详情说明。
在这里插入图片描述
4、生成和启动容器(看日志或者后台静默启动)

docker-compose up 
或者 
docker-compose up -d

在Docker Desktop中,点击左侧栏目Containers/Apps,可以看到如下两个容器
在这里插入图片描述
6、postman测试

(1)get接口
在这里插入图片描述
(2)put接口
在这里插入图片描述
(3)再执行get接口

详细说明

1、docker-compose.yml
docker-compose build所调用的文件。
docker镜像和容器构建部署入口文件,可满足基础功能,详细说明见注释。

version: '3.1'
services:
  mongodb:                    # 服务名称,自定义,不能有重复,本服务是docker hub已创建服务
    container_name: mongo1    # 容器名称,自定义,不能有重复
    image: mongo              # 镜像,不指定版本,从hub上拉取latest版本,指定版本mongo:版本号
    ports:                    # 宿主机port:docker容器port,外部访问要通过宿主机port
      - 8017:27017
    environment:              # 设置docker容器环境变量,根据hub 镜像说明
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=123456
  flask:                      # 自建flask服务
    container_name: flask   # 自定义容器名称
    build: .                  # docker-compose.yml所在文件夹,去查找Dockerfile,构建镜像
    ports:
      - 5000:5000
    command: python docker_mongo_example/main.py    # docker启动后,运行flask程序
    depends_on:                                     # 需要依赖mongodb
      - mongodb
    environment:                                    # 通过环境变量为程序传入基础设置
      - mongo_uri=mongodb://root:123456@mongodb:27017
      - mongodb_name=user_example
    deploy:                                         # 设置该服务占用资源
      resources:
        limits:               # 设置容器的资源限制
          cpus: "0.5"         # 设置该容器最多只能使用 50% 的 CPU
          memory: 1G

注意:
(1)在一个docker-compose.yml中的各服务,处在同一个网络当中,如:
该行//root:123456@mongodb:27017,即可识别mongodb服务的内部ip。
(2)build: . , 表示在docker-compose.yml所在的文件夹内去查找Dockerfile文件。
并通过Dockerfile去构建镜像。要查找子目录即:./***

2、Dockerfile

构建个人镜像执行文件,涉及文件夹和文件,空格左边是宿主机,空格右边是容器。

FROM python:3.8
ADD . /docker_mongo_example/
ADD requirements.txt .
ENV PYTHONPATH /docker_mongo_example/
WORKDIR .
RUN pip install -r requirements.txt

(1)FROM python3.8:从docker hub拉取python:3.8镜像

(2)ADD . /docker_mongo_example/:将宿主机Dockerfile文件所在文件夹内所有文件添加到容器/docker_mong_example/目录下,如果没有会自动创建。

(3)ENV PYTHONPATH /docker_mongo_example/:设置容器内python环境变量,添加一个python默认路径,防止程序找不到pytho文件。

(4)WORKDIR . :将容器根目录作为工作目录

(5)RUN pip install -r requirements.txt:容器内安装python包。

3、configGetter.py
python配置文件,用于读取环境变量配置相关信息。

from pydantic import BaseSettings

class Settings(BaseSettings):
    mongo_uri: str = 'mongodb://root:123456@localhost:27017'
    mongodb_name: str = 'user_example'
    collection: str = 'user'

settings = Settings()

说明:读取系统环境变量mongo_uri、mongodb_name、collection,即在
docker-compose.yml中设置的相关内容。

总结

常用的docker镜像,可以从docker hub直接拉取,并根据说明进行使用。

自建docker镜像,可以根据上一篇入门进行安装,但是明显太过繁琐。

网络相关知识接触过少,一些相关部署细节不太清楚。
目前只了解到,在一个docker-compose.yml中使用的默认***_default网络。

如果其他docker容器要放到同一个网络需要设置networks相关参数。

不在一个网络的docker容器互相访问,就相当于外网访问,需要通过宿主机ip。

就总结到这里吧,目前日常应用已经足够了。

注意:数据库容器把存储路径挂载到外部磁盘。利用-volumn

实际上container的生成和启动可以通过,docker run …命令。
可以和docker-compose up起到完全相同效果,命令也是一眼就能看明白,加油。


版权声明:本文为bjjoy2009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。