Dockerfile构建过程详解

Dockerfile介绍

docker是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build构建成为一个镜像

3、docker run 运行镜像                                                                                                                     

4、docker push 发布镜像(DockerHub、阿里云镜像仓库)


Dockerfile构建过程

基础知识


1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序执行

3、# 表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

dockerfile是面向开发的,以后要发布项目,做镜像,就需要编写dockerfile文件

Docker 镜像逐渐成为企业交付的标准,必须要掌握!

步骤:开发,部署,运维    缺一不可

DockerFile:构建文件,定义了一切步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务的


DockerFile的指令

FROM                  #  基础镜像,一切从这里开始构建

MAINTAINER       #  镜像是谁写的,姓名+邮箱

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

ADD                     #  步骤:tomcat镜像,这个tomcat压缩包!添加目录

WORKDIR            #  镜像的工作目录

VOLUME              #   挂载的目录

EXPOST               #   保留端口配置

CMD                  #  指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT          #   指定这个容器启动的时候要运行的命令,可以追加命令

ONBUILD               #   当构建一个被继承Dockerfile 这个时候就会运行  ONBUILD  的命令。触发指令

COPY                    #  类似ADD,将文件拷贝到镜像中

ENY                       #  构建的时候设置环境变量!

实战测试

Docker Hub中99%镜像都是从这个基础镜过来的 FROM scratch,然后配置需要的软件和配置来进行的构建

创建一个自己的centos

1、编写dockerfile的文件[root@wq dockerfile]# vim mydockerfile-centos
[root@wq dockerfile]#
[root@wq dockerfile]# cat mydockerfile-centosFROM centos:7
MAINTAINER wq<123456@qq.com>ENV MYPATH /usr/local
WORKDIR $MYPATHRUN yum -y install vim net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash2、通过这个文件构建镜像#命令docker build -f dockerfile文件路径 -t 镜像名:[tag]
#官方命令是Dockerfile,使用这个命名,build的时候就会自动寻找这个文件,就不需要 -f 了#别忘了最后的点,表示当前目录[root@wq dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .3、测试运行[root@wq dockerfile]# docker images |grep centos
mycentos              0.1       6627b0adacef   54 seconds ago   501MB[root@wq dockerfile]# docker run -it mycentos:0.1
[root@775d3babc008 local]# pwd        #设置的工作目录,因此进入容器直接到了这个目录
/usr/local

对比:之前的原生的centos

增加之后的镜像

列出本地镜像变更历史

这样平时拿到一个镜像,就知道它是怎么做的了


CMD 和 ENTRYPOINT 区别

CMD                  #  指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT      #   指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD

#编写dockerfile文件
[root@wq dockerfile]# cat dockerfile-cmd-test
FROM centos:7
CMD ["ls","-a"]#构建镜像
[root@wq dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
[+] Building 15.3s (5/5) FINISHED                                                                    docker:default=> [internal] load build definition from dockerfile-cmd-test                                                  0.0s=> => transferring dockerfile: 76B                                                                            0.0s=> [internal] load .dockerignore                                                                              0.0s=> => transferring context: 2B                                                                                0.0s=> [internal] load metadata for docker.io/library/centos:7                                                   15.2s=> CACHED [1/1] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd6184  0.0s=> exporting to image                                                                                         0.0s=> => exporting layers                                                                                        0.0s=> => writing image sha256:c757e3a723ae82c9a6b3b7581f54ee6d140d3cd1f29acb9a4bcfe32ed77f8684                   0.0s=> => naming to docker.io/library/cmdtest                                                                     0.0s[root@wq dockerfile]# docker images |grep cmdtest
cmdtest               latest    c757e3a723ae   2 years ago      204MB#run运行  发现ls -a命令生效
[root@wq dockerfile]# docker run c757e3a723ae
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var#想追加一个命令 -l     ls -al
[root@wq dockerfile]# docker run c757e3a723ae -l
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.#cmd的情况下 -l 替换了 CMD ["ls","-a"] 命令,-l 不是命令所以报错!

测试ENTRYPOINT

[root@wq dockerfile]# cat dockerfile-cmd-entrypoint
FROM centos:7
ENTRYPOINT ["ls","-a"][root@wq dockerfile]# docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
[+] Building 15.3s (5/5) FINISHED                                                                    docker:default=> [internal] load build definition from dockerfile-cmd-entrypoint                                            0.0s=> => transferring dockerfile: 89B                                                                            0.0s=> [internal] load .dockerignore                                                                              0.0s=> => transferring context: 2B                                                                                0.0s=> [internal] load metadata for docker.io/library/centos:7                                                   15.2s=> CACHED [1/1] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd6184  0.0s=> exporting to image                                                                                         0.0s=> => exporting layers                                                                                        0.0s=> => writing image sha256:5184c7d459a0111136914d90d94e7121f7fce3c2746b17b74fc2f1e808a37da8                   0.0s=> => naming to docker.io/library/entrypoint-test                                                             0.0s[root@wq dockerfile]# docker images |grep entrypoint-test
entrypoint-test       latest    5184c7d459a0   2 years ago      204MB[root@wq dockerfile]# docker run 5184c7d459a0
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@wq dockerfile]# docker run 5184c7d459a0 -l
total 64
drwxr-xr-x   1 root root  4096 Mar  3 12:06 .
drwxr-xr-x   1 root root  4096 Mar  3 12:06 ..
-rwxr-xr-x   1 root root     0 Mar  3 12:06 .dockerenv
-rw-r--r--   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x   5 root root   340 Mar  3 12:06 dev
drwxr-xr-x   1 root root  4096 Mar  3 12:06 etc
drwxr-xr-x   2 root root  4096 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096 Apr 11  2018 media
drwxr-xr-x   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x   2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 155 root root     0 Mar  3 12:06 proc
dr-xr-x---   2 root root  4096 Nov 13  2020 root
drwxr-xr-x  11 root root  4096 Nov 13  2020 run
lrwxrwxrwx   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Feb 27 06:47 sys
drwxrwxrwt   7 root root  4096 Nov 13  2020 tmp
drwxr-xr-x  13 root root  4096 Nov 13  2020 usr
drwxr-xr-x  18 root root  4096 Nov 13  2020 var

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/508550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql表子查询

目录 表子查询数据准备 表子查询 子查询返回的结果是多行多列&#xff0c;常作为临时表&#xff0c;这种子查询称为表子查询。 案例&#xff1a;查询入职日期是 “2006-01-01” 之后的员工信息 , 及其部门信息 分解为两步执行&#xff1a; 查询入职日期是 “2006-01-01” 之后…

css 鼠标移入放大的效果

效果 HTML <div class"img-wrap"><img class"img-item" src"../assets/1.png" alt"" srcset""></div> CSS <style lang"less" scoped> .img-wrap {/* 超出隐藏 */overflow: hidden;.img-…

WebSocket介绍+3分钟时间使用WebSocket搭建属自己的聊天室

WebSocket 的由来 在 WebSocket 出现之前&#xff0c;我们想实现实时通信、变更推送、服务端消息推送功能&#xff0c;我们一般的方案是使用 Ajax 短轮询、长轮询两种方式&#xff1a;比如我们想实现一个服务端数据变更时&#xff0c;立即通知客户端功能&#xff0c;没有 WebS…

【LeetCode题解】2809. 使数组和小于等于 x 的最少时间+2788. 按分隔符拆分字符串+410. 分割数组的最大值

文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路&#xff1a; [2788. 按分隔符拆分字符串](https://leetcode.cn/problems/split-strings-by-separator/)思路&#xff1a; [410. 分割数组的最大…

设计模式(十三)抽象工厂模式

请直接看原文:设计模式&#xff08;十三&#xff09;抽象工厂模式_抽象工厂模式告诉我们,要针对接口而不是实现进行设计。( )-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- …

通信原理:通信的基本概念(第一节课)

1.通信的基本概念 1.1消息&#xff0c;信息与信号 我们先看一个调幅AM无线广播系统 我们信号举个例子&#xff1a; 可以看出&#xff0c;我们研究的参量不一样&#xff0c;对应的模拟和数字信号也会与我们看上去的不同。 信息&#xff1a; 生活中的例子来认识一下&#xff1…

Python——桌面摄像头软件(附源码+打包)

目录 一、前言 二、桌面摄像头软件 2.1、下载项目 2.2、功能介绍 三、打包工具&#xff08;nuitka&#xff09; 四、项目文件复制&#xff08;我全部合到一个文件里面了&#xff09; 五、结语 一、前言 看见b站的向军大叔用electron制作了一个桌面摄像头软件 但是&#x…

LabVIEW起重机工作参数远程监测系统

LabVIEW起重机工作参数远程监测系统 随着起重机技术的持续发展&#xff0c;对其工作参数的实时监控需求日益增加。设计了一个基于LabVIEW和TBox的起重机工作参数远程监测系统&#xff0c;能够实现起重机工作参数的实时采集、传输、解析和显示&#xff0c;有效提升起重机的性能…

自动化测试介绍、selenium用法(自动化测试框架+爬虫可用)

文章目录 一、自动化测试1、什么是自动化测试&#xff1f;2、手工测试 vs 自动化测试3、自动化测试常见误区4、自动化测试的优劣5、自动化测试分层6、什么项目适合自动化测试 二、Selenuim1、小例子2、用法3、页面操作获取输入内容模拟点击清空文本元素拖拽frame切换窗口切换/标…

【计算机网络】HTTPS 协议原理

https 一、HTTPS 是什么二、加密1. 加密概念2. 加密的原因3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 三、数据摘要(数据指纹)四、HTTPS 的工作原理探究1. 只使用对称加密2. 只使用非对称加密3. 双方都使用非对称加密4. 非对称加…

信息系统项目管理师--项目立项管理

项⽬⽴项管理是对拟规划和实施的项⽬技术上的先进性、适⽤性&#xff0c;经济上的合理性、效益性&#xff0c;实施上的可能性、⻛险性以及社会价值的有效性、可持续性等进⾏全⾯科学的综合分析&#xff0c; 为项⽬决策提供客观依据的⼀种技术经济研究活动 项⽬建议与⽴项申请、…

代码随想录第46天|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

文章目录 ● 121. 买卖股票的最佳时机思路一&#xff1a;贪心&#xff08;效率最快&#xff09;代码&#xff1a; 思路二&#xff1a;动态规划-dp数组代码&#xff1a; 思路三&#xff1a;动态规划 常数储存代码&#xff1a; ● 122.买卖股票的最佳时机II思路一&#xff1a;动态…