今天下午,我再一次地被部署一个模型时因为没有网络而导致的复杂无比的环境依赖而折腾的手忙脚乱。因此,我觉得必须要把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请求。

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

  1. [Docker]Docker拉取,上传镜像到Harbor仓库

    需求 因为项目的需求,需要制作一个基于tomcat的镜像.那么前提就是,需要有tomcat的基础镜像. 怎么做 我的思路跑偏了,本来以为是需要将tomcat下载下来,然后通过docker命令,让它成为 ...

  2. Docker 拉取镜像及标签 pull | tag

    Docker 拉取镜像及标签 pull | tag 重翻Fabric项目的源码,发现Docker部分内容,有很多不尽理解的地方,看着看着,就看到使用docker pull拉取Fabric镜像及使用do ...

  3. docker 拉取镜像、创建并启动容器

    获取镜像 默认情况下,使用docker pull命令,会从官方的Docker Hub库中将镜像拉取到本地. 首先介绍这条命令的格式: docker pull [OPTIONS] <仓库名> ...

  4. Docker拉取RabbitMQ镜像运行启动

    Docker拉取rabbitmq镜像运行启动 RabbitMQ简介 一.命令拉取 二.获取镜像 三.运行命令参数 四.查看正在运行的容器 五.客户端访问 最后 RabbitMQ简介 以熟悉的电商场景为 ...

  5. Docker拉取镜像报错error pulling image configuration

    Docker拉取镜像报错error pulling image configuration 在制作docker镜像的时候出现如下报错: xxx@ubuntu:~/Desktop/a$ docker b ...

  6. 配置了docker镜像加速,但是docker拉取镜像速度还是很慢

    首先影响docker拉取镜像加速的原因有几个,挨个进行检查后就会发现问题所在 1.添加docker的阿里yum源 tee /etc/yum.repos.d/docker.repo <<-' ...

  7. docker拉取RabbitMq镜像并安装

    RabbitMQ安装入门篇 文章目录 前言 一.Docker拉取RabbitMq镜像 二.docker下启动RabbitMq容器 三.查看RabbitMq是否启动 总结 前言 这篇文章为了方便初学者入 ...

  8. docker 怎样用一个基础镜像然后做一个新的镜像

    docker 怎样用一个基础镜像然后做一个新的镜像 我们知道docker 镜像必须有一个基础镜像,那么如何从一个基础镜像制作出自己需要的镜像呢? docker load 基础镜像 ------load ...

  9. docker 拉取oracle_Docker 拉取 oracle 11g镜像配置-Go语言中文社区

    话不多说 开始记录docker拉取阿里的oracle11g 镜像并进行配置, 用pl/sql 可以登录为最终结果 navicat连接是在最后一步 但是根据这个进行配置会有一些问题,所以写这篇记录一下, ...

最新文章

  1. java 查询 代码_java使用es查询的示例代码
  2. [概统]本科二年级 概率论与数理统计 第五讲 二元随机变量
  3. jQuery 人脸识别插件,支持图片和视频
  4. .net MVC4.0项目发布到阿里云虚拟主机中遇到的问题。
  5. sales status change in ERP
  6. Flutter之window系统下配置开发环境以及在Android Studio里面运行hello word
  7. 服务器机房新风系统,某机房新风系统设计方案参考
  8. 网站程序安全分析器 VB源码
  9. 【Mac】Mac下安装MySQL优化工具 percona-toolkit 报错 Error: Failed to download resource openssl@1.1
  10. oracle em 时区更改不了,Oracle dbtimezone与os时区不一致的解决办法
  11. oracle expdp作业外表报错ORA-20011KUP-11024ORA-29913
  12. Java多线程+IO流+网络编程+MySQL+JDBC编程实现多人联机版坦克大战
  13. 高德地图API定位失败(浏览器定位、IP定位)
  14. PLC通讯实现-C#实现西门子PLC串口通讯W95_S7(四)
  15. eclipes 快捷键
  16. 关于 Windows 10 下原生输入法输入字母和数字时字间距突然变大的解决方法
  17. 学习USART自闭实录(stm32F411RE)Stm32cubemx
  18. 复旦计算机博士论文,2019年复旦大学历届全国优秀博士学位论文入选情况.doc
  19. php mine类型大全
  20. uni-app微信小程序结合腾讯地图获取定位导航以及城市选择器

热门文章

  1. 图像处理----lena图像的由来
  2. uicolor swift_Swift中的UIColor
  3. 面对“耳鼻喉专科医院营销乏力”的正确做法,快收了它
  4. mysql读写分离优点_mssql2008 读写分离_mysqlproxy读写分离_读写分离的好处
  5. Mybatis配置分页插件
  6. 无CUDA支持的dlib库的安装与使用
  7. 13. Nginx 访问认证
  8. 原生js的scroll和touch事件
  9. unordered_multimap学习之查找操作和观察器操作count,find, contains(C++20),equal_range,hash_function, key_eq
  10. 初入python,尝试获得A股交易数据(3)——利用tushare获取A股大单交易数据