DockerFile系统的学习
1.背景
DockerFile定义:用来构建Docker镜像的文件,有脚本命令组成。
自定义镜像并运行步骤:
编写dockerFile文件--》docker build为镜像--》docker run 运行镜像
dockerFile文件模板可以在官网看到:
https://hub.docker.com/

2.基本语法介绍
dockerFile的基础规则
1.dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
2.Docker以从上到下的顺序运行Dockerfile的指令。
3.以#字符开头则被视为注释。
4.第一条指令必须是FROM,用来确定基本镜像来源。
5.每条指令的关键字必须大写,且后面至少要有一个参数
6.每条指令都会创建一个新的镜像层,并提交镜像产生id
Docker build执行dockerFile的流程
1.docker从基础镜(由From 指定)像运行一个容器
2.由上往下执行指令,并对容器作出修改
3.修改完成后提交一个新的镜像并返回镜像id
4.docker再基于刚才的新镜像运行一个新的容器
5.接着执行下一条指令,重复步骤2、3、4,指导所有指令执行完

3.dockerFile关键字
如下讲解,我们以构建一个tomcat镜像为例,说明常用关键字
3.1.FROM
作用:指定基础镜像,当前新镜像是基于哪个镜像的。
案例:FROM centos
备注:如果没有基础镜像,需要写成 FROM scratch,这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像
3.2.MAINTAINER
[maintainer : n.维护者;维护设备;软件维护人员;(律 史)非法帮助诉讼者]
作用:镜像维护者的姓名和邮箱地址
案例:MAINTAINER lidongping <851298348@qq.com>
3.3.RUN
作用:容器构建时需要运行的命令
案例:RUN yum -y install vim ,表示安装vim编辑器功能
3.4.ENV
作用:定义一个变量,与Java中定义一个常量一样的道理
案例:ENV WORK_PATH /usr/local
3.5.WORKDIR
作用:指定在创建容器后,终端默认登陆进来的工作目录
案例:WORKDIR $WORK_PATH
备注:这里使用了上一步的ENV WORK_PATH /usr/local变量,等同于WORKDIR /usr/local
3.6.COPY
作用:拷贝文件和目录到镜像中
案例:COPY readme.txt /home
备注:将当前文件下的readme.txt 拷贝到容器中的centos中的home目录下
3.7.ADD
作用:与上面的copy作用一样,拷贝文件和目录到镜像中,只是ADD命令会自动处理URL和解压tar压缩包
案例:ADD jdk-8u131-linux-x64.tar.gz /usr/local/
3.8.EXPOSE
作用:当前容器对外暴露出的端口
案例:EXPOSE 8080
3.9.CMD
作用:指定一个容器启动时要运行的命令。可以有多个CMD指令,但只有最后一个生效,CMD 会被docker run 之后的参数替换;
案例:CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
3.10.ENTRYPOINT
entry point 入口点,进入点
作用:指定一个容器启动是要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是ENTRYPOINT不会被docker run 之后的参数替换;
案例:ENTRYPOINT ["/usr/local/apache-tomcat-8.5.41/bin/startup.sh" ]
3.11.VOLUME
volume 体积,容器
作用:容器数据卷,用于数据保存和持久化工作
案例:VOLUME ["/c-data01", "/c-data02","/更多路径"]
到此,常用的命令大概就这些,更多的命令大家可以自己查官方文档,使用方式和套路大致是一样的。
4.实际案例
本案例以构建一个tomcat镜像为实际案例作为演示
第一步,准备素材,
在根路径下建立myTomcat文件夹,并准备如下素材

构建文件:dockerFileTomcat文件内容如下
#基础容器来自于centos
FROM centos
#设置维护者的邮箱和微信
MAINTAINER email:lidongping<851298348@qq.com.com>,wechat:851298348
#安装vim编辑器
RUN yum -y install vim
#默认的centos容器时不带ifconfig命令的,安装ip查询工具,即可以使用ifconfig命令
#RUN yum install net-tools
#定义一个变量,类似于java中定义一个常量
ENV WORK_PATH /usr/local
#设置工作访问时候的WORKDIR路径,即进入容器后的默认工作目录
WORKDIR $WORK_PATH
#把宿主机当前上下文的readme.txt拷贝到容器/usr/local/路径下
COPY readme.txt $WORK_PATH/readme.txt
#把java与tomcat拷贝到容器并解压
ADD jdk-8u131-linux-x64.tar.gz $WORK_PATH/
ADD apache-tomcat-8.5.41.tar.gz $WORK_PATH/
#配置java、tomcat环境变量
ENV JAVA_HOME $WORK_PATH/jdk1.8.0_131
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME $WORK_PATH/apache-tomcat-8.5.41
ENV CATALINA_BASE $WORK_PATH/apache-tomcat-8.5.41
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动tomcat
CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
第二步,执行构建镜像命令
docker build -f /myTomcat/dockerFileTomcat -t lidongping/tomcat01 .
注意:如果构建文件名称为:Dockerfile,且在当前路径下,可以直接写为:docker build -t lidongping/tomcat01 .


第三步, 运行上一步构建的lidongping/tomcat01 镜像
命令:docker run -d -p 8081:8080 lidongping/tomcat01

第四步,访问tomcat,看是否正常

完美!
系统化学习docker教程:
https://www.cnblogs.com/newAndHui/p/13508771.html
DockerFile系统的学习的更多相关文章
- 如何系统的学习Java
初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Boots ...
- 一点点linux系统的学习心得
我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...
- Unity3d-Particle System 5.x系统的学习(四)
Unity3d-Particle System 5.x系统的学习(四) 今天,我们来聊聊unity5.x的粒子系统和unity4.x粒子系统的区别. 我大致看了下,区别还是蛮多的,但是总体的粒子制作思 ...
- 安装虚拟机和Linux系统的学习
安装虚拟机和Linux系统的学习(随笔3) 1.安装虚拟机 首先我按着老师给的链接上的步骤一步一步安装VirtualBox,进行得十分顺利. 接着则是在虚拟机上安装Ubuntu. 然而安装完成以后按要 ...
- 这一次,终于系统的学习了 JVM 内存结构
最近在看< JAVA并发编程实践 >这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的来到的 JVM 内存结构,关于 JVM 内存结构的认知还停留在上大学那会的课 ...
- 系统的学习Devops
系统的学习devops 1. 学习一门编程语言 Java python JavaScript 2.了解不同的操作系统概念 线程和并发,套接字,I/O管理,虚拟化,内存存储和文件系统 3.掌握终端生存大 ...
- Linux 系统编程 学习 总结
背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...
- Linux 系统编程 学习:00-有关概念
Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...
- Linux 系统编程 学习:01-进程的有关概念 与 创建、回收
Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...
随机推荐
- 图解并发与并行-分别从CPU和线程的角度理解
本文作为图解java并发编程的第三篇,前2篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 8成以上的java线程状态图都画错了--图解java并发第二篇 一.CPU角度的并发与 ...
- linux账户的锁定和解锁、禁用账号
l——lock锁定 S——STATUS查看 u——unlock解锁 1.通过passwd命令锁定和解锁: [root@localhost ~]# passwd -S abc ——passwd -S ...
- [LeetCode] 22. 括号生成(回溯/DP)
题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...
- [计算机网络]TCP/IP协议-运输层
TCP/IP体系结构 TCP/IP四层协议 五层协议 协议 作用 应用层 应用层 HTTP超文本传输协议.FTP文件传输协议 - 运输层 运输层 TCP(面向连接的,可靠的).UDP(无连接的,不保证 ...
- [剑指Offer]56-数组中数字出现的次数(位运算)
题目一 数组中只出现一次的数字 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 题解 异或. 先考虑:数组中只有一个数字只出现了一次,其他数字都出现了 ...
- Docker跨主机通信(九)
容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...
- Win10系统安装Tensorflow-GPU和VSCode构建Tensorflow开发环境
[前言] 1. 最近因为上课需要安装Anaconda和Tensorflow-GPU,Anaconda安装很容易,但Tensorflow-GPU版本的安装较为复杂,因为需要考虑版本匹配的一些问题,很容易 ...
- LevelDb 101学习
转自http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html LevelDb日知录之一:LevelDb 101 说起LevelDb也许 ...
- 关于MongoDB
启动: 启动MongoDB的方式有两种: 1.直接启动,配置参数写在命令中: mongod --dbpath=data/db --logpath=log/log.txt --fork 2.以配置文件启 ...
- Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合
@ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...