Docker学习(四):Dockerfile
一、DockerFile是什么
用来构建镜像的文本文件, 由一条条构建指令及参数构成的脚本
构建三步骤:
- 编写DockerFile文件
- docker build命令构建镜像
- docker run 依照镜像运行容器实例
二、DockerFile基础知识
- 每条保留字指令都为大写字母且至少跟随一条参数
- 指定从上至下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层并对镜像进行提交
三、DockerFile构建大致流程
- Docker根据基础镜像运行容器
- 执行一条DockerFile的指令并对容器进行修改
- 执行类似docker commit的操作提交镜像
- 运行刚提交的镜像
- 执行下一条DockerFile的指令,循环2、3、4、5的操作,直至执行完DockerFile的所有指令
四、DockerFile、镜像、容器的关系
DockerFile:原材料
镜像:交付标准、交付产品
容器:运行的产品
DockerFile --build–>镜像–run–>容器
五、DockerFile保留字
DockerFile保留字
FROM #基础镜像
MAINTAINER #镜像维护者信息:邮箱及姓名
RUN #容器构建时(docker build)需要执行的命令 shell格式&exec格式
EXPOSE #当前容器对外暴露的端口
WORKDIR #指定当前容器进入后,终端默认登录进来的工作目录,落脚点
USER #指定镜像以什么用户去执行,如果不指定默认root
ENV #运行时环境,构建过程中设置环境变量,设置的环境变量可直接在后续RUN指令及其它指令中使用
VOLUME #相当于docker run -v 挂载容器数据卷 用于数据保存及持久化
ADD #将宿主机的文件拷贝进容器指定目录,并自动处理url及解压tar
COPY #类似ADD 目录及文件拷贝入镜像
CMD #指定容器启动后要做的事(执行的指令) 可以有多个指令 但只有最后一个生效 会被docker run后的参数替换#在docker run 时CMD才会运行
ENTRYPOINT #与CMD相似,但是其不会被docker run后的参数覆盖,docker run后的参数会被当作参数送给ENTRYPOINT指令指定的程序#ENTRYPOINT指定后,CMD的内容作为参数传给ENTRYPOINT 变成<ENTRYPOINT> "<CMD>"#ENTRYPOINT + 定参#ENTRYPOINT + CMD变参
DockerFile构建带vim+ifconfig+jdk8的centos镜像案例:
编写Dockerfile
FROM centos
MAINTAINER hsp<hsp@126.com>ENV MYPATH /usr/local
WORKDIR $MYPATH#修改yum配置文件解决安装软件异常
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
#yum更新缓存及yum更新
RUN yum makecache
RUN yum update -y
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
上传jdk8压缩文件至Dockerfile同级目录
构建镜像及运行测试
#构建镜像 最后有一个点 代表当前目录
docker build -t 新镜像名:TAG .
docker build -t centosjava8:1.0 .
#查看镜像
docker images
#运行镜像
docker run -it centosjava8:1.0 /bin/bash
#测试 vim ifconfig java命令
#成功
六、虚悬镜像
仓库名、标签名都为的镜像、俗称dangling image
构建镜像、删除镜像时有概率出现错误导致
#虚悬镜像Dockerfile
From ubuntu
CMD echo 'Hello World'
#构建虚悬镜像
docker build .
#查看虚悬镜像
docker image ls -f dangling=true
#删除虚悬镜像
docker image prune
七、构建带ifconfig+jdk8的ubuntu镜像
Dockerfile
FROM ubuntu
MAINTAINER hsp<hsp@126.com>ENV MYPATH /usr/local
WORKDIR $MYPATH#apt 更新
RUN apt-get update
#安装ifconfig命令查看网络IP
RUN apt-get install net-tools
#安装vim
RUN apt-get install -y vim
#安装java8
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD echo $MYPATH
CMD echo "success-----ubuntu+vim+ifconfig+jdk8---------ok"
CMD /bin/bash
构建及运行
#构建
docker build -t ubuntujdk8:1.0 .
#查看
docker images
#运行
docker run -it ubuntujdk8:1.0 /bin/bash
#测试
ifconfig
touch a.txt
vim a.txt
java -version
#成功
八、Docker微服务实战
编写微服务工程
编译打jar包
编写Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER hsp
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为rb_ms_docker.jar
ADD robot-service-1.0-SNAPSHOT.jar rb_ms_docker.jar
# 运行jar包
RUN bash -c 'touch /rb_ms_docker.jar'
ENTRYPOINT ["java","-jar","/rb_ms_docker.jar"]
#暴露6088端口作为微服务
EXPOSE 6088
构建及运行
#构建
docker build -t rbsdocker:1.0 .
#查看
docker images
#运行
docker run -d rbsdocker:1.0
#测试、访问接口
Docker学习(四):Dockerfile相关推荐
- Docker学习四:Docker 网络
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- Docker系列四DockerFile打造Python镜像
前言 起因是在更新博客的时候,发现可以用更优雅的方式来实现原有的目的,所以重新整理后,将原文改成了两篇,都收录在了该系列中. 构建Docker镜像,简单来说分为以下两种: 拉取CentOS的操作系统镜 ...
- docker学习(四)docker run用法
目录 前言 一.参数列表 二.使用示例 前言 docker run 命令用于创建一个新的容器,启动一个新的进程,并为这个进程分配其独占的文件系统.网络资源等.通过参数设置可以覆盖镜像和容器的一些默认配 ...
- Docker学习(四)-----Docker容器常用命令
七.Docker容器 容器是Docker核心概念 简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境 对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行 ...
- Docker学习四--Harbor私有仓库搭建
Harbor企业级私有仓库搭建 安装docker-compose 进入官网 安装Harbor 下载harbor的离线安装包 进入系统进行安装 通过浏览器访问登录系统 安装docker-compose ...
- docker学习(四) 配置阿里云镜像加速器
配置阿里云镜像加速器 注册阿里云账号 进入 镜像加速页面 进入对应操作系统配置,按照提示配置,这里以centos为例 复制配置,拷贝至centos 系统下 /etc/docker/daemon.jso ...
- Docker学习(四) -- 制作私有镜像推送到阿里云或私服
1. 将自己创建的镜像发布到阿里云仓库: 1.1 在阿里云容器镜像服务中创建个人实例 1.2 进入个人实例,创建命名空间 1.3 创建镜像仓库,会产生一些阿里云为你生成的命令 操作指南: 1. 登录阿 ...
- Docker学习(12) Dockerfile构建过程
Dockerfile的构建过程 以上为构建缓存 转载于:https://www.cnblogs.com/xiao-xue-di/p/11485044.html
- Docker学习六:综合实践
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- Docker学习五:Docker 数据管理
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
最新文章
- [Ext JS 4] 实战Chart 协调控制(单一的坐标,两个坐标)
- 开发最前沿:项目案例实战之桥模式
- Redis操作hash类型
- 深度解密Go语言之反射
- Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色
- Linux下open函数、read函数、write函数记录
- MySQL - 行锁 表锁 乐观锁 悲观锁 读锁 写锁
- 使用 Kustomize 帮你管理 kubernetes 应用(二): Kustomize 的使用方法
- Thread中yield方法
- nginx 1.12基础知识
- 基于OpenCV的三维数据点的曲面重构_MySurefaceReconstruction
- plc通过无线通讯连接服务器,多个plc无线通讯方案
- STM32学习笔记——HC05
- android 气泡尖角边框,如何使用CSS实现一个带尖角的气泡框?
- 欧拉计划第80题:平方根数字展开
- cogs——2098. Asm.Def的病毒
- JAVA数组常见例题(转置,排序,求和平均,插入,删除)
- The import com. cannot be resolved
- mat1 and mat2 shapes cannot be multiplied (128x432 and 576x64)的解决
- 2.郝斌C语言课程大纲