docker学习笔记-06:自定义DockerFile生成镜像
一、自定义centos的DockerFile
1、从阿里源里拉的centos镜像新建的容器实例中,没有vim编辑器和ifconfig命令,所以自定义centos的DockerFile,创建自己想要的镜像。
FROM centos
MAINTAINER dyy <dyyjxcjdx@163.com> ENV MYPATH /tmp # 设置环境变量 WORKDIR $MYPATH # $表示引用上面的路径 RUN yum -y install vim # 安装vim
RUN yum -y install net-tools EXPOSE 80 # 端口为80 CMD echo $MYPATH
CMD echo "success------ok"
CMD /bin/bash
2、执行DockerFile生成自定义的镜像,-f后面指定DockerFile文件的路径,-t后面加新镜像的名称和TAG,最末尾要加上一个 “ . ”号。
docker build -f /mydocker/DockerFile2 -t mycentos:1.3 . # 注意最后要加一个 . 号
3、基于自定义创建的镜像,创建新的容器实例。
docker run -it mycentos:1.3
二、CMD和ENTRYPOINT的区别
1、CMD
(1)tomcat在Docker Hub上的DockerFile,最后一行为CMD命令,表示启动tomcat服务。
CMD ["catalina.sh", "run"]
(2)如果在创建tomcat的容器实例时,在docker run 后面加了命令参数 ls -l:
docker run -it -p 7777:8080 tomcat ls -l
(3)那就相当于在DockerFile最后一行加了如下命令。那么会把启动tomcat服务的命令替换掉,那么docker run 执行之后,不会启动服务。
CMD ls -l
(4)所以DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换。
2、ENTRYPOINT
(1)docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合。
(2)制作CMD版可以查询ip信息的容器,编辑DockerFile文件,文件内容如下:
FROM centos RUN yum install -y curl CMD ['curl','-s','https://ip.cn'] # 执行不了的话改为 CMD curl -s https://ip.cn
然后执行DockerFile文件,用docker build创建镜像 myip01,再docker run得到一个容器实例,输出ip地址。
docker build -f /mydocker/DockerFile3 -t myip01 .
docker run -it myip01
问题是如果需要扩展功能,希望在得到ip地址的同时得到HTTP头信息,那么要加上 -i 参数。那么用CMD就会出问题了。
(3)制作ENTRYPOINT版的查询ip地址的容器,编辑的DockerFile文件的内容如下:
FROM centos RUN yum install -y curl ENTRYPOINT ["curl","-s","https://ip.cn"]
同样的docker build ---> docker run 执行。希望在得到ip地址的同时得到HTTP头信息,那么要加上 -i 参数,此时不会出问题。
docker build -f /mydocker/DockerFile4 -t myip02 .
docker run -it myip02 -i
得到结果:
HTTP/1.1 200 OK
Date: Tue, 10 Sep 2019 03:40:49 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=dcd0856220b503fa61946688c0a7210bb1568086849; expires=Wed, 09-Sep-20 03:40:49 GMT; path=/; domain=.ip.cn; HttpOnly
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 513e61fadc756e54-SJC {"ip": "220.248.17.218", "country": "上海市", "city": "联通"}
三、ONBUILD命令
1、当构建一个将要被继承的父镜像的DockerFile时,加入ONBUILD命令。只要子镜像继承了父镜像,就会执行ONBUILD后面的命令,也就是ONBUILD被触发。
2、编写DockerFile文件,用于创建新的父镜像。
FROM centos RUN yum install -y curl ENTRYPOINT ["curl","-s","https://ip.cn"]
ONBUILD RUN echo "father onbuild -----886"
3、执行DockerFile创建父镜像
docker build -f /mydocker/DockerFile4 -t myip_father .
4、编写子镜像的DockerFile文件,明确继承自父镜像。
FROM myip_father # 继承自父镜像 RUN yum install -y curl CMD curl -s https://ip.cn
5、执行子镜像的DockerFile创建子镜像。
docker build -f /mydocker/DockerFile5 -t myip_son .
得到结果:Executing 1 build trigger ------->表明onbuild被触发
Sending build context to Docker daemon 6.144kB
Step 1/3 : FROM myip_father
# Executing 1 build trigger '''执行onbuild触发器'''
---> Running in eb2da8cf92a0
father onbuild -----886
Removing intermediate container eb2da8cf92a0
---> 78a71071f237
Step 2/3 : RUN yum install -y curl
---> Running in 2e7f7f3070bf
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.cn99.com
Package curl-7.29.0-51.el7_6.3.x86_64 already installed and latest version
Nothing to do
Removing intermediate container 2e7f7f3070bf
---> 9083e355b88f
Step 3/3 : CMD curl -s https://ip.cn
---> Running in 84b3520173ef
Removing intermediate container 84b3520173ef
---> c83251bcff40
Successfully built c83251bcff40
Successfully tagged myip_son:latest
docker学习笔记-06:自定义DockerFile生成镜像的更多相关文章
- Docker学习笔记之通过 Dockerfile 创建镜像
0x00 概述 由于 Docker 镜像的结构优势,使它的占用空间远小于普通的虚拟机镜像,而这就大幅减少了 Docker 镜像在网络或者其他介质中转移所花费的时间,进而提高了我们进行迁移部署的效率.不 ...
- Docker技术入门与实战 第二版-学习笔记-4-Dockerfile外其他生成镜像的方法
其它生成镜像的方法 即除了标准地使用Dockerfile来生成镜像外,还有一些其他的方法 1)从 rootfs 压缩包导入 格式:docker import [选项] <文件>|<U ...
- docker学习笔记(2) 构建镜像
一.手动构建一个简单镜像 我们以构建nginx的docker镜像为例:手动构建镜像 docker pull centos 安装基础镜像docker run --name mynginx -it ...
- docker学习笔记18:Dockerfile 指令 VOLUME 介绍
在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数 ...
- Docker学习笔记之常见 Dockerfile 使用技巧
0x00 概述 在掌握 Dockerfile 的基本使用方法后,我们再来了解一些在开发中使用 Dockerfile 的技巧.这一小节的展现方式与之前的略有不同,其主要来自阅读收集和我自身在使用中的最佳 ...
- docker学习笔记17:Dockerfile 指令 ONBUILD介绍
ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...
- Docker学习笔记之保存和共享镜像
0x00 概述 让 Docker 引以为傲的是它能够实现相比于其他虚拟化软件更快的环境迁移和部署,在这件事情上,轻量级的容器和镜像结构的设计无疑发挥了巨大的作用.通过将容器打包成镜像,再利用体积远小于 ...
- DOCKER 学习笔记2 认识dockerfile自定义镜像
Dockerfile 概念 Dockerfile 是一个文本文件,但包含所构建容器在运行时候的参数.库.资源配置.可以简单理解为我们现有的镜像,比如Centos/Nginx 但我们需要构建一个容器的时 ...
- Docker学习笔记_使用Dockerfile创建flask的一个镜像
一.实验环境 1.宿主机OS:Win10 64位 2 .虚拟机OS:Ubuntu18.04 64位 虚拟机名称:Ubuntu18VM1 虚拟机IP:192.168.8.25 3.账号:doc ...
随机推荐
- 29 对象&函数
switch: 穿越: 没有判断结果的情况下执行下一个case的语句块,叫穿越 或者穿越: switch(s%10){ case 1: case 2: case 3: s++; break; defa ...
- vs2008每次build都会重新编译链接 && 项目已经过期
转自:http://blog.csdn.net/movezzzz/article/details/6816605 无外乎两种情况: 1.时间问题,所创建的文件的时间比如是:2011-09-22 09: ...
- ES2.3.5版本的数据类型
1,最近使用了2.3.5版本的ES,发现在创建索引的时候出了以下错误. (1)例: POST 192.168.11.166:9200/article3/article/_mapping { " ...
- linux的压力测试工具
只能用于http的测试工具: ab: 安装方法:yum install httpd-tools -y 使用:ab -c 1000 -n 10000 + ip -c 为并发数,-n ...
- centos解决bash: telnet: command not found...&& telnet: connect to address 127.0.0.1: Connection refused拒绝连接
检查telnet是否已安装: [root@hostuser src]# rpm -q telnet-serverpackage telnet-server is not installed[root@ ...
- 安装 Python 虚拟环境 (Linux)
我的 Ubuntu 18.04 预安装了 python 3.6,但是没有安装 pip,所以先进行安装: apt-get install python-pip 1. 安装虚拟环境所需包: pip ins ...
- 【STM32H7教程】第54章 STM32H7的LTDC应用之LCD电阻触摸和电容触摸
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第54章 STM32H7的LTDC应用之LCD电阻 ...
- java finalize学习
1 finalize()调用的时机 与C++的析构函数(对象在清除之前析构函数会被调用)不同,在Java中,由于GC的自动回收机制,因而并不能保证finalize方法会被及时地执行(垃圾对象的回收时机 ...
- 2019年 我的phper之路,时光没了,头发还在
前言 曾经我认为最快的是麦迪的第一步,后来我觉得 7 酱逃跑速度更快,现在我懂了,原来我们都在跟时间赛跑. 年底了,给自己一个 "交代" 吧 2019 的我 2019 年写了 很多 ...
- JAVA性能优化工具小记
好记性不如烂笔头,戊戌年的最后一个工作日,把自己平时在开发过程中使用的一些java性能优化工具做一个简单的小结, 主要包括 jvisualvm.jfr.gdb和查看内存对象信息的几个linux命令. ...