制作Docker镜像

前言

因为最近在做大数据分析大作业,要求将算法封装进 Docker ,因此临时学了一下 Docker 方面的知识,在这里简单记录一下。

Docker 安装

Docker 安装比较简单,可以参考网上教程

Docker 架构

使用 Docker 前需要首先理解 Docker 的架构,因为以前自己只使用过 Vmware/VirtualBox 之类虚拟机,所以之前对 Docker 的理解也跟对 Vmware/VirtualBox 认识差不多,但学习之后发现他们还是有很大区别的, Docker 中融汇了面向对象的思想。网上有两张图对初学者很友好,让人很容易理解 Docker 架构思想:

docker架构
docker架构
  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
  • Docker 容器通过 Docker 镜像来创建。
  • 容器与镜像的关系类似于面向对象编程中的对象与类。
Docker 面向对象
容器 对象
镜像

理解了上面几句话,大概就能跟我一样简单使用了,Docker hub 仓库其实就相当于打包了很多常用的 Docker 镜像,我们可以直接 pull 下来,启动成容器来在本地跑,省去了很多搭环境浪费的时间。

制作 Docker 镜像

当然有时候我们还需要自己造轮子,按自己的需求、逻辑来封装一个镜像来给别人使用等,所以这时候就需要学会编写 Dockerfile 了,关于 Dockerfile 的编写这里有个博客简单介绍了一些语法规则,对于我这次的任务来说已经够用了,如果任务更复杂就需要参考官方文档来好好研究啦。下面是我为这次封装算法编写的 Dockerfile :

from continuumio/anaconda3      # 继承 continuumio/anaconda3 镜像
MAINTAINER fighter fighterhit@163.com
COPY code  /root/             # 把 code 文件夹复制到镜像内部 /root 下
WORKDIR /root
CMD jupyter notebook --ip=0.0.0.0 --allow-root # docker run 时容器内执行的命令

写好 Dockerfile 后执行 build 命令生成镜像:

docker build . -t fighter:lastest

导入/导出 Docker 镜像

将镜像导出为 tar 包:

docker save -o BDProject.tar fighter:latest

导入 tar 包:

docker load < BDProject.tar

给 Vmware 增加磁盘

因为自己是在 Vmware 虚拟机内做的,在导出制作的 docker 镜像时中途出错,显示磁盘空间不够,后来给 VMWare 加了一个磁盘执行df -h也没有显示增加的磁盘,后来发现还需要格式化并挂载磁盘,详细过程见扩展或者添加硬盘给VMware的Linux操作系统

  1. 查看分区

    fdisk -l
    

    添加完磁盘后执行上述命令会看到未分区的 dev/sdb

  2. 创建分区

    fdisk /dev/sdb
    
  3. 重启 linux,并格式化
    对于添加新硬盘的方法执行:mkfs.ext4 /dev/sdb1格式化

  4. 开机挂载

    • 如果设置root登录可以直接修改“etc/profile”文件使每次系统开机自动挂载该分区到“/disk”目录下。我们再该文件的末尾添加“mount /dev/sdb1/disk”,或者mount/dev/sda4 /disk保存重启系统。
    • 或者更加通用专业的方法修改/etc/fsrab文件加入/dev/sda4 /disk4 ext2 defaults 0 0,并保存,实现开机自动挂载。
      这时我们可以查看/disk文件的磁盘空间会是很大的,我们可以将一些不常用的大容量文件放在该目录下以节省系统的磁盘空间。

参考:

docker镜像的导入和导出
Docker 容器镜像删除
虚拟机VMware新增硬盘无法识别问题
如何扩展或者添加硬盘给VMware的Linux操作系统

推荐阅读更多精彩内容