千家信息网

Docker实践之python应用容器化

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,一、前言容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(django)跑在docker容器里,编写dockerfile
千家信息网最后更新 2024年09月22日Docker实践之python应用容器化

一、前言

  容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建自动化以及docker神器compose。

二、编写Dockerfile文件

官网下载的python镜像比较精简,web应用相关依赖还是需要自己安装的。编写Dockerfile,可以让你构建镜像的时候自动化。实例如下:

FROM python:3.6.4RUN mkdir /code \&&apt-get update \&&apt-get -y install freetds-dev \&&apt-get -y install unixodbc-devCOPY app /code COPY requirements.txt /codeRUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simpleWORKDIR /codeCMD ["/bin/bash","run.sh"]

FROM:Dockerfile中的一个非常重要的命令,作用是指定一个基础镜像来进行构建流程。比如上面指定了python3.6.4作为基础镜像,后续的一切操作都会以这个镜像作为基础来进行定制,如果不存在,会从官网下载。FROM必须是Dockerfile首个命令。

RUN :Dockerfile执行命令最核心的部分,在构建镜像的过程中执行参数。

COPY:复制文件。COPY <源路径> <目标路径>

WORKDIR:工作目录,若不存在,会自动帮你创建。

CMD:容器启动命令,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。 CMD 指令就是用于指定默认的容器主进程的启动命令。如果docker run指定了命令参数,这里的cmd将不会起作用。例如docker run -it -name redis docker.io/redis /bin/bash,启动容器不会执行dockerfile中的cmd,因为docker run已经指定了命令参数/bin/bash。

三、构建镜像

docker build[OPTIONS]上下文路径|URL

  • [OPTIONS]:通常指令包括-t,用来指定image的名字。-f指定Dockfile的上下文路径。
  • 上下文路径|URL:上下文路径,如果只有一个小圆点 "." 代表当前目录。

docker bulid -t webtest . 命令构建一个名字为 webtest 的镜像,构建完成后返回一个镜像id1dfa2905efac。

[root@CentOS webtest]# lsapp Dockerfile requirements.txt run.sh[root@CentOS webtest]# docker build -t webtest . .........Removing intermediate container 9c510e88e659Step 6/6 : CMD /bin/bash run.sh---> Running in 0bd29255c648---> 1dfa2905efacRemoving intermediate container 0bd29255c648Successfully built 1dfa2905efac
  • app:django项目
  • Dockerfile
  • requirements.txt是项目运行所需要的python库
    • Django
    • djangorestframework
    • pyDes
    • PyMySQL
    • redis
    • requests
    • pymssql
    • pyodbc
    • paramiko
    • psutil

run.sh是运行容器时需要调用的shell脚本

python /code/app/manage.py runserver 0.0.0.0:8000

启动容器,运行刚才构建的镜像。

docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest

[root@CentOS webtest]# docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtestPerforming system checks...System check identified no issues (0 silenced).You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.Run 'python manage.py migrate' to apply them.August 09, 2018 - 09:56:51Django version 2.1, using settings 'ShiHangTool.settings'Starting development server at http://0.0.0.0:8000/Quit the server with CONTROL-C.

-p:把容器的8000端口映射到宿主机6500

-v:主机的目录/home/code/webtest映射到容器的目录/code

--name:给容器起个名字web,webtest是我们刚刚构建的镜像

--restart:always 容器退出时总是重启

--privileged=true:执行容器内文件需要的权限

输入 ip:6500/Home/OrderSettle-K8S/

运行成功!

五、compose

是否觉得上面的操作太过复杂,如果能自动化部署就好了。不要着急,compose能够帮到你

1.简介:

compose是docker官方开源项目,用于docker集群的快速编排。compose通过docker-compose.yml文件定义和运行一个或多个容器。是fig的升级版。

2.安装:

compose是通过python编写的,调用了docker提供的API对容器进行管理。so 可以通过python管理工具pip来安装

pip install docker-compose

3.编写docker-compose.yml文件

这是docker-compose.yml主模板格式

version: '3'services:  web1:    build: .    image: web1    ports:      - "7500:8000"    volumes:       - /home/code/webtest:/code    privileged: true    restart: always

4.运行compose项目

将 dockerfile、requirements.txt、docker-compose.yml、app 文件夹放在同一目录,运行命令 docker-compose up

[root@CentOS webtest]# docker-compose upCreating network "webtest_default" with the default driverBuilding web1Step 1/6 : FROM python3.6.4-dev ---> ca46b1ed99abStep 2/6 : COPY app /code ---> f59b9540f8abRemoving intermediate container e987c66b51f5Step 3/6 : COPY requirements.txt /code ---> 2095b64882acRemoving intermediate container e3099b386727.........

运行完成后,docker ps查看刚刚启动的容器web1,已经在运行啦

[root@CentOS ~]# docker psCONTAINER ID    IMAGE          COMMAND         CREATED       STATUS       PORTS                       NAMESeeab6b5a993b    web1           "/bin/bash run.sh"    About a minute ago  Up 59 seconds    0.0.0.0:7500->8000/tcp               webtest_web1_15fb51ce5a51c    webtest           "/bin/bash run.sh"    23 hours ago     Up About an hour  0.0.0.0:6500->8000/tcp               web

5.总结

compose把构建镜像,运行容器两个步骤放在一个yml文件里配置,实现自动化部署。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

容器 镜像 运行 命令 文件 目录 上下 上下文 参数 路径 项目 自动化 应用 名字 基础 就是 进程 作用 指令 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 襄阳软件开发工资水平 崇明区品牌软件开发批发价 移动宽带只有两个服务器怎么进去 如何找游戏数据数据库 软件开发要多少钱聚顶科技 科技互联网行业100强 暗黑重置2服务器老崩溃 互联网服务器行业需求 创客互动网络技术有限公司 上海财务软件开发服务 工控网络安全国家背景 中国的服务器与英特尔关系 原神用什么软件开发 网络安全与黑客攻防技术 如何查看数据库排序规则 传说对决选择哪一个服务器 网络安全报告 百度文库 sql登录名 访问数据库 临沂民主评议软件开发公司 网络安全徐国爱文字版pdf 最新网络安全竞赛消息 我想在旧世经典服务器 山东办公厅软件开发取费依据 千方百计数据库表单 计算机网络技术考试2016 网络安全大队职权 武汉软件开发15k 密云区信息网络技术服务优点 戴尔服务器无法更改内存模式 软件开发子公司还在招人吗
0