【docker】拉取一个基础镜像然后制作自己的镜像并复用

今天下午,我再一次地被部署一个模型时因为没有网络而导致的复杂无比的环境依赖而折腾的手忙脚乱。因此,我觉得必须要把docker的基本操作路线打通一下了。

软件环境
docker:19.03.8
操作系统:CentOS7

1. 问题说明

我用python写了一个简单的算法服务,要部署到linux操作系统下,需要用到很多依赖包。为了简便起见,可以将这个算法服务打包成docker镜像,然后发布。这样只需要配置好了docker环境,做好端口映射,基于该镜像启动容器即可调用。

2. Step-by-step

2.1 拉取一个基础操作系统

我的理解是,python环境要基于一个操作系统而运行。这就好比必须要有水,船才能行驶。对于python的“水”,我选择了ubuntu。当然也可以选择linux的其他发行版本,这里不做讨论。

拉取的操作是非常简单的,也不会有问题:

docker pull ubuntu

拉取成功之后,可以查看一下:

docker images

2.2 基于镜像启动一个容器

我的docker是装在centos虚拟机上的,虚拟机可以访问网络,为了确保生成的容器可以访问网络,在执行docker run命令时,需要注意设置一下参数:

docker run -it --network host ubuntu /bin/bash

与一般的操作不同的是,这里我指定了--network的值,这个参数的默认值是bridge,如果不加更改,在我的尝试中容器内是无法访问网络的。参数值host的意思就是说,容器可以和其所在主机共用一个网络。

2.3 从apt-get到conda

进入容器之后,就需要安装python环境了。为了方便python包管理,强烈建议利用conda!同时,为了减小体积,建议安装Miniconda。

如无意外,基础的ubuntu镜像里面可连接网络的就只有apt-get了,而这个命令是无法安装conda的。所以,我们需要先安装wget命令:

apt-get update  # 同步一下本地的包列表,这是一个良好的习惯。
apt-get install wget

安装完wget之后,接着就可以从网络上下载Miniconda的安装包了(网络真是个好东西啊):

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

Miniconda安装包的路径可以去官网找到,还有各种不同的python版本,就不多说明了。

这样,下载的*.sh文件就出现在了当前路径下。接下来是安装:

sh Miniconda3-latest-Linux-x86_64.sh

按几次回车,一路采用默认的设置就好。

安装完成之后,可能需要重新生效一下配置文件(如果你没有按照默认设置而是修改了conda的安装路径,那么下面的路径也可能改变,我没试过,需要注意):

source /root/.bashrc

好了,至此,python环境就安装好了,接下来就是安装需要的第三方包,不管是用pip还是conda就随心所欲吧,因为联网了(网络真是个好东西啊!)。

2.4 生成镜像

当我们在容器里面的工作完成之后,输入exit跳出容器,然后利用docker commit命令基于该容器生成一个新的镜像:

docker commit -a "An author name" d23ss my-first-image 

当然,不指定-a也是没有问题的。想了解每一个参数的意思,查看帮助文档吧,这个命令很简单。

2.5 镜像到文件

最后一步,就是将镜像保存为文件:

docker save -o /a-python-base-image dsx21

-o指定了输出文件的地址,dsx21是新生成的镜像的唯一标识(实际上只是唯一标识的前几位,只要能够与其他镜像区分,只取一位也是可以的。容器也是同理)。

3. 未完待续

上面罗列了大概的流程,当然不够全面,有一些内容我没写,例如将镜像文件从虚拟机里面考到主机上,我觉得这个没啥难度了。还有一些我准备下次再写,就是端口映射问题。因为这确实是个问题,我还没有搞懂。

下一篇文章,我将用一个例子把这个流程走通,即:在容器内利用flask部署一个服务,容器外进行GET/POST请求。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芳樽里的歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值