🍁博客主页:
👉@不会压弯的小飞侠
✨欢迎关注:
👉
点赞
👍
收藏
⭐
留言
✒
✨系列专栏:
👉Docker学习专栏
✨学习社区:
👉不会压弯的小飞侠
✨知足上进,不负野心。
🔥
欢迎大佬指正,一起学习!一起加油!
目录
🍁常见 Dockerfile 指令
🍁FROM
在 Dockerfile 里,可以通过 FROM 指令指定一个基础镜像,接下来所有的指令都是基于这个镜像所展开的。在镜像构建的过程中,Docker 也会先获取到这个给出的基础镜像,再从这个镜像上进行构建操作。FROM 指令支持三种形式,不管是哪种形式,其核心逻辑就是指出能够被 Docker 识别的那个镜像,好让 Docker 从那个镜像之上开始构建工作。
FROM <image> [AS <name>]
FROM <image>[:<tag>] [AS <name>]
FROM <image>[@<digest>] [AS <name>]
一个 Dockerfile 要以 FROM 指令作为开始并不意味着 FROM 只能是 Dockerfile 中的第一条指令。在 Dockerfile 中可以多次出现 FROM 指令,当 FROM 第二次或者之后出现时,表示在此刻构建时,要将当前指出镜像的内容合并到此刻构建镜像的内容里。
🍁RUN
镜像的构建虽然是按照指令执行的,但指令只是引导,最终大部分内容还是控制台中对程序发出的命令,而 RUN 指令就是用于向控制台发送命令的指令。在 RUN 指令之后,直接拼接上需要执行的命令,在构建时,Docker 就会执行这些命令,并将它们对文件系统的修改记录下来,形成镜像的变化。
RUN <command>
RUN ["executable", "param1", "param2"]
🍁ENTRYPOINT 和 CMD
基于镜像启动的容器,在容器启动时会根据镜像所定义的一条命令来启动容器中进程号为 1 的进程。而这个命令的定义,就是通过 Dockerfile 中的 ENTRYPOINT 和 CMD 实现的。
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
ENTRYPOINT 指令和 CMD 指令的用法近似,都是给出需要执行的命令,并且它们都可以为空,或者说是不在 Dockerfile 里指出。
当 ENTRYPOINT 与 CMD 同时给出时,CMD 中的内容会作为 ENTRYPOINT 定义命令的参数,最终执行容器启动的还是 ENTRYPOINT 中给出的命令。
🍁EXPOSE
通过EXPOSE 指令就可以为镜像指定要暴露的端口。
通过 EXPOSE 指令配置了镜像的端口暴露定义,那么基于这个镜像所创建的容器,在被其他容器通过 --link 选项连接时,就能够直接允许来自其他容器对这些端口的访问了。
EXPOSE <port> [<port>/<protocol>...]
🍁VOLUME
在一些程序里,需要持久化一些数据,比如数据库中存储数据的文件夹就需要单独处理。在 Dockerfile 里,提供了 VOLUME 指令来定义基于此镜像的容器所自动建立的数据卷。
在 VOLUME 指令中定义的目录,在基于新镜像创建容器时,会自动建立为数据卷,不需要我们再单独使用 -v 选项来配置了。
VOLUME ["/data"]
🍁COPY 和 ADD
在制作新的镜像的时候,需要将一些软件配置、程序代码、执行脚本等直接导入到镜像内的文件系统里,使用 COPY 或 ADD 指令能够帮助我们直接从宿主机的文件系统里拷贝内容到镜像里的文件系统中。
COPY [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
🍁构建镜像
在编写好 Dockerfile 之后,就可以构建我们所定义的镜像了,构建镜像的命令为 docker build。
docker build 可以接收一个参数,这个参数为一个目录路径 ,而并非 Dockerfile 文件的路径。
$ sudo docker build ./webapp
docker build 也会从这个目录下寻找名为 Dockerfile 的文件,将它作为 Dockerfile 内容的来源。如果Dockerfile 文件路径不在这个目录下,或者有另外的文件名,可以通过 -f 选项单独给出 Dockerfile 文件的路径。
$ sudo docker build -t webapp:latest -f ./webapp/a.Dockerfile ./webapp
在构建时我们最好总是携带上 -t 选项,用它来指定新生成镜像的名称。
$ sudo docker build -t webapp:latest ./webapp
版权归原作者 不会压弯的小飞侠 所有, 如有侵权,请联系我们删除。