制作各种docker镜像
制作基础docker镜像
制作基础镜像网上有很多实例,可以参考下开源中国的这篇文章:http://my.oschina.net/feedao/blog/223795和51博客中的这篇文章:http://zhou123.blog.51cto.com/4355617/1439895,https://www.cnblogs.com/shijunjie/p/10678864.html下面的基础镜像制作大部分就是参考了上面的文章。非常感谢他们,转载时请保存这两篇文章的完整信息。
第一步:设置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镜像了。
镜像的测试步骤命令
镜像和容器的删除
制作Apache镜像
- #Dockerfile
- FROM centos6-ssh
- MAINTAINER <a target=_blank href="http://blog.csdn.net/yuzhihui_no1">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
- [supervisord]
- nodaemon=true
- [program:sshd]
- command=/usr/sbin/sshd -D
- [program:httpd]
- command=/sbin/service httpd start
- #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=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin'>> /etc /profile
- RUN echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib'>> /etc/profile; echo 'export JAVA_HOME JRE_HOME PATH CLASSPATH ' >> /etc/profile
- 上面是配置jdk环境变量
- RUN source /etc/profile;yum clean all #使环境变量生效
- ADD HelloWorld.java /home/java/HelloWorld.java #加入一个简单的Java测试程序
- CMD /usr/sbin/sshd -D
- #End
用容器快速制作镜像
把镜像拉到openstack中测试
对docker镜像进行打包和解包
docker 存出镜像需要注意的一个问题
正确:docker save <repository>:<tag> -o <repository>.tar
错误:docker save <IMAGE ID> -o <repository>.tar(会导致载入镜像后名字标签都为<none>)
如果docker载入新的镜像后repository和tag名称都为none
那么通过tag的方法增加名字标签
docker tag <IMAGE ID> <repository>:<tag>
原文链接:https://blog.csdn.net/qq_15988503/article/details/83866544
保存镜像为文件
docker save -o 要保存的文件名 要保存的镜像
举例:
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# ls aaa.cap install.sh mobile-1.0.0-SNAPSHOT.jar sa_recovery.log [root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE bb v1.0 3b8d26737bcb 10 minutes ago 202MB centos latest 9f38484d220f 3 weeks ago 202MB java latest d23bdf5b1b1b 2 years ago 643MB [root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker save -o cc.tar bb:v1.0 [root@iZbp16cdvzk4rhl0vn1gedZ ~]# ls aaa.cap cc.tar install.sh mobile-1.0.0-SNAPSHOT.jar sa_recovery.log
导入文件为镜像
docker load --input 文件
或者
docker load < 文件名
举例:
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker rm -f aa aa
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker rmi centos:latest bb:v1.0
Untagged: bb:v1.0
Deleted: sha256:3b8d26737bcb99aa12ef55c6e9620720b0ad85ecdee9cd52fbb5d5e1a2da2591
Untagged: centos:latest
Untagged: centos@sha256:8d487d68857f5bc9595793279b33d082b03713341ddec91054382641d14db861
Deleted: sha256:9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1
Deleted: sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
java latest d23bdf5b1b1b 2 years ago 643MB
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker load < cc.tar
d69483a6face: Loading layer [==================================================>] 209.5MB/209.5MB Loaded image: bb:v1.0
[root@iZbp16cdvzk4rhl0vn1gedZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE bb v1.0 3b8d26737bcb 15 minutes ago 202MB java latest d23bdf5b1b1b 2 years ago 643MB


浙公网安备 33010602011771号