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系统的学习的更多相关文章

  1. 如何系统的学习Java

    初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Boots ...

  2. 一点点linux系统的学习心得

    我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...

  3. Unity3d-Particle System 5.x系统的学习(四)

    Unity3d-Particle System 5.x系统的学习(四) 今天,我们来聊聊unity5.x的粒子系统和unity4.x粒子系统的区别. 我大致看了下,区别还是蛮多的,但是总体的粒子制作思 ...

  4. 安装虚拟机和Linux系统的学习

    安装虚拟机和Linux系统的学习(随笔3) 1.安装虚拟机 首先我按着老师给的链接上的步骤一步一步安装VirtualBox,进行得十分顺利. 接着则是在虚拟机上安装Ubuntu. 然而安装完成以后按要 ...

  5. 这一次,终于系统的学习了 JVM 内存结构

    最近在看< JAVA并发编程实践 >这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的来到的 JVM 内存结构,关于 JVM 内存结构的认知还停留在上大学那会的课 ...

  6. 系统的学习Devops

    系统的学习devops 1. 学习一门编程语言 Java python JavaScript 2.了解不同的操作系统概念 线程和并发,套接字,I/O管理,虚拟化,内存存储和文件系统 3.掌握终端生存大 ...

  7. Linux 系统编程 学习 总结

    背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...

  8. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...

  9. Linux 系统编程 学习:01-进程的有关概念 与 创建、回收

    Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...

随机推荐

  1. 图解并发与并行-分别从CPU和线程的角度理解

    本文作为图解java并发编程的第三篇,前2篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 8成以上的java线程状态图都画错了--图解java并发第二篇 一.CPU角度的并发与 ...

  2. linux账户的锁定和解锁、禁用账号

    l——lock锁定 S——STATUS查看 u——unlock解锁 1.通过passwd命令锁定和解锁: [root@localhost ~]# passwd -S abc ——passwd -S  ...

  3. [LeetCode] 22. 括号生成(回溯/DP)

    题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

  4. [计算机网络]TCP/IP协议-运输层

    TCP/IP体系结构 TCP/IP四层协议 五层协议 协议 作用 应用层 应用层 HTTP超文本传输协议.FTP文件传输协议 - 运输层 运输层 TCP(面向连接的,可靠的).UDP(无连接的,不保证 ...

  5. [剑指Offer]56-数组中数字出现的次数(位运算)

    题目一 数组中只出现一次的数字 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 题解 异或. 先考虑:数组中只有一个数字只出现了一次,其他数字都出现了 ...

  6. Docker跨主机通信(九)

    容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...

  7. Win10系统安装Tensorflow-GPU和VSCode构建Tensorflow开发环境

    [前言] 1. 最近因为上课需要安装Anaconda和Tensorflow-GPU,Anaconda安装很容易,但Tensorflow-GPU版本的安装较为复杂,因为需要考虑版本匹配的一些问题,很容易 ...

  8. LevelDb 101学习

    转自http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html LevelDb日知录之一:LevelDb 101 说起LevelDb也许 ...

  9. 关于MongoDB

    启动: 启动MongoDB的方式有两种: 1.直接启动,配置参数写在命令中: mongod --dbpath=data/db --logpath=log/log.txt --fork 2.以配置文件启 ...

  10. Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合

    @ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...