设为首页 收藏本站
查看: 828|回复: 0

[经验分享] Docker数据管理与网络通信之镜像的创建方法

[复制链接]

尚未签到

发表于 2019-2-21 08:16:34 | 显示全部楼层 |阅读模式
Docker镜像的创建方法
  Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式。 一个完整的Docker镜像可以支撑一个Docker容器的运行,在Doker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像。
  创建镜像的方法有三种,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。

基于已有镜像创建
  基于已有镜像创建主要使用docker commit命令。实质就是把一一个 容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。
  命令格式: docker commit [选项] 容器ID 名称 仓库名称:[标签]

常用选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
  查看本地镜像,创建容器,将容器提交为新的镜像,需要记住该容器的ID号

docker images        //查看所有镜像
docker ps -a         //查看所有容器
docker create -it jasonlix/docker-cobbler /bin/bash       //创建容器
docker commit -m "new" -a "daoke" a2c2df6c8246 daoke:test      //创建一个新的镜像
docker images


基于本地模板创建
  通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz      //下载debian模板压缩包
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new       //将下载的模板导入为本地镜像
docker images | grep new         //查看本地镜像


基于Dockerfile创建
  Dockerfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。
  Dockerfile结构大致分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。
  在编写Dockerfile时,有严格的格式需要遵循:第一行必须使用FROM指令指明所基于的镜像名称;之后使用MAINTAINER指令说明维护该镜像的用户信息;然后是镜像操作相关指令,如RUN指令,每运行一条指令,都会给基础镜像添加新的一层;最后使用CMD指令,开指定启动容器时要运行的命令操作。

FROM镜像:指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字:说明新镜像的维护人信息
RUN命令:在所基于的镜像上执行命令,并提交到新的镜像中
CMD["要运行的程序","参数1","参指2"]:指定启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只有最后一条被执行
EXPOSE端口号:指定新镜像加载到Docker时要开启的端口
ENV环境变量变量值:设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录:将源文件复制到目标文件中,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录:将本地主机上的源文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME["目录"]:在容器中创建一个挂载点
USER用户名/UID:指定运行容器时的用户
WORKDIR路径:为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD命令:指定所生成的镜像作为一个基础镜像时所要运行的命令
1、建立工作目录

mkdir /opt/apache
cd /opt/apache
2、创建并编写Dockerfile文件

vim Dockerfile
#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The porject
#镜像操作指令安装apache软件
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]


3、编写执行脚本内容

vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND


4、创建测试页面

echo "web test" > index.html
  此时/opt/apache目录下应有三个文件


5、使用Dockerfile生成镜像
  命令格式:docker build [选项] 路径

常用选项:
-t:指定镜像的标签信息
docker build -t httpd:centos .      //注意别忘了末尾有"."

接上图

可以看到整个创建过程中,每运行一次Dockerfile中的指令,都会给初始镜像加上新的一层。


6、使用新的镜像运行容器

docker run -d -p 1216:80 httpd:centos
  -p 选项实现从本地端口1216到容器中80端口的映射


7、测试

http://192.168.1.29:1216/

  容器中的Apache服务已经成功运行

ps:创建镜像过程中遇到如下警告:
WARNING: IPv4 forwarding is disabled. Networking will not work.
一条命令解决问题:sysctl -w net.ipv4.ip_forward=1



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675086-1-1.html 上篇帖子: Docker(二十七)k8s 搭建有状态集群服务1 下篇帖子: Docker数据管理与网络通信之私有仓库建立
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表