Ubuntu使用小教程03——Docker部署(python)


Docker及其部署

1 Docker是什么?

  • docker官网:https://www.docker.com/
  • docker hub官网:https://www.docker.com/products/docker-hub
  • docker源码:https://github.com/docker/docker-ce
  • docker教程:https://www.runoob.com/docker/docker-tutorial.html

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

2 我们为什么选择Docker?

  • 算法
    • 目前我们的算法,有很多都是增量开发或者迭代开发的,需要持续集成、发布。
    • 开发环境、测试环境和客户环境不一致。
    • 需要有算法及相应环境的管理平台。
    • 有多平台、分布式部署需求。
  • 平台

3 如何通过Docker部署我们的算法?

  • 必须了解的几个概念:

    • 镜像:一种面向Docker引擎的只读模板,包含文件系统
    • 容器:类似轻量级的沙箱,Docker利用容器来运行和隔离应用。它是从镜像创建的应用运行实例,可以将其启动、开始、停止和删除,而容器间互相不可见。
    • 仓库:类似代码仓库
    • DOCKERFILE:一个文本格式的配置文件,可以使用dockerfile快速创建自定义的镜像。
  • 必须了解的几个关系:

    • Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统。
    • 使用docker search可以搜索远程仓库中共享的镜像,默认搜索docker hub官方仓库中的镜像。

3.1 利用DOCKERFILE打包镜像

1 创建一个目录,eg:docker
2 将要打包的代码放在docker文件夹里
3 生成reqirements.txt,即代码所需的第三方包列表放到docker文件夹里

  • reqirements.txt生成方法一:
    (这种方法的好处是可以生成代码相关第三方包列表,但是conda安装的包就没有,需要手动加)
    - 安装pipreqs包
    - 执行pipreqs  E:\code\fire\fire_detection\workstation --encoding=utf-8
  • reqirements.txt生成方法二:
    - conda list -e > requirements.txt
  • 效果如下图,需要指定版本号
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ep1qHVgF-1605842867057)(en-resource://database/1334:1)]

4 创建Dockerfile(就叫这个名字)
如下:

FROM python:3.7.0
MAINTAINER puffy
ENV TZ Asia/Shanghai
COPY ./fire_detection fire_detection
COPY requirements.txt requirements.txt
RUN python -m pip install --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
RUN apt update
WORKDIR ./fire_detection/bin
CMD ["echo Hello Container"] 
  • 第一行FROM必须指定基础镜像:可以是python,也可以是ubuntu,centos
  • MAINTAINER是维护者信息
  • RUN是镜像操作指令,RUN后面的命令语法规则和你指定的容器内操作系统一致,默认ubuntu
  • ENV 可以指定环境变量,TZ为时区
  • COPY 将宿主机上的文件复制到容器的指定目录下
  • WORKDIR 运行容器默认进入的路径
  • CMD 运行容器默认执行的命令,一个dokcerfile只能制定一个cmd,但是后期运行容器的时候还可以重新指定

5 前期的准备工作至此就做好了,效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgrtQ25U-1605842867060)(en-resource://database/1330:1)]
(这里面的share_data是容器和本机的共享文件夹,可以不放在这个目录下,具体后面再说)
6 挂载盘

  • 很多情况下我们需要将容器内生成的数据保存在宿主机上,那么就需要在容器上挂载一个本地盘
  • windows:
    • windows运行dokcer需要借助Oracle VM VirtualBox,当运行docker的时候会在VirtualBox中自动创建名字为【default】的linux虚拟机。
    • 先使虚拟机保持退出状态,点击设置
    • 点击共享文件夹,设置本地共享文件夹,这样就在windows环境创建了共享文件夹
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PukuxJa1-1605842867062)(en-resource://database/1342:1)]
  • linux
    • linux下无需上述共享文件夹创建操作,直接在运行的容器时候指定就可以。

(下面所有的命令windows,linux下通用)
7 创建镜像

  • 打开docker客户端
  • 进入之前创建的docker文件夹
  • 执行下面命令(注意那个点“.”)
    docker build -t 镜像名:版本 .

8 查看镜像

  • 通过这个命令可以看到镜像的id
    docker images

9 创建容器

  • 直接运行,此时会执行dockefile指定的CMD:
docker run 镜像名:版本(镜像id) 
  • 指定命令运行:
docker run 镜像名:版本(镜像id) 命令
  • 启动bash终端,允许用户交互
docker run -it 镜像名:版本(镜像id) /bin/bash
  • 启动bash终端,允许用户交互,挂载本地盘
docker run -v /share_test:/docker_test -it 镜像名:版本(镜像id) /bin/bash

10 查看容器

  • 查看所有容器
docker ps -l
  • 查看运行中的容器
docker ps

11 停止容器

  • 停止某个容器
docker stop 容器id 
  • 停止所有容器
docker stop $(dokcer ps -aq) 

12 重启一个已经退出的容器

docker exec -it 容器id /bin/bash 

13 删除容器

  • 删除容器之前要先停止容器
docker rm 容器id 
docker rm $(docker ps -aq) 

3.2 通过容器打包镜像

1 从dokcer hub上面拉一个centos7镜像(因为linux版本的PIE是基于centos7)

docker pull centos:7

2 查看镜像,获取centos7的镜像id
3 创建容器,并进入交互模式
4 安装PIE依赖的各种环境
5 退出容器
6 查看容器id
7 将容器保存为镜像

docker commit <容器id>  <镜像名:版本>

8 查看镜像,获取新生成镜像的id

3.3 上传DockerHub

  • 上面两种方法运行之后都可以得到目标镜像。我们希望可以把这个镜像部署在各种平台,各个地方。需要把镜像传到docker hub
  • 首先需要在docker hub上注册一个账户,再申请一个仓库(每个人可以有很多个共有仓库,但是只能有一个私有仓库)
  • 在本地docker客户端登录
docker login
  • 修改本地镜像的名字为仓库名:username/fire-detection:版本(如果你很有自信,可以在一开始打包的时候就用这个名字)
docker tag IMAGEID(镜像id) USERNAME/REPOSITORY:TAG(仓库:标签)
  • 执行推送
docker push username/fire-detection:latest
  • 执行拉取
docker pull username/fire-detection:latest

4 细节

  • 上面版本/标签不指定会默认latest
  • (镜像id) 和(镜像名:版本)可互相替换
  • (容器id) 和(容器名)可互相替换
  • docker可以有python接口,可以通过python实现容器的集中控制
  • 还有很多强大的docker管理工具,可以可视化的看容器的运行状况:citadel、Shipyard、Kubernetes等。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值