• 售前

  • 售后

热门帖子
入门百科

Docker实践之python应用容器化

[复制链接]
什么大师特 显示全部楼层 发表于 2021-10-26 13:00:52 |阅读模式 打印 上一主题 下一主题
一、前言
  容器利用沙箱机制,相互隔离,上风在于让各个摆设在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建主动化以及docker神器compose。
二、编写Dockerfile文件
官网下载的python镜像比力精简,web应用干系依赖照旧需要自己安装的。编写Dockerfile,可以让你构建镜像的时间主动化。实例如下:
  1. FROM python:3.6.4
  2. RUN mkdir /code \
  3. &&apt-get update \
  4. &&apt-get -y install freetds-dev \
  5. &&apt-get -y install unixodbc-dev
  6. COPY app /code
  7. COPY requirements.txt /code
  8. RUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simple
  9. WORKDIR /code
  10. CMD ["/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。
  1. [root@CentOS webtest]# ls
  2. app Dockerfile requirements.txt run.sh
  3. [root@CentOS webtest]# docker build -t webtest .
  4. ...
  5. ...
  6. ...
  7. Removing intermediate container 9c510e88e659
  8. Step 6/6 : CMD /bin/bash run.sh
  9. ---> Running in 0bd29255c648
  10. ---> 1dfa2905efac
  11. Removing intermediate container 0bd29255c648
  12. Successfully built 1dfa2905efac
复制代码
      
  • app:django项目  
  • Dockerfile  
  • requirements.txt是项目运行所需要的python库
         
    • Django   
    • djangorestframework   
    • pyDes   
    • PyMySQL   
    • redis   
    • requests   
    • pymssql   
    • pyodbc   
    • paramiko   
    • psutil  
      
run.sh是运行容器时需要调用的shell脚本
  1. 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
  1. [root@CentOS webtest]# docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest
  2. Performing system checks...
  3. System check identified no issues (0 silenced).
  4. You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
  5. Run 'python manage.py migrate' to apply them.
  6. August 09, 2018 - 09:56:51
  7. Django version 2.1, using settings 'ShiHangTool.settings'
  8. Starting development server at http://0.0.0.0:8000/
  9. 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来安装
  1. pip install docker-compose
复制代码
3.编写docker-compose.yml文件
这是docker-compose.yml主模板格式
  1. version: '3'
  2. services:
  3.   web1:
  4.     build: .
  5.     image: web1
  6.     ports:
  7.       - "7500:8000"
  8.     volumes:
  9.       - /home/code/webtest:/code
  10.     privileged: true
  11.     restart: always
复制代码
4.运行compose项目
将 dockerfile、requirements.txt、docker-compose.yml、app 文件夹放在同一目次,运行下令 docker-compose up
  1. [root@CentOS webtest]# docker-compose up
  2. Creating network "webtest_default" with the default driver
  3. Building web1
  4. Step 1/6 : FROM python3.6.4-dev
  5. ---> ca46b1ed99ab
  6. Step 2/6 : COPY app /code
  7. ---> f59b9540f8ab
  8. Removing intermediate container e987c66b51f5
  9. Step 3/6 : COPY requirements.txt /code
  10. ---> 2095b64882ac
  11. Removing intermediate container e3099b386727
  12. ...
  13. ...
  14. ...
复制代码
运行完成后,docker ps查看刚刚启动的容器web1,已经在运行啦
  1. [root@CentOS ~]# docker ps
  2. CONTAINER ID    IMAGE          COMMAND         CREATED       STATUS       PORTS                       NAMES
  3. eeab6b5a993b    web1           "/bin/bash run.sh"    About a minute ago  Up 59 seconds    0.0.0.0:7500->8000/tcp               webtest_web1_1
  4. 5fb51ce5a51c    webtest           "/bin/bash run.sh"    23 hours ago     Up About an hour  0.0.0.0:6500->8000/tcp               web
复制代码
5.总结
compose把构建镜像,运行容器两个步骤放在一个yml文件里设置,实现主动化摆设。
以上就是本文的全部内容,盼望对各人的学习有所帮助,也盼望各人多多支持草根技术分享。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作