docker使用及部署python项目

一:使用场景

假如我们要部署一个Python应用程序,要做哪些工作?

  • 首先需要python运行环境
  • 装完python之后,发现还要装mysql或者redis,或者其他的Python包
  • 如果服务器不用了,要换一台机器,重新来一遍环境吧

所以没有docker部署服务之前,搞得开发人员很蛋疼的点

  • 发布和部署低效又繁琐,经常需要人工介入
  • 环境的一致性难移保证
  • 在不同环境之间迁移的成本较高

而使用docker之后

  1. 软件构建容易,分发简单
  2. 应用得到隔离,依赖被解除
  3. 可以完美地用于 CI/CD
  4. 快速部署,测试完以后销毁也方便

接下来我们直接来认识一下docker的基础命令以及怎么使用docker,而不过多的介绍docker的各种优点(网上一搜一大堆)。
:_本次分享致力于让刚刚接触的新手快速的上手使用docker部署服务,并不涉及过多的命令以及多种秀操作的方法,而是最最基本的能够实现docker部署的操作。 _

二:安装与配置docker

1.在win10安装docker

  1. 在windows安装docker首先要开启虚拟化功能,开启此功能可以冲控制面板中的程序中-启用活关闭Windows功能中开启docker使用及部署python项目_第1张图片
    选择将Hyper-V开启docker使用及部署python项目_第2张图片
    2.安装docker
    首先下载Docker for Windows Installer,可以从我的百度云盘分享链接 中直接获取到获取码 ac34
    下载之后可以直接点击安装,安装之后会有鲸鱼标出现docker图标从私有库下载镜像需要设置地址:右键打开setting选择daemondocker使用及部署python项目_第3张图片
    在上面的红色框中添加自己的私有仓库地址,下面的框中可以添加加速器地址,可以使用http://hub-mirror.c.163.com加速器(自己随意选择)
    由于镜像文件频繁使用时会越来越大,可以选择将镜像文件改变存储路径:同样是在setting选择Advanced设置 docker使用及部署python项目_第4张图片
    这样基本的配置就完成了
    在cmd中查看一下是否可以正常使用 直接输入docker version会出现相关信息docker使用及部署python项目_第5张图片
    接下来我们开始正式的创建自己的docker镜像

三:简单的docker命令

  1. docker images:查看本机的镜像命令,查询到的镜像的基本信息docker使用及部署python项目_第6张图片
    REPOSITORY :表示镜像的名称
    TAG:表示镜像的标签
    IMAGE ID :表示镜像的id,docker随机生成
    CREATED :表示生成的时间,图上的第一个镜像就是四天前生成
    SIZE:表示镜像的大小

2.docker run -itd --name 起个服务的名字 镜像名称在这里插入图片描述
  -itd:表示后台启动,如果想正常显示启动使用 -it
  --name 服务名称:给你现在启动的镜像一个名称,如果启动的几次昂较多可以通过这个名称快速找到这个创建的服务
  -p 8000:7000:此次启动没有分配端口,可以在--name后添加此参数用来制定端口的映射,表示本机的8000端口映射到容器的7000接口。
3. docker exec -it 服务名称 /bin/bash:进入开启的服务的内部。
4. docker ps:查看运行的镜像,后面可以添加参数-a 用来查看包括后台运行的所有的运行镜像
5. docker stop 服务名称:停止正在运行的镜像,服务还是存在但是没有运行,可以再用docker start 服务名称再开启。
6. docker rm 服务名称: 删除运行的服务,服务已经被删除乌发重启或启动,只能重新通过docker run ······创建
7. docker rmi 镜像的名称:删除本地的镜像,当有下级关系的镜像时无法删除,想要强制删除可用docker rmi -f 镜像名称慎用,与数据库的 rm -f 类似。
8. docker pull 镜像地址:从镜像地址中将镜像下载到本地
9. docker push 镜像的名称:将本地的镜像push到私有库或者其他的镜像仓库。
10. docker login -u 用户名 -p 密码 url:登录镜像仓库
11. docker logout:登出

四:简单的dockerfile命令

dockerfile文件首先要创建一个名为:Dockerfile 的文件(无扩展名)
docker使用及部署python项目_第7张图片
内容例如:

# This is a comment
# 镜像来源
FROM sydn-ai:v2
# 指定工作目录
WORKDIR /usr/app 
# 启动命令
ENTRYPOINT ["./FlaskRun.sh"]
# 在shell终端种运行命令
RUN pip install numpy
RUN pip install pandas
COPY test.py /usr/app/test.py
...

FROM ...:后跟本地的镜像的名称。
WORKDIR ...:工作目录,镜像中的工作目录
ENTRYPOINT ...:制定启动的命令,例如指定上面的工作目录之后,工作目录下有一个 docker_mysql.py 文件,那么可以写为ENTRYPOINT ["python","docker_mysql.py"],与cmd中输入python docker_mysql.py相同,如果使用的镜像制定了工作目录与启动命令,则再次使用该镜像做相同的项目时则不需要再设置这两项(后续会详细解释)
RUN pip install --upgrade pip:意为安装包RUN pip install numpy即为安装numpy包。
COPY 本地路径 django-test:/DockerServer/:意为将本地路径下的某文件复制到运行的镜像服务名称为 django-test 的 DockerServer 文件下

五:创建docker镜像

创建镜像首先要有一个简单的镜像,然后一步步的丰富镜像的功能,进而部署自己的项目。DockerHub是远程镜像仓库,保存种各样的镜像,可以从DockerHub官网上搜索想要的镜像https://hub.docker.com/也可以在本机使用docker search name 查找 DockerHub上的镜像。

创建docker有两种方式:

  1.使用dockerfile生成镜像(推荐使用)

    使用一个新的命令docker build,从零开始来创建一个新的镜像。我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像

例1:假设我们现在电脑上有一个基础的镜像,想要部署一个向数据库中添加数据的简单项目,向数据插入数据的文件已经写好 名为:docker_mysql.py,内部有一个最简单的程序docker使用及部署python项目_第8张图片
那么我么现在来实现这个服务的部署。(其实没有简单不简单,代码的多少和复杂度和部署服务没有关系):
首先在同级目录下创建一个Dockerfile文件,当前目录结构为:
docker使用及部署python项目_第9张图片接下来我们丰富一下dockerfile的内容假设我们现在有一个基础的镜像 名称为docker-test:v1 并且镜像的根目录有一个名为DockerServer的文件夹,那么我们接下来写命令为:

# 从基础镜像 docker-test:v1 开始制作
FROM docker-test:v1 
# 将同级文件夹下的docker_mysql.py 拷贝到新的镜像的 DjangoServer文件夹下
COPY docker_mysql.py /DjangoServer
# 设置工作目录
WORKDIR /DjangoServer
# 设置启动镜像时的运行命令
ENTRYPOINT ["python","docker_mysql.py"]

然后运行cmd到当前文件夹docker使用及部署python项目_第10张图片
使用docker build 命令生成一个新的镜像:
docker build -t docker-test:v2 .:docker-test:v2 意为新创建的镜像的名称, 后面的 . 表示在当前路径下寻找dockerfile文件,也可以直接指定使用某个路径下的dockerfile文件,运行之后得到一个docker-test:v2的新的镜像,这时镜像的制作就完成了。
补充:上面说到的dockerfile文件的命令中的WORKDIR ...ENTRYPOINT ...不需要再次设置的情况为:现在2我们想要在docker_mysql.py文件中改动存入数据库的逻辑,改动完成后需要生成一个镜像那么这时候只需要以docker-test:v2为基础镜像即可,因为这是已经配置好环境并且指定过工作目录和启动命令的镜像,dockerfile文件内容为:

FROM docker-test:v2
# 将同级文件夹下的docker_mysql.py 拷贝到新的镜像的 DjangoServer文件夹下
COPY docker_mysql.py /DjangoServer

然后再docker build ...生成镜像即可,如果想要单独修改工作目录或者启动命令,在上面直接添加命令即可。

  2.直接生成镜像(后续在写,上边的先用着)

你可能感兴趣的:(docker)