• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > 详解制作各种docker镜像

详解制作各种docker镜像

作者:庾志辉 字体:[增加 减小] 来源:互联网

本文主要包含docker制作镜像,如何制作docker镜像,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 ps -a

找出需要删除的容器,让它停止:docker stop xxx(CONTAINER ID)

删除该容器:docker  rm  xxx(CONTAINER ID)

 删除所有容器:

如果你要删除所有的容器就可以不用那么麻烦了,直接停止所有容器的运行:docker stop $(docker ps -a -q);然后删除所有容器:docker rm $(docker ps -a -q);

删除镜像:

如果制作镜像失败,或者想重新添加功能,需要删除原来镜像,则用:docker images查看所有镜像;然后用:docker rmi xxx(镜像名或镜像id)

制作Apache镜像

分享下Apache镜像的制作,这个镜像稍微和基础镜像的制作不太一样。因为这个镜像起来以后要同时开启两个服务:ssh服务(必须的)和Apache服务,而Dockerfile中CMD只能有一句有效。所以要借助另外一种方法:supervisord;其他步骤一样,唯一不同的就是Dockerfile文件,这个Dockerfile是在ssh镜像为基础制造的(一般都是以ssh镜像为基础镜像,因为不管哪个镜像都需要ssh登陆的)

Dockerfile文件:

#Dockerfile 
FROM centos6-ssh 
MAINTAINER <a target=_blank href="http://blog.csdn.net/yuzhihui_no1" rel="external nofollow" >http://blog.csdn.net/yuzhihui_no1</a> 
 
EXPOSE 80 #为Apache服务开启服务端口 
RUN yum -y install httpd supervisor;chkconfig httpd on ; mkdir -p /var/log/supervisor 
ADD supervisord.conf /etc/supervisord.conf #把本地的文件拷贝到镜像系统中 
CMD ["/usr/bin/supervisord"] #执行supervisord.conf脚本文件 
#End 

RUN    xxx ;后面是跟着要执行的命令,这些命令就是在Linux中安装某个工具/软件/服务的命令了。这里引入supervisord.conf文件:

[supervisord] 
nodaemon=true 
 
[program:sshd] 
command=/usr/sbin/sshd -D 
 
[program:httpd] 
command=/sbin/service httpd start 

这样就可以同时启动两个服务了。其他步骤和基础镜像制作一样,但要记住supervisord.conf要和Dockerfile放在同一级目录下。

制作Java镜像

本来Java镜像可以和基础镜像一样制作的,但是发现安装jdk包或者在线获取jdk包时总是报错,所以我就到官网上下载了个jdk放到服务器上,然后用ADD命令加入到镜像系统中,在系统里面解压,最后删除jdk包,配置环境就可以了。

Dockerfile文件:

#Dockerfile 
FROM centos6-ssh 
MAINTAINER yzh 
 
RUN mkdir -p /usr/java;yum install -y tar 
ADD jdk-8u25-linux-x64.tar.gz /usr/java/ #把本地的jdk加到镜像系统中 
 
RUN echo 'export JAVA_HOME=/usr/java/jdk1.8.0_25'>> /etc/profile ; echo 'export JRE_HOME=/usr/java/jdk1.8.0_25/jre'>> /etc/profile; echo 'export PATH
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解制作各种docker镜像
  • 详解Docker基于已有的镜像制新的镜像

相关文章

  • 详解docker容器分配静态IP
  • 警告1909无法创建快捷方式VMware Workstation Pro.Ink的图文解决方法(附 VMware_workstation 12的安装方法)
  • Docker命令行与守护进程的交互方法
  • 生产环境中安全运行Docker容器
  • 如何给Docker配置官方国内加速镜像
  • Openstack 创建项目和虚拟机详细介绍
  • Docker系列之使用Docker Compose编排容器
  • Docker网络之单host网络及使用案例
  • VMWare安装Centos 6.9教程
  • 在Ubuntu15.04上安装Docker的步骤以及基本用法

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • openstack共享80、443端口的实例代码
    • Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
    • VMware的三种网络连接方式区别
    • Docker为网络bridge模式指定容器ip的方法
    • Docker CentOS7的系统上安装部署以及基础教程
    • docker测试时候命令无法补全的解决方法
    • Ubuntu Docker 源码编译(1.9.1 )详解
    • 详解Openstack环境准备
    • Openstack 节点维护详细讲解
    • 详解VMware接入Openstack—使用Openstack创建vCenter虚拟机

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有