0
点赞
收藏
分享

微信扫一扫

docker实战学习2022版本(五)之DockFile入门实战

DYBOY 2022-11-05 阅读 113


DockFile:DockFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

官网:https://docs.docker.com/engine/reference/builder/

构建三部曲:

  • 编写dockFile文件
  • docker build命令构建镜像
  • docker run 根据镜像运行容器实例

dockFile内容基础知识:

docker实战学习2022版本(五)之DockFile入门实战_java

 docker执行dockerFile的大致流程:

docker实战学习2022版本(五)之DockFile入门实战_java_02

 

docker实战学习2022版本(五)之DockFile入门实战_centos_03

DockerFile常用保留字指令:

  • FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令,有两种格式:
  1. shell格式:RUN <命令行命令>  例如:RUN yum -y install vim
  2. exec格式:RUN ["可执行文件","参数1","参数2"]    例如:RUN["./test.php","dev","offline"]
  • EXPOSE:当前容器对外暴漏出的端口
  • WORKDIR:指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
  • USER:指定该镜像以什么样的用户去执行,如果不指定那默认就是root
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  • COPY:
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定容器启动后要干的事情,注意DockFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换;CMD和RUN命令的区别:CMD是在docker  run时运行,RUN是在docker build时运行。
  • ENTRYPOINT:也是用来指定一个容器启动时要运行的命令,类似于CMD指令,但是ENTRYPOINT不会被docker run 后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序。

ENTRYPOINT命令格式:ENTRYPOINT ["<executeable>" , "<param1>" , "<param2>" , ......]

docker实战学习2022版本(五)之DockFile入门实战_运维_04

 优点:在执行docker run的时候可以指定ENTRYPOINT运行所需的参数

注意:如果dockerFile中存在多个ENTRYPOINT指令,仅最后一个生效

最后总结:

docker实战学习2022版本(五)之DockFile入门实战_centos_05

 案例实战:自定义镜像mycentosjava8

首先下载好centos镜像

docker实战学习2022版本(五)之DockFile入门实战_docker_06

 需求:centos7镜像具备vim + config + jdk8

jdk下载地址:​​Java Downloads | Oracle​​

docker实战学习2022版本(五)之DockFile入门实战_java_07

编写DockFile文件:

首先在根目录下创建一个myfile的文件夹:

docker实战学习2022版本(五)之DockFile入门实战_centos_08

 将jdk的压缩包传送到该文件夹下:

docker实战学习2022版本(五)之DockFile入门实战_运维_09

然后在该文件夹下新建一个DockerFile文件:

docker实战学习2022版本(五)之DockFile入门实战_docker_10

  

注意名字要是Dockerfile)文件内容如下:

FROM centos:7
MAINTAINER hanansheng<1847347046@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装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

构建新镜像:在myfile下执行命令

docker build -t 新镜像名字:TAG .

// docker build -t centosjava8:1.5 .

注意:TAG后面有个空格,空格后还有个.

不出意外的话执行完命令就可以了,如下图所示:

docker实战学习2022版本(五)之DockFile入门实战_java_11

 可以看到由于新加了很多东西,镜像内容大小也变大了很多

docker实战学习2022版本(五)之DockFile入门实战_centos_12

 运行新镜像:docker run -it  新镜像名字:TAG

测试:vim  ifconfig   java-version命令都已生效!!!

虚悬镜像:仓库名、标签名都为<none>的镜像,俗称dangling image

docker实战学习2022版本(五)之DockFile入门实战_运维_13

查看虚悬镜像:docker image ls -f dangling=true

删除虚悬镜像:docker image prune

 

 

举报

相关推荐

0 条评论