DockerFile

DockerFile

文章目录

概述

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

示例

shell 复制代码
# FROM:定制的镜像都是基于 FROM 的镜像
FROM ubuntu
# 镜像作者itcast  邮箱itcast@itcast.cn
MAINTAINER itcast itcast@itcast.cn
#切换目录到根目录下的test目录;如果目录存在就切换,如果不存在就创建
workdir /test
# RUN:用于执行后面跟着的命令行命令。
RUN apt-get update
RUN apt-get install -y gcc
ENTRYPOINT ["gcc"]

执行

shell 复制代码
#my_gcc 是自己构建的镜像名称
docker build -t my_gcc .

workdir

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录 才会一直存在。

shell 复制代码
WORKDIR <工作目录路径>

dockerfile

shell 复制代码
from ubuntu:latest
maintainer deng deng@itcast.cn
workdir /a
run touch a.txt
workdir b
run touch 2.txt

构建生成镜像

shell 复制代码
#mytest:v1.0 是自己构建的镜像名称  最后面的 . 是构建的意思
docker build -t mytest:v1.0 .

查看构建的镜像

shell 复制代码
docker images

执行并进入构建的镜像

shell 复制代码
docker run -it mytest:v1.0 /bin/bash

run

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 复制代码
# RUN命令的格式
shell格式
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec格式
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

copy

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

shell 复制代码
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
#参数描述
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的
filepath.Match 规则。
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
示例:
COPY hom* /mydir/
COPY hom?.txt /mydir/
 

Dockerfile

shell 复制代码
from ubuntu:latest
maintainer deng deng@itcast.cn
#拷贝当前文件hello.txt 到镜像的/data/ 目录下
copy hello.txt /data/

add

ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如 下:

ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下, 会自动复制并解压到 <目标路径>。

ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会 令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

Dockerfile

shell 复制代码
from ubuntu:latest
maintainer deng deng@itcast.cn
add test.tar.gz /data/

cmd命令

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可 被 docker run 命令行参数中指定要运行的程序所覆盖

**注意:**如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

shell 复制代码
CMD <shell 命令>
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格 式运行,并且默认可执行文件是 sh。

entrypoint

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会 被当作参数送给 ENTRYPOINT 指令指定的程序。

​ 但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序

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

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

shell 复制代码
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参, 以下示例会提到。

shell 复制代码
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参

不传参运行

shell 复制代码
$ docker run nginx:test
#容器内会默认运行以下命令,启动主进程。
#nginx -c /etc/nginx/nginx.conf

传参运行

shell 复制代码
$ docker run nginx:test -c /etc/nginx/new.conf
#容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
#nginx -c /etc/nginx/new.conf

expose

声明端口。

作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
shell 复制代码
EXPOSE <端口1> [<端口2>...]

容器中运行程序

第一种方式:

Dockerfile

shell 复制代码
from ubuntu:latest
maintainer deng deng@itcast.cn
copy myecho /
expose 55555  #这里的断开必须指定myecho程序中的端口
#启动容器的时候执行myecho 必须使用相对路径
cmd ./myecho
shell 复制代码
#构建
docker build -t mytest:v1.4 .
#执行
docker run mytest:v1.4

查看IP和测试

shell 复制代码
docker inspect crazy_chatelet

第二种方式:

Dockerfile

shell 复制代码
from ubuntu:latest
maintainer deng deng@itcast.cn
copy myecho /
expose 55555
#启动容器的时候执行myecho
entrypoint ./myecho
shell 复制代码
#构建
docker build -t mytest:v1.5 .
#执行  -P 随机端口
docker run -P mytest:v1.5

附录

docker官网:http://www.docker.com

Docker windows入门:https://docs.docker.com/windows/

Docker Linux 入门:https://docs.docker.com/linux/

Docker mac 入门:https://docs.docker.com/mac/

Docker 用户指引:https://docs.docker.com/engine/userguide/

Docker 官方博客:http://blog.docker.com/

Docker Hub: https://hub.docker.com/

Docker开源:https://www.docker.com/open-source

Docker中文资源

Docker中文网站: http://www.docker.org.cn

Docker入门教程: http://www.docker.org.cn/book/docker.html

Docker安装手册:http://www.docker.org.cn/book/install.html

一小时Docker教程 :https://blog.csphere.cn/archives/22

Docker纸质书:http://www.docker.org.cn/dockershuji.html

DockerPPT:http://www.docker.org.cn/dockerppt.html

相关推荐
郭庆汝2 小时前
华为昇腾服务器安装docker
运维·服务器·docker
Elivs.Xiang2 小时前
Docker - idea中集成docker插件发布SpringBoot项目
spring boot·docker·intellij-idea
牛奶咖啡132 小时前
Docker容器实践——使用Dockerfile构建docker镜像
docker·dockerfile·dockerfile是什么·dockerfile常见指令·dockerbuild工作原理·dockerfile构建镜像·dockerfile构建示例
小夏子_riotous3 小时前
Docker学习路径——4、制作/更改镜像
学习·docker
小锋学长生活大爆炸6 小时前
【教程】在Docker中部署Hermes Agent
docker·容器·agent·教程·工具·openclaw·hermes
AI服务老曹14 小时前
异构计算时代的安防底座:基于 Docker 的 X86/ARM 双模部署与 NPU 资源池化实战
arm开发·docker·容器
筱顾大牛16 小时前
使用docker部署到服务器
docker·部署
another heaven19 小时前
【Docker/虚拟机 深度对比Docker与虚拟机:原理、区别与最佳使用场景】
运维·docker·容器
独自归家的兔19 小时前
2026年4月16日 Ubuntu系统 Docker 的安装与配置
运维·docker·容器