β

Docker基础镜像-从iso到image

Mindy 390 阅读
操作系统:centos 6.5及以上  
一、安装:
、配置epel源: 

yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6  
、安装 docker-io febootstrap 

# febootstrap用来制作centos镜像的工具
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
yum install docker-io febootstrap -y  
、安装完成后挂cgroup文件系统

vim /etc/fstab  
添加一行:  
none            /sys/fs/cgroup      cgroup  defaults    0 0  




这一步似乎不是必须的,docker安装过程自动会挂载cgroup。重启也会自动挂载cgroup

centos 默认并没有挂载cgroup文件系统,安装docker启动之后会cgroup会自动挂载到/sys/fs目录中
?
、Docker启动

 chkconfig docker on
 docker 开机后会自动启动,如果没有启动可以手动启动:docker -d & 或者service docker start 
二、使用iso来制作一个Centos 6.5 镜像
、使用febootstrap制作CentOS镜像文件centos6-image目录

[html] view plain copy 在CODE上查看代码片派生到我的代码片
febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/  
 这里用的是http://mirrors.aliyun.com/centos/6/os/x86_64/这个镜像,我们可以使用自己的iso文件挂载到本地文件系统。
在Linux中挂载ISO文件 

mount -o loop filename.iso /cdrom
其中 filename.iso 是需要挂载的 ISO 文件的文件名,而 /cdrom 则是作为挂载点的目录,也就是说挂载之后 ISO 文件中的内容可以在该目录中找到,需要注意的是如果使用其他目录的话需要保证该目录已经存在
-i 镜像所需要安装的工具:把-i后面的参数传递给yum来实现安装,上面安装了ssh服务

centos6 是centos版本

centos6-image 是指定目录

命令的执行完成后,会在当前目录下生成一个目录centos6-image
 

[html] view plain copy 在CODE上查看代码片派生到我的代码片
bash-4.1.2#  
bash-4.1.2#  
bash-4.1.2# ls   
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var  
bash-4.1.2# ls -a root  


这时root目录下没有任何文件,也不没有隐藏的点文件,如:.bash_logout  .bash_profile  .bashrc

如果这时制作出来的镜像使用ssh登录,会直接进入根目录下,如下:


bash-4.1.2#
bash-4.1.2#
bash-4.1.2# ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
bash-4.1.2# ls -a root
. ..

这些文件可以自己新建。 为了避免这种情况,可以在centos6-image目录的root目录把.bash_logout  .bash_profile  .bashrc这三个文件设置一下
、下面来创建一个基本的镜像

cd centos6-image && tar -c .|docker import - centos6-base  

命令完成后,使用docker images来查看
docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6-base          latest              a01c3d440db8        1 minutes ago        311.3 MB

此时一个基本的镜像已完成
、下面来用Dockerfile文件来创建一个可以ssh登录的镜像

#Dockerfile  
FROM centos6-base  
MAINTAINER zhou_mfk <zhou_mfk@163.com>  
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key  
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key  
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd  
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh  
EXPOSE 22  
RUN echo 'root:redhat' | chpasswd  
RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6  
RUN yum install tar gzip gcc vim wget -y  
ENV LANG en_US.UTF-8  
ENV LC_ALL en_US.UTF-8  
CMD /usr/sbin/sshd -D  
#End  
、使用上面的Dockerfile文件来创建一个可ssh登录的镜像

docker build -t centos6-ssh .

build: Build a Container from a Dockerfile 这个是创建一个容器从Dockerfile文件

docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

. 表示在当前目录下

docker build -t centos6-ssh /root/images/abc  这个表示Dockerfile文件在:/root/images/abc下

命令执行完成后,centos6-ssh镜像就创建完成了,

查看一下:

docker images

REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos6-ssh           latest              b8ca70e7adee        1 hours ago        311.3 MB

centos6-base          latest              a01c3d440db8        2 hours ago        311.3 MB

下面创建一个容器来登录下:

docker run -d -p 127.0.0.1:2222:22 centos6-ssh

ssh root@127.0.0.1 -p 2222

输入密码:redhat

即可登录了。


作者:Mindy
我是好人,好人就是我,我就是一码农Mindy
原文地址:Docker基础镜像-从iso到image, 感谢原作者分享。