当前位置: 首页 > news >正文

Docker五 | DockerFile

目录

DockerFile 

常用保留字

FROM

MAINTAINER

RUN

EXPOSE

WORKDIR

USER

ENV

VOLUME

ADD

COPY

CMD

ENTRYPOINT

DockerFile案例

前期准备

编写DockerFile文件 

运行DockerFile 

运行镜像


DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。通过DockerFile构建镜像,只需如下三个步骤即可:

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

DockerFile 

常用保留字

FROM

指定一个已存在的镜像作为模版,第一条必须是FROM

MAINTAINER

描述镜像维护者的姓名和邮箱地址

RUN

镜像构建的时候需要运行的命令

EXPOSE

当前容器对外暴露的端口

WORKDIR

创建容器后,终端默认进来的工作目录

USER

指定该镜像以什么样的用户去执行,不指定默认为root

ENV

用于在后续构建过程中设置环境变量,可以在后续指令中使用

VOLUME

用于数据保存和持久化工作

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

COPY

拷贝文件和目录到镜像中

COPY src dest

CMD

指定容器启动后要干的事情(在容器启动之后要干的事情,而run时在镜像构建时要运行的命令)

docker run 携带参数的话会覆盖CMD指令

CMD可以指定多个,但只有最后一个生效

ENTRYPOINT

类似于CMD指令,但ENTRYPOINT不会被docker run 后的命令覆盖,而这些命令会被当做参数送给ENTRYPOINT指令指定的程序

可以与CMD一起使用,这里的CMD等于在给ENTRYPOINT传参

DockerFile案例

自定义镜像Centos,Centos7镜像具备vim+ifconfig+jdk8

前期准备

 将jdk-8u161-linux-x64.tar.gz文件放到myfile目录下

[root@localhost myfile]# pwd
/root/myfile
[root@localhost myfile]# ll
总用量 4
-rw-r--r-- 1 root root 670 12月 29 15:17 Dockerfile
-rw-r--r-- 1 root root   0 12月 29 15:08 jdk-8u161-linux-x64.tar.gz

编写DockerFile文件 

 在/root/myfile目录下vim Dockerfile文件

FROM centos:7
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-8u161-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一>
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
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

运行DockerFile 

docker build -t 镜像名称:标签名称 .

 经过等待后运行成功

[root@localhost myfile]# docker build -t mycentos7:1.0 .
[+] Building 15.5s (12/12) FINISHED                                             docker:default=> [internal] load build definition from Dockerfile                                      0.0s=> => transferring dockerfile: 671B                                                      0.0s=> [internal] load .dockerignore                                                         0.0s=> => transferring context: 2B                                                           0.0s=> [internal] load metadata for docker.io/library/centos:7                              15.4s=> [1/7] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac31  0.0s=> [internal] load build context                                                         0.0s=> => transferring context: 45B                                                          0.0s=> CACHED [2/7] WORKDIR /usr/local                                                       0.0s=> CACHED [3/7] RUN yum -y install vim                                                   0.0s=> CACHED [4/7] RUN yum -y install net-tools                                             0.0s=> CACHED [5/7] RUN yum -y install glibc.i686                                            0.0s=> CACHED [6/7] RUN mkdir /usr/local/java                                                0.0s=> CACHED [7/7] ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/                          0.0s=> exporting to image                                                                    0.0s=> => exporting layers                                                                   0.0s=> => writing image sha256:f1976b20af22d403a40902220dfa741412a3bb1dab65771bf43d79650f9d  0.0s=> => naming to docker.io/library/mycentos7:1.0                                          0.0s

运行镜像

检查vim工具,ifconfig工具和jdk环境 

[root@localhost myfile]# docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED          SIZE
mycentos7                                         1.0       f1976b20af22   13 minutes ago   585MB
[root@localhost myfile]# docker run -it f1976b20af22 /bin/bash
[root@dde119c40796 local]# dir
bin  etc  games  include  java	lib  lib64  libexec  sbin  share  src
[root@dde119c40796 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.5  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:05  txqueuelen 0  (Ethernet)RX packets 8  bytes 656 (656.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@dde119c40796 local]# vim a.txt

 发现制作的镜像没有问题

http://www.lryc.cn/news/269257.html

相关文章:

  • 2023年度总结:技术旅程的杨帆远航⛵
  • SpringBoot+AOP+Redis 防止重复请求提交
  • 偷流量、端口占用、网络负载高、socket创建释放异常等Android高阶TCP/IP网络问题定位思路
  • 《人人都能用英语》学习笔记
  • NFC与ZigBee技术在智慧农业物联网监测系统中的应用
  • k8s-cni网络 10
  • 听GPT 讲Rust源代码--src/tools(27)
  • 经济危机下,我们普通人如何翻身?2024创业新风口,适合普通人的创业项目
  • 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
  • python中基本元素的pop函数
  • MPLS动态协议LDP配置示例
  • JS调用栈:为何会栈溢出
  • 代码随想Day52 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 使用 pytest 相关特性重构 appium_helloworld
  • 猪目标检测数据集VOC格式600张
  • Pandas中concat的用法
  • 【C++】引用详解
  • 平时的一些思考内容
  • AIGC时代下,结合ChatGPT谈谈儿童教育
  • Java中的锁(一)
  • CSS-SVG-环形进度条
  • 英语中修饰头发的形容词顺序是怎么样的(加补充)
  • python的WebSocket编程详解,案例群聊系统实现
  • flutter学习-day22-使用GestureDetector识别手势事件
  • uni-app tabbar组件
  • 【Midjourney】Midjourney根据prompt提示词生成人物图片
  • Oracle 拼接字符串
  • 探究公有云中的巨人:深入分析大数据产品的架构设计
  • 亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 王炸产品 Amazon Q,你的 AI 助手
  • 并发编程大杀器,京东多线程编排工具asyncTool