Python项目打包, docker build构建docker镜像, Docker Compose (Docker编配) |
您所在的位置:网站首页 › windows的镜像文件在哪里 › Python项目打包, docker build构建docker镜像, Docker Compose (Docker编配) |
重点摘要
将本地Python项目打包构建docker镜像,并在docker中运行【流程1-8】 8、Docker Compose (Docker编配) 附录: 其他常用docker命令 1. 首先, 完成本地Python的开发、测试; 2.1 将项目依赖库(即本地python环境)进行导出, 使用如下命令: pip freeze > requirments.txt 2.2 下载python项目所需依赖包到指定文件夹py_pkgs: pip download -d py_pkgs -r requirments.txt 3. 在宿主机上, 新建文件夹, 以es-python文件夹为例, 放入如下内容:es-python (作为Python项目根目录) |- modules (modules文件夹: 其中的内容是Python项目子目录文件) |- run.py (Python项目的执行入口) |- requirements.txt (步骤2生成的项目依赖列表) |- Dockerfile.txt (步骤4即将编写的文件) 4. 编写Dockerfile, 创建一个文件叫Dockerfile, 内容如下: 在es-python文件夹下,新建一个Dockerfile文件: touch Dockerfile # Dockerfile 指令 # 基于 基础镜像 FROM python:3.6.10 # 定义 元数据 LABEL maintainer="HashSWAP" version="1.0" # 将构建环境下的文件OR目录, 复制到镜像中的/code目录下, ADD . /code # 设置/切换 当前工作目录 为 /code WORKDIR /code # 根据需要, 定义 环境变量 ENV IP 192.168.70.58 ENV REFRESHED_AT 2022-07-20 # 指定 一个OR多个 卷, 挂载到镜像 (配合后续docker cp使用) VOLUME ["/opt/project", "/data"] # 安装python环境支持(针对python项目) RUN pip install -r requirements.txt # 暴露出外界访问容器的端口 EXPOSE 5033 # 假设run.py是项目启动入口, # ENTRYPOINT 和 CMD 指令均可用于指定容器启动时要运行的命令, # 区别在于 CMD 命令可以被 docker run命令覆盖 ENTRYPOINT ["python", "run.py"] CMD ["python", "run.py"]5. 假设宿主机上已经装好docker, 此时切换到es-python路径下 cd /usr/hashswap/es-python6. 执行docker build命令, 根据dockerfile构建出一个对应的镜像(注意, docker build命令最后有一个 . ) docker build -t es-python-image . OR docker build -t="es-python-image:v2022.07.21" .注:若多次构建可以使用 –no-cache 命令,忽略之前构建过程的缓存 docker build --no-cache -t es-python-image .7. 上述步骤完成之后, 使用docker images命令,可列出之前生成的镜像 es-python-image docker images8、根据镜像,创建、命名容器, 并执行 docker run --name es-python-app_0 -it es-python-image:v2022.07.20 python run.py OR docker run --name es-python-app_1 -p 5034:5033 -it es-python-image:v2022.07.20 python run.py注意: 5033端口应该是容器内项目暴漏出来的端口, 例如"SERVICE_PORT": 5033; 5034端口不应该跟宿主机上其他端口冲突。 至此,项目以docker容器格式运行了… 8、Docker Compose (Docker编配) docker run如果需要的参数过多,则可以编写docker-compose.yml,然后使用docker-compose up命令来启动容器; 也可以同时启动多个容器; 8.1 在es-python文件夹下, 创建docker-compose.yml文件 touch docker-compose.yml8.2 根据需要, 编写docker-compose.yml内容(仅以一个容器为例) ${**} 内容根据实际需要编写 es_python_app: container_name: es_python_app image: XXXXX/es_python_iamge restart: always environment: - ES_IP=${ES_IP} - ES_PORT=${ES_HTTP_PORT} - EUREKA_SERVER=${EUREKA} - EUREKA_APP_NAME=es_python_app - EUREKA_INSTANCE_HOST=${IP} - EUREKA_INSTANCE_IP=${IP} - EUREKA_INSTANCE_PORT=${ES_PORT} - SERVICE_PORT=${ES_PORT} ports: - ${ES_PORT}:${ES_PORT} volumes: - ./es_python:/es_python command: python run.py --instance_host=${USE_APP_HOST} --instance_port=${USE_APP_PORT} --eureka_server=${EUREKA}8.3 进入docker-compose.yml所在文件路径, 运行>> docker-compose up 命令, 即可启动这些容器 # 以后台守护进程的模式, 启动DockerCompose docker-compose up -d docker-compose --file $DEPLOY_PATH/lib/docker-compose.yml up -d附录: 其他常用docker命令 docker run 的其他参数: -d 将容器放到后台运行 -it 交互式运行 --name es-python-con01 命名 -p 8081:80 将容器的80端口绑定到本地宿主机的8081端口上 -p 80 将容器的80端口绑定到本地宿主机的随机端口上 -e "WEB_PORT=8090" 传递环境变量 --restart=always 自动重启容器 -v ./es_python:/es_python 挂载某个卷 -w /var/log 覆盖工作目录 -c "while true; do echo hello world; sleep 1; done" eg: >> docker run --name es_python_app -p 5033:5033 -it es-python-image:v2022.07.21 python run.py获取容器详细信息 >> docker inspect es-python查看容器日志 >> docker logs es-python -f 动态监控日志 -t 为每条日志项加上时间戳 --tail 10 获取最后十条日志 --tail 0 -f 跟踪最新日志查看容器内部所有进程 >> docker top es-python列出所有镜像 >> docker images查找镜像 >> docker search python停止容器 >> docker stop pm1n8d9jd9n删除容器 >> docker rm ji0382h0hf删除镜像 >> docker rmi a7sha923在已经存在的容器中, 运行交互命令 >> docker exec -t -i es-python-app-1 /bin/bash重启docker >> sudo systemctl restart docker保存/备份镜像文件 image # 格式: docker save [options] images [images...] >> docker save -o ~/software/es-python/es-python-image.tar es-python-image:latest >> docker save > ~/software/es-python/es-python-image.tar es-python-image:v2022.07.21 # -o 和 > 表示输出到文件, ****.tar为目标文件, name:tag为源镜像名导入镜像文件 image >> docker load --input /images/ubuntu_14.04.tar # OR 通过符号的方式来导入 >> docker load < /images/ubuntu_14.04.tar保存容器 container # 格式: >> docker export [options] container # >> docker export #ID or #Name > /app/export.tar >> docker export -o ~/software/es-python/es-python-cont.tar es-python-app-1 >>> docker export es-python-app-1 > ~/software/es-python/es-python-cont.tar # -o > 表示输出到文件,载入容器 container 注: docker import用来载入容器包,但会恢复为镜像 # 格式: >> docker import [options] file|URL|- [REPOSITORY[:TAG]] >> docker import ~/software/es-python/es-python-cont.tar es-python-image:v202207new
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |