docker怎么将宿主机系统生成镜像

 我来答
匿名用户
2016-10-23
展开全部
初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap

  epel6的源提供febootstrap的RPM包

  yum install docker-io febootstrap -y

  service docker start

  chkconfig docker --level35 on
复制代码
  制作CentOS6.6镜像目录

  febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base   <a href="http://centos.ustc.edu.cn/centos/6.6/os/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/os/x86_64/</a> -u <a href="http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/</a>
复制代码
  -i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)
  centos6 表示镜像的版本说明
  base 表示生成的镜像目录
  后面之后了系统安装源和更新源为USTC

  安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件

  进入base目录等于进入镜像的根目录

  [root@image ~]# cd base/

  [root@image base]# ls

  bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var
复制代码
  可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等

  把base目录把所有文件打包成二进制文件后导入docker创建为镜像

  cd ~/root/base/ && tar -c . | docker import - centos6:base
复制代码
  docker images 可以查看镜像的信息
  一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像
  cat Dockerfile

  FROM centos6:base

  MAINTAINER Lion "lioncui@163.com"

  VOLUME /var/lib/mysql

  RUN yum install mysql-server mysql -y

  RUN echo -ne "NETWORKING=yes\\nHOSTNAME=mysql" > /etc/sysconfig/network

  RUN echo -ne "bind-address = 0.0.0.0\\ndefault-storage-engine=innodb\\ninnodb_file_per_table\\n\

collation-server=utf8_general_ci\\ninit-connect='SET NAMES utf8'\\ncharacter-set-server = utf8" > insert

  RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert

  RUN echo -ne "/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe" >> /opt/mysql_start

  RUN chmod 777 /opt/mysql_start

  ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:

  WORKDIR /opt

  EXPOSE 3306

  CMD /bin/sh -c mysql_start
复制代码

  FROM 声明以centos:base镜像为基础
  MAINTAINER 声明镜像的维护者信息
  VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录)
  由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录
  RUN 在镜像中执行安装mysql
  在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件
  在my.cnf配置文件插入一些修改配置
  创建启动脚本
  声明环境变量
  制定默认工作目录
  EXPOSE 声明容器需要暴露的端口号
  CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务

  根据Dockerfile创建mysql服务镜像
  docker build --rm=true -t mysql:frist .
  查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式