Docker学习(四):Dockerfile

一、DockerFile是什么

用来构建镜像的文本文件, 由一条条构建指令及参数构成的脚本

构建三步骤:

  1. 编写DockerFile文件
  2. docker build命令构建镜像
  3. docker run 依照镜像运行容器实例

二、DockerFile基础知识

  1. 每条保留字指令都为大写字母且至少跟随一条参数
  2. 指定从上至下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交

三、DockerFile构建大致流程

  1. Docker根据基础镜像运行容器
  2. 执行一条DockerFile的指令并对容器进行修改
  3. 执行类似docker commit的操作提交镜像
  4. 运行刚提交的镜像
  5. 执行下一条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:$PATH
 
EXPOSE 80
 
CMD 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:$PATH
 
EXPOSE 80
 
CMD 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
#测试、访问接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值