Docker运行python容器
容器是镜像运行的实例,而镜像保存在仓库里,测试或者发布生产环境只需要pull下来即可,相对传统的应用部署,能很好的保持环境的一致,节省运维时间。最近公司内部的java和.net服务也已经全部容器化,实现从开发环境 到 测试环境 再到 生产环境,自动化部署。本文介绍的是python应用运行docker容器。
以django部署到docker 为例
1.编写Dockerfile文件
每一个镜像都有一个Dockerfile文件对应,Dockerfile定义了如何构建镜像。
FROM python:3.6.4 RUN mkdir /code \
&&apt-get update \
&&apt-get -y install freetds-dev \
&&apt-get -y install unixodbc-dev
COPY app /code
COPY requirements.txt /code
RUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simple
WORKDIR /code 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。
2.构建镜像
构建目录,我这里有四个文件和文件夹。
1.app是django项目
2.Dockerfile
3.requirements.txt是项目运行所需要的python库
4.run.sh是运行容器时需要调用的shell脚本
[root@CentOS webtest]# ls
app Dockerfile requirements.txt run.sh
requirements.txt
Django
djangorestframework
pyDes
PyMySQL
redis
requests
pymssql
pyodbc
paramiko
psutil
run.sh
python /code/app/manage.py runserver 0.0.0.0:8000
docker bulid -t <name> . 用于构建镜像。
[root@CentOS webtest]# ls
app Dockerfile requirements.txt run.sh
[root@CentOS webtest]# docker build -t webtest .
...
...
...
Removing intermediate container 9c510e88e659
Step 6/6 : CMD /bin/bash run.sh
---> Running in 0bd29255c648
---> 1dfa2905efac
Removing intermediate container 0bd29255c648
Successfully built 1dfa2905efac
构建完成后返回一个镜像id 1dfa2905efac 。
3.运行容器
启动容器,运行刚才构建的镜像。
docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true web
[root@CentOS webtest]# docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true web
Performing 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:51
Django 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:6000/Home/OrderSettle-K8S/
运行成功!
Docker运行python容器的更多相关文章
- docker cp 和docker exec 查看docker 运行的容器信息
1. 使用docker 运行 redis 和 postgresql docker run -d -p : -v /redis/data/:/data redis docker run -d -p : ...
- 将springboot jar应用打包成镜像并在docker运行成容器
先看一下我的Dockerfile内容与服务器中的目录结构 上面 yibai-0.0.1-SNAPSHOT.jar 为springboot应用打成的jar包,Dockerfile为将应用打成镜像的配置文 ...
- Docker 运行Kafka容器
1. 启动Zookeeper docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper 2. 启动Kafka dock ...
- 使用docker 部署python 项目
使用python 开发了一个restfu api程序,使用docker镜像部署.主要有如下步骤,简单记录以供以后参考. 1. 创建DockerFile文件 创建一个DockerFile文件,文件名为D ...
- Docker 运行hello world
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world docker run ubuntu:15.10 /bin/echo ...
- docker:python与docker
一:环境准备 pycharm:专业版(windows) docker ce 免费版(ubantu16.04) os: os:防火墙 二:开发流程 pycharm中开发环境搭建的工作原理: 1. pyc ...
- Dokcer运行Nacos容器自动退出问题
Dokcer运行Nacos容器自动退出问题 参考博文 学生党,租的云服务器,2核2G.使用Docker运行Nacos容器的时候发现总是自动退出.Nacos日志里面没有明显的报错信息.查了一下是内存溢出 ...
- Docker环境下运行python+selenium+chrome
Docker环境下运行python+selenium+chrome docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将docker与selenium结合实现 ...
- 用Docker打包Python运行环境
虽然Docker作为部署环境打包镜像的工具,和我的科研并没有直接的关系.但我觉得在项目中运用Docker来打包环境依赖也可以大大提高工作效率,于是准备专门学习一下Docker. 1. Docker基础 ...
随机推荐
- Solr调研总结(转)
Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引 ...
- C# 网络编程之webBrowser获取网页url和下载网页中图片
该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试瞎子啊网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url. ...
- 谷歌地图api访问失败
在非外网情况下,我们调用谷歌api会出现加载不到地图的现象,此时可以换一下域名试试也许就好了 比如我自己访问api时时这样写的: https://maps.googleapis.com/maps/ap ...
- Android -- Annotation
Override Annotation @Override public void onCreate(Bundle savedInstanceState){}; 概念 An annotation is ...
- 转:pytorch版的bilstm+crf实现sequence label
http://blog.csdn.net/appleml/article/details/78664824 在理解CRF的时候费了一些功夫,将一些难以理解的地方稍微做了下标注,隔三差五看看加强记忆, ...
- 常见算法(logistic回归,随机森林,GBDT和xgboost)
常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...
- css文件放在根目录之后不起作用原因
修改为
- Eclipse技术: 项目文件中过滤.o文件
1. 右建项目 -> Properties. 2. 增加过滤规则
- Return array from functions in C++
C++ does not allow to return an entire array as an argument to a function. However, you can return a ...
- 【算法】插入排序(Insertion Sort)
(PS:内容参考MIT算法导论) 插入排序(Insertion Sort): 适用于数目较少的元素排序 伪代码(Pseudocode): 例子(Example): 符号(notation): 时间复杂 ...