一、准备项目

我写的是一个爬取某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 .

这样应该就没错了,最后报了个警告,有时间去了解了解...

继续输入代码查看是否创建成功

 我擦,怎么有这么多,因为我前面其实出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 文件即可,例如我的代理池,需要配置映射端口

官方文档

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐