zookeeper注册中心原理,Dockerfile

LABEL MAINTAINER


格式为LABEL MAINTAINER <name email_address>,指定维护者信息

RUN


格式为RUN <command>RUN ["executable","param1","param2"]

前者将在shell终端中运行命令,即/bin/sh -c;后者则使用exec执行。

指定使用其他终端可以通过第二种方式实现,例如:

RUN [“/bin/bash”,“-c”,“echo hello”]

每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行,例如:

RUN echo “hello world\nhello tom” > /tmp/abc && \

cat /tmp/abc

CMD


CMD支持三种格式:

  • CMD ["executable","param1","param2"]使用exec执行,推荐方式

  • CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用

  • CMD ["param1","param2"]提供给ENTRYPOINT的默认参数

例:

CMD [“/usr/local/apache/bin/apachectl”,“-D”,“FOREGROUND”] #-D 前台运行

CMD用于指定启动容器时默认要执行的命令,每个Dockerfile只能有一条CMD命令。

如果指定了多条命令,只有最后一条会被执行

如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令

EXPOSE


格式为EXPOSE <port> [<port>...]

例如:

EXPOSE 22 80 443

EXPOSE用于告诉Docker服务器容器暴露的端口号,供互联系统使用。

在启动容器时通过-P,Docker主机会自动分配一个端口转发到指定的端口;

使用-p则可以具体指定哪个本地端口映射过来。

ENV


格式为ENV<key> <value>。指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。例如:

ENV PG_MAJOR 9.3

ENV PG_VERSION 9.3.4

RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …

ENV PATH /usr/local/postgres- P G M A J O R / b i n : PG_MAJOR/bin: PGMAJOR/bin:PATH

ADD


格式为ADD<src> <dest>

该命令将复制指定的到容器中的。其中可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件 (会自动解压为目录)

总结:

  • 自动解压

  • 只会把目录下的东西传输过去,并不会传输目录

  • 支持多个文件传输

  • 支持URL(不解压)

//文件

[root@localhost ~]# tree

.

|-- anaconda-ks.cfg

`-- test

|-- Dockerfile

|-- abc

|-- apr-1.7.0.tar.gz

`-- pkgs

`-- apr-1.7.0.tar.gz

[root@localhost ~]# cat test/Dockerfile

FROM centos

ADD apr-1.7.0.tar.gz abc /opt #ADD可以同时传输多个文件

[root@localhost ~]# docker build -t test:v0.1 test

Sending build context to Docker daemon 2.193MB

Step 1/3 : FROM centos

—> 5d0da3dc9764

Step 2/3 : ADD apr-1.7.0.tar.gz abc /opt/

—> 048e3bec84cd

Step 3/3 : RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && source ~/.bashrc

—> Running in 5f65acb72659

Removing intermediate container 5f65acb72659

—> 7286a154ca21

Successfully built 7286a154ca21

Successfully tagged test:v0.1

[root@localhost ~]# docker run -it --rm --name web test:v0.1

[root@baf3dbbe89dd /]# ls /opt/

abc apr-1.7.0

[root@baf3dbbe89dd /]# cat /opt/abc

hello world

//目录(只会把目录下的东西传输过去,并不会传输目录)

[root@localhost ~]# cat test/Dockerfile

FROM centos

ADD pkgs/ /opt

[root@localhost ~]# docker build -t test:v0.2 test

Sending build context to Docker daemon 2.193MB

Step 1/2 : FROM centos

—> 5d0da3dc9764

Step 2/2 : ADD pkgs /opt

—> 2ddffaba6407

Successfully built 2ddffaba6407

Successfully tagged test:v0.2

[root@localhost ~]# docker run -it --rm --name web test:v0.2

[root@8c6cc7ae6bd4 /]# ls /opt/

apr-1.7.0.tar.gz

//压缩包(如果传输一个压缩包,会自动解压)

[root@localhost ~]# cat test/Dockerfile

FROM centos

ADD apr-1.7.0.tar.gz /opt

[root@localhost ~]# docker build -t test:v0.3 test

Sending build context to Docker daemon 2.193MB

Step 1/2 : FROM centos

—> 5d0da3dc9764

Step 2/2 : ADD apr-1.7.0.tar.gz /opt

—> da77b2fe731a

Successfully built da77b2fe731a

Successfully tagged test:v0.3

[root@localhost ~]# docker run -it --rm --name web test:v0.3

[root@b2caede68a4c /]# ls /opt/

apr-1.7.0

//URL(不会解压)

[root@localhost ~]# cat test/Dockerfile

FROM centos

ADD https://archive.apache.org/dist/httpd/httpd-2.4.50.tar.gz /opt

[root@localhost ~]# docker build -t test:v0.4 test

Sending build context to Docker daemon 2.193MB

Step 1/2 : FROM centos

—> 5d0da3dc9764

Step 2/2 : ADD https://archive.apache.org/dist/httpd/httpd-2.4.50.tar.gz /opt

Downloading [==================================================>] 9.871MB/9.871MB

—> 0ac02d13a607

Successfully built 0ac02d13a607

Successfully tagged test:v0.4

[root@localhost ~]# docker run -it --rm --name web test:v0.4

[root@7f8d81c2286e /]# ls /opt/

httpd-2.4.50.tar.gz

COPY


格式为COPY<src> <dest>

复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时会自动创建。

当使用本地目录为源目录时,推荐使用COPY。 手动解压

总结:

  • /files 这里没有/(创建出来后是文件)

  • /files/(创建出来后是目录)

  • 支持多个文件传输

  • 手动解压

  • 本地目录为源目录时,推荐使用COPY

[root@localhost ~]# tree

.

|-- anaconda-ks.cfg

`-- test

|-- Dockerfile

|-- abc

|-- apr-1.7.0.tar.gz

`-- pkgs

`-- apr-1.7.0.tar.gz

//目标路径不存在时会自动创建(第一种情况)

[root@localhost ~]# cat test/Dockerfile

FROM centos

COPY apr-1.7.0.tar.gz /files #这里没有/(创建出来后是文件)

RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && \

source ~/.bashrc

[root@localhost ~]# docker build -t test:v0.7 test

Sending build context to Docker daemon 2.193MB

Step 1/3 : FROM centos

—> 5d0da3dc9764

Step 2/3 : COPY apr-1.7.0.tar.gz /files

—> Using cache

—> 5ee50e6b84d7

Step 3/3 : RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && source ~/.bashrc

—> Running in dd5295186a38

Removing intermediate container dd5295186a38

—> b3f1902ee5e3

Successfully built b3f1902ee5e3

Successfully tagged test:v0.7

[root@localhost ~]# docker run -it --rm --name web test:v0.7

[root@a9c3ab18f663 /]# ls

bin dev etc files home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

[root@a9c3ab18f663 /]# ls -l files

-rw-r–r–. 1 root root 1093896 Dec 8 11:04 files

[root@a9c3ab18f663 /]# mv files /opt/

[root@a9c3ab18f663 /]# tar xf files

[root@a9c3ab18f663 /]# cd /opt/

[root@a9c3ab18f663 opt]# ls

files

[root@a9c3ab18f663 opt]# tar -xf files

[root@a9c3ab18f663 opt]# ls

apr-1.7.0 files

//目标路径不存在时会自动创建(第二种情况)

[root@localhost ~]# cat test/Dockerfile

FROM centos

COPY apr-1.7.0.tar.gz abc /files/ #这里有/(创建出来后是目录) 同时可以传输多个文件

RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && \

source ~/.bashrc

[root@localhost ~]# docker build -t test:v0.10 test

Sending build context to Docker daemon 2.193MB

Step 1/3 : FROM centos

—> 5d0da3dc9764

Step 2/3 : COPY apr-1.7.0.tar.gz abc /files/

—> 9fd5cc116937

Step 3/3 : RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && source ~/.bashrc

—> Running in dc171c98ef6c

Removing intermediate container dc171c98ef6c

—> b4615103e56b

Successfully built b4615103e56b

Successfully tagged test:v0.10

[root@localhost ~]# docker run -it --rm --name web test:v0.10

[root@fa5ae8d0bad3 /]# ls files/

abc apr-1.7.0.tar.gz

[root@fa5ae8d0bad3 /]# cd files/

[root@fa5ae8d0bad3 files]# tar xf apr-1.7.0.tar.gz

[root@fa5ae8d0bad3 files]# ls

abc apr-1.7.0 apr-1.7.0.tar.gz

ENTRYPOINT


ENTRYPOINT有两种格式:

  • ENTRYPOINT["executable","param1","param2"]

  • ENTRYPOINT command param1 param2(在shell中执行)

配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。而且,如果在docker run的后面提供了参数,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序。ENTRYPOINT存放主程序

每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效。

示例:

//Dockerfile写的是600s,但在docker run 时提供的参数并不会覆盖,在 docker run 后面的参数只会被当作参数传递给ENTRYPOINT指定的程序

[root@localhost ~]# cat test/Dockerfile

FROM centos

RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && \

source ~/.bashrc

ENTRYPOINT sleep 600 #停止600s

[root@localhost ~]# docker build -t test:v0.12 test

Sending build context to Docker daemon 2.193MB

Step 1/3 : FROM centos

—> 5d0da3dc9764

Step 2/3 : RUN echo “alias ls=‘ls --color’” >> ~/.bashrc && source ~/.bashrc

—> Running in f488664525a8

Removing intermediate container f488664525a8

—> ceb379977318

Step 3/3 : ENTRYPOINT sleep 600

—> Running in e4f755f3f62c

Removing intermediate container e4f755f3f62c

—> 8929be2dc74f

Successfully built 8929be2dc74f

Successfully tagged test:v0.12

[root@localhost ~]# docker run -it --rm --name web test:v0.12 sleep 900 #休息900s 只会被当作参数传递给ENTRYPOINT指定的程序

[root@localhost ~]# docker inspect web

“Cmd”: [

“sleep”,

“900”

],

“Image”: “test:v0.12”,

“Volumes”: null,

“WorkingDir”: “”,

“Entrypoint”: [ #主程序上并没有改变

“/bin/sh”,

“-c”,

“sleep 600”

VOLUME


格式为VOLUME ["/data"]

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

[外链图片转存中…(img-ckSlBam7-1713440036360)]

Mybatis面试专题

[外链图片转存中…(img-VTOzyKI5-1713440036361)]

MySQL面试专题

[外链图片转存中…(img-h0I9gLUL-1713440036361)]

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值