Docker的基本使用(部署python项目)
今天开始利用docker来部署项目,当然,首先,需要安装好Docker,这个在我的上篇写了。
一、准备项目
我写的是一个爬取某ppt网站的代码,就一个ppt1.py是爬虫,然后,ppts是存放下载的ppt的
二、准备requirement.txt文件
这个是需要哪些python库支持,写好
三、准备Dockerfile文件
需要一个名为Dockerfile的文件,没有后缀,这个创建docker镜像的配置文件
FROM python:3.6
ENV PATH /usr/local/bin:$PATH
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python ppt1.py
FROM:需要什么环境
ENV:修改path,即增加/usr/local/bin这个环境变量
ADD:将本地代码放到虚拟容器中,它有两个参数,第一个是 . ,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,即将本地项目的所有内容放到虚拟容器的/code目录下,以便在虚拟容器中运行代码
WORKDIR:指定工作目录,也就是刚才的/code,在虚拟容器中的目录
RUN:执行某些环境准备工作,docker容器中只有python3环境,还需要python的库,这里安装那些库
CMD:运行项目的命令行命令
详细了解可以去查看官方文档
四、开始创建镜像
docker build -t pptdemo:latest .
这样应该就没错了,最后报了个警告,有时间去了解了解...
$ docker build -t pptdemo:latest .
Sending build context to Docker daemon 23.55kB
Step 1/6 : FROM python:3.6
---> 55fb8aca33df
Step 2/6 : ENV PATH /usr/local/bin:$PATH
---> Using cache
---> 97e82715b8ee
Step 3/6 : ADD . /code
---> 9d2d253015ee
Step 4/6 : WORKDIR /code
Removing intermediate container 25ccdad420a0
---> ec462b723417
Step 5/6 : RUN pip install -r requirements.txt
---> Running in 83e607d0bc06
Collecting requests (from -r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl (57kB)
Collecting pyquery (from -r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/09/c7/ce8c9c37ab8ff8337faad3335c088d60bed4a35a4bed33a64f0e64fbcf29/pyquery-1.4.0-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests->-r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
Collecting chardet<3.1.0,>=3.0.2 (from requests->-r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
Collecting certifi>=2017.4.17 (from requests->-r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/9f/e0/accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/certifi-2018.11.29-py2.py3-none-any.whl (154kB)
Collecting urllib3<1.25,>=1.21.1 (from requests->-r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB)
Collecting lxml>=2.1 (from pyquery->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/5d/d4/e81be10be160a6323cf5f29f1eabc9693080cb16780a2e19c96091ee37ee/lxml-4.3.0-cp36-cp36m-manylinux1_x86_64.whl (5.7MB)
Collecting cssselect>0.7.9 (from pyquery->-r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/7b/44/25b7283e50585f0b4156960691d951b05d061abf4a714078393e51929b30/cssselect-1.0.3-py2.py3-none-any.whl
Installing collected packages: idna, chardet, certifi, urllib3, requests, lxml, cssselect, pyquery
Successfully installed certifi-2018.11.29 chardet-3.0.4 cssselect-1.0.3 idna-2.8 lxml-4.3.0 pyquery-1.4.0 requests-2.21.0 urllib3-1.24.1
Removing intermediate container 83e607d0bc06
---> 22244632da67
Step 6/6 : CMD python ppt1.py
---> Running in c5ff77a9f680
Removing intermediate container c5ff77a9f680
---> 07cfec786f1a
Successfully built 07cfec786f1a
Successfully tagged pptdemo:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
继续输入代码查看是否创建成功
我擦,怎么有这么多,因为我前面其实出bug了,改了很久,哈哈这么多镜像我去,忽略<none>的。
五、运行
docker run pptdemo
我成功了!
顺便一提,如果我们需要暴露接口,比如搭了一个网站,需要暴露端口,因为暴露的是容器的端口,需要访问宿主机能访问到,所以需要做端口映射
可以参考:https://www.cnblogs.com/jie-fang/p/7920863.html
docker run -d -p 8080:80 nginx
比如这样,就将宿主机的8080端口映射到容器的80端口,访问localhost:8080就可以了
注意,windows下不同,因为docker需要Linux环境,其实在windows上开了一个虚拟机
docker-machine ip default
可以显示出ip为多少,这样,需要利用这个ip才能访问容器,一般是,192.168.99.100,那么192.168.99.100:8080即可访问到接口,不然就是你配错了
进入docker容器:
docker exec -i -t pptdemo /bin/bash
查看docker容器运行日志:
docker logs pptdemo
六、关于部署
1.push到dockerhub,然后在装好docker的服务器上pull下来镜像,run即可(统一托管,缺点是慢,和不太稳定)
2.复制源代码到服务器,在装好docker的服务器上重新执行 build,run(上传体积小,缺点是build费时间)
3.将image导出,复制到装好docker的服务器,载入image,run即可(方便多机器部署,上传体积大)
3种方法各有优劣,看情况选择。
1.push到dockerhub
优点在于,推送到dockerhub,只要有网即可方便推拉,缺点是,推送特别慢,而且要反复推,我正在查有没方法换源之类。。。
1.在dockerhub注册帐号
2.新建一个库,我的叫:pptdemo
3.命令行登录
docker login -u happycodes
4.tag打标签
docker tag pptdemo:latest happycodes/pptdemo:latest
5.push
docker push happycodes/pptdemo
2、复制源码到服务器
这个比较简单,就类似于再构建一遍,缺点是又要下依赖,又要重新构建,比较慢
3、导出image,拷贝image,载入image
比较合适的方法,构建一遍,复制多遍,即可
#将镜像存储
docker save nginx:latest > ./nginx.tar
docker save xxxxx(image id) > ./nginx.tar #导入镜像文件
docker load --input ./nginx.tar #通过符号的方式来导入
docker load < ./nginx.tar
七、可选、删除多余的容器和镜像
容器不停,不能删对应的image
关于容器:
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID $ docker ps -a // 查看所有容器
$ docker ps -a -q // 查看所有容器ID $ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
关于images
docker images // 查看当前有些什么images
docker rmi <image id> // 删除指定id的image
docker rmi $(docker images -q) // 要删除全部image的话
八、使用docker-compose部署
简单说说docker-compose,他是python写的,为了解决docker部署的繁杂配置和多容器部署的配置问题,例如需要做容器端口和宿主机端口映射,配置容器ip等。
pip install docker-compose 即可
使用很简单,编写 docker-compose.yml 文件即可,例如我的代理池,需要配置映射端口
Docker的基本使用(部署python项目)的更多相关文章
- Docker如何部署Python项目
Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...
- 笔记14:Docker 部署Python项目
Docker 部署Python项目 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取 ...
- 使用docker 部署python 项目
使用python 开发了一个restfu api程序,使用docker镜像部署.主要有如下步骤,简单记录以供以后参考. 1. 创建DockerFile文件 创建一个DockerFile文件,文件名为D ...
- Jenkins部署Python项目实战
一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...
- 使用Jenkins部署Python项目
廖大使用Fabric部署的.我使用Jenkins试试部署过程.虽然说是用python项目部署测试的,但其他项目也是同理的. 参考Jenkins+Python部署完整版,不过安装方式不同. 安装tomc ...
- 部署python项目到linux服务器
最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是M ...
- Docker快速上手之部署SpringBoot项目
Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
- 云服务器部署Python项目(nginx+uwsgi+mysql+项目)
python项目部署到云服务器 关注公众号"轻松学编程"了解更多. 一.硬件准备 云服务器,系统ubuntu_16_04 . 注意:要在安全组中开放Http的80端口. 二.软件准 ...
- Docker部署Python项目
简介 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取的策略就是引入虚拟机,比如在 Wind ...
随机推荐
- EF4.1 企业架构模式 自动映射数据表(转载)
在讲解之前,先来看看解决方案的架构: 1.在Nop.Core下的Domain里建立一个实体Category:2.在Nop.Data下的Mapping\Catatog\下建立一个数据表映射Categor ...
- AutoFac文档11(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 元数据 Autofac ...
- ubuntu环境下配置jdk
方法1:修改/etc/profile 文件 /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 所有用户 ...
- Python目录常用操作
os.path.basename(path) #取文件名 os.path.getsize(path) #取文件大小 os.path.exists(path) #文件是否存在 os.path.dirna ...
- Atitit. 解释器模式框架选型 and应用场景attilax总结 oao
Atitit. 解释器模式框架选型 and应用场景attilax总结 oao 1. 解释器模式结构描述 1 2. 如何实现(简单的解释器模式,仅仅通过词法分析即可实现,而无需token流进行处理. 2 ...
- Java多线程简析——Synchronized(同步锁)、Lock以及线程池
Java多线程 Java中,可运行的程序都是有一个或多个进程组成.进程则是由多个线程组成的.最简单的一个进程,会包括mian线程以及GC线程. 线程的状态 线程状态由以下一张网上图片来说明: 在图中, ...
- C语言 · 冒泡法排序
算法提高 冒泡法排序 时间限制:1.0s 内存限制:512.0MB 输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...
- KMP + 求最小循环节 --- POJ 2406 Power Strings
Power Strings Problem's Link: http://poj.org/problem?id=2406 Mean: 给你一个字符串,让你求这个字符串最多能够被表示成最小循环节重复多少 ...
- c经典算法
1. 河内之塔 说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时 北越的首都,即现在的胡志明市:1883年法国数学家 Ed ...
- URL 重写
转载自:http://www.cnblogs.com/knowledgesea/archive/2012/10/08/2715350.html 一. 为了页面更有利于seo优化,url重写程序需要做出 ...