制作Docker镜像
2016-10-07 10:25
134 查看
三种方式:
一、在基础镜像之上做了更改之后,用docker commit提交制作镜像;
二、借助febootstrap工具,指定要安装的包、操作系统版本以及软件仓库路径制作镜像文件的目录,然后用导入(import)的方式生成docker镜像;
三、通过Dockerfile制作镜像。
制作基础docker镜像:
第一步:设置docker镜像源
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,用来制作centos镜像,到时候会生成个centos的镜像。
yum -y install docker-io;如果没有安装docker,则需要先安装docker
service docker start ;启动docker
yum -y install febootstrap;制作docker镜像工具
第三步:作CentOS镜像文件centos6-image目录
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/
上一步执行后会生成一个centos6-image文件目录,上面命令中参数 -i 后面的都是基础镜像中安装的一些服务。如果你不想要这么多服务(因为把所有服务安装后镜像会变的非常大)可以只安装一些基本的,必不可少的服务。centos6是指版本,centos6-image是生成的目录名称。
第四步:这时root目录下没有任何文件,也不没有隐藏的点文件,如:.bash_logout .bash_profile .bashrc如果这时制作出来的镜像使用ssh登录,会直接进入根目录下,而一般镜像都是进入root目录下的,所以可以在centos6-image目录的root目录把.bash_logout .bash_profile .bashrc这三个文件设置一下。
cd centos6-image && cp etc/skel/.bash* root/
第五步:生成最基础的base镜像
cd centos6-image && tar -c .|docker import - centos6-base
第六步:查看镜像,也可以直接进入centos6-base查看
docker images ;这个是查看所有生成的镜像
docker run -i -t centos:centos6 /bin/bash;进终端(没有ssh服务),-i 分配终端,-t表示在前台执行,-d表示在后台运行
根据基础镜像制作ssh的docker镜像:
制作ssh登录镜像,最主要的就是Dockerfile(当然这里说的就是Dockerfile这种方法),在某个目录中新建一个Dockerfile文件(命名一定要为Dockerfile)。
下面来分析下Dockerfile文件:
#Dockerfile
FROM centos6-base #表示把某个镜像作为基础镜像,相当于面向对象语言中继承,表示生成的镜像里面包含了基础镜像的一些服务
MAINTAINER yzh #这是个镜像作者信息
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
#上面几行都是配置ssh登录目录和登录验证的,而ssh的安装是在基础镜像centos6-base中完成的(-i openssh-server -i openssh-clients)
EXPOSE 22 #表示开启哪个端口号,22号端口是给ssh服务使用的;如果不需要端口号可以注释掉这行
RUN echo 'root:redhat' | chpasswd #这是修改root密码,其实这种方法不是很好,因为这是设置root密码,不是更改
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 #设置开启的服务,每个镜像只能有一个CMD有效
#End
根据Dockerfile文件生成镜像:docker build -t 生成镜像名称 Dockerfile位置;假设:镜像名为centos6-ssh,Dockerfile在/home/yzh/ssh里面
cd centos6-images;docker build -t centos6-ssh /home/yzh/ssh #就可以生成一个centos6-ssh镜像了
用docker images查看下所有镜像,你会看到两个镜像:centos6-base和centos6-ssh。这样centos6-ssh就是ssh登录的docker镜像了。
镜像的测试步骤命令:
当制作完一个镜像后紧接着就要测试下这个镜像是否正确,里面的一些服务是否可用。我目前没有用到数据存储及迁移备份,所以就用简单的步骤测试下:
第一步:查看镜像信息,可以看到有镜像名称和镜像的id以及生成的时间。
docker images
第二步:用测试镜像生成一个容器,可以根据镜像名称或者镜像id来生成。最后会得到一连串数字和字母组成的信息,就是容器标识ID。
docker run -d xxx(镜像名或者id)
第三步:利用上一步生成的容器ID,来查看测试镜像生成的容器信息。这一步会得到有关容器的详细信息,其中包括iP地址。
docker inspect xxxx(容器id)
第四步:利用上一步中得到的ip地址,ssh登陆。
ssh root@xxxx(容器ip)
第五步:测试服务,这里ssh服务在登陆时已经测试完了。如果是其他镜像,比如mysql:那么这一步就是进入镜像测试MySQL服务了,不同服务用不同方法测试。
一、在基础镜像之上做了更改之后,用docker commit提交制作镜像;
二、借助febootstrap工具,指定要安装的包、操作系统版本以及软件仓库路径制作镜像文件的目录,然后用导入(import)的方式生成docker镜像;
三、通过Dockerfile制作镜像。
制作基础docker镜像:
第一步:设置docker镜像源
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,用来制作centos镜像,到时候会生成个centos的镜像。
yum -y install docker-io;如果没有安装docker,则需要先安装docker
service docker start ;启动docker
yum -y install febootstrap;制作docker镜像工具
第三步:作CentOS镜像文件centos6-image目录
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/
上一步执行后会生成一个centos6-image文件目录,上面命令中参数 -i 后面的都是基础镜像中安装的一些服务。如果你不想要这么多服务(因为把所有服务安装后镜像会变的非常大)可以只安装一些基本的,必不可少的服务。centos6是指版本,centos6-image是生成的目录名称。
第四步:这时root目录下没有任何文件,也不没有隐藏的点文件,如:.bash_logout .bash_profile .bashrc如果这时制作出来的镜像使用ssh登录,会直接进入根目录下,而一般镜像都是进入root目录下的,所以可以在centos6-image目录的root目录把.bash_logout .bash_profile .bashrc这三个文件设置一下。
cd centos6-image && cp etc/skel/.bash* root/
第五步:生成最基础的base镜像
cd centos6-image && tar -c .|docker import - centos6-base
第六步:查看镜像,也可以直接进入centos6-base查看
docker images ;这个是查看所有生成的镜像
docker run -i -t centos:centos6 /bin/bash;进终端(没有ssh服务),-i 分配终端,-t表示在前台执行,-d表示在后台运行
根据基础镜像制作ssh的docker镜像:
制作ssh登录镜像,最主要的就是Dockerfile(当然这里说的就是Dockerfile这种方法),在某个目录中新建一个Dockerfile文件(命名一定要为Dockerfile)。
下面来分析下Dockerfile文件:
#Dockerfile
FROM centos6-base #表示把某个镜像作为基础镜像,相当于面向对象语言中继承,表示生成的镜像里面包含了基础镜像的一些服务
MAINTAINER yzh #这是个镜像作者信息
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
#上面几行都是配置ssh登录目录和登录验证的,而ssh的安装是在基础镜像centos6-base中完成的(-i openssh-server -i openssh-clients)
EXPOSE 22 #表示开启哪个端口号,22号端口是给ssh服务使用的;如果不需要端口号可以注释掉这行
RUN echo 'root:redhat' | chpasswd #这是修改root密码,其实这种方法不是很好,因为这是设置root密码,不是更改
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 #设置开启的服务,每个镜像只能有一个CMD有效
#End
根据Dockerfile文件生成镜像:docker build -t 生成镜像名称 Dockerfile位置;假设:镜像名为centos6-ssh,Dockerfile在/home/yzh/ssh里面
cd centos6-images;docker build -t centos6-ssh /home/yzh/ssh #就可以生成一个centos6-ssh镜像了
用docker images查看下所有镜像,你会看到两个镜像:centos6-base和centos6-ssh。这样centos6-ssh就是ssh登录的docker镜像了。
镜像的测试步骤命令:
当制作完一个镜像后紧接着就要测试下这个镜像是否正确,里面的一些服务是否可用。我目前没有用到数据存储及迁移备份,所以就用简单的步骤测试下:
第一步:查看镜像信息,可以看到有镜像名称和镜像的id以及生成的时间。
docker images
第二步:用测试镜像生成一个容器,可以根据镜像名称或者镜像id来生成。最后会得到一连串数字和字母组成的信息,就是容器标识ID。
docker run -d xxx(镜像名或者id)
第三步:利用上一步生成的容器ID,来查看测试镜像生成的容器信息。这一步会得到有关容器的详细信息,其中包括iP地址。
docker inspect xxxx(容器id)
第四步:利用上一步中得到的ip地址,ssh登陆。
ssh root@xxxx(容器ip)
第五步:测试服务,这里ssh服务在登陆时已经测试完了。如果是其他镜像,比如mysql:那么这一步就是进入镜像测试MySQL服务了,不同服务用不同方法测试。
相关文章推荐
- 制作 leanote docker 镜像
- [Docker] - 制作你自己的镜像
- 使用Dockerfile制作Docker镜像
- Docker制作数据库中间件Mycat源码镜像
- Docker 制作mysql镜像
- 006_制作第一个Docker镜像
- 使用Dockerfile制作自己的Docker镜像
- 制作基于centos7的mysql的docker镜像
- docker 制作mysql镜像(一)
- Docker安装初试&&制作centos6.5基础镜像
- docker 镜像制作及dockerfile
- 【Docker】制作一个支持SSH终端登录的镜像
- 制作tomcat的docker镜像
- Laravel Docker镜像制作:ubuntu16.04+php7.0.8+nginx
- 在Centos7 系统中使用supermin制作CentOS6 的Docker镜像
- Docker 从零开始制作基础镜像[centos]
- 新手超详细记录:Docker for Windows打包制作tomcat镜像并部署java web项目
- (五)Docker镜像管理2之镜像制作
- 制作ubuntu16.04的docker镜像
- docker镜像制作之Dockerfile文件---snort