前言
上一篇极简实践主要是对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起到完全相同效果,命令也是一眼就能看明白,加油。