跳至主要內容

技术中心大约 2 分钟

注意

推荐环境:Centos7,文档环境:Centos7

什么是 Dockerfile?

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

就是说它是镜像的结构的定义文件。

核心命令

更多详细的说明可以参见菜鸟教程open in new window,此处就不一一说明,后期根据情况进行补充常用命令的说明。

FROM

定制的镜像都是基于 FROM 的镜像

RUN

用于执行后面跟着的命令行命令

ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。

COPY

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

ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量

ENTRYPOINT

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

实例

我们使用实际操作,构建一个helloworld的前端应用的镜像。

准备文件

首先,新建一个my-app的目录,在该目录下创建index.html

mddir myapp
cd myapp
touch index.html

并以下内容写入index.html

<html>
<head>
    <title>my first docker image</title>
</head>
<body>
    <h3>Hello World!</h3>
</body>
</html>

编写Dockerfile

在相同目录新建一个Dockerfile文件。

touch Dockerfile

并将以下内容写入到Dockerfile

FROM nginx
ADD index.html /usr/share/nginx/html/index.html
## 解决时区的问题
ENV TZ=Asia/Shanghai

构建镜像

执行命令进行编译镜像:

docker build -f Dockerfile -t my-app:latest . 

等待编译完成。

创建容器

docker run --name=my-app -p 8080:80 -d my-app

此时创建成功,则访问http://localhost:8080,可以看见nginx的默认欢迎页面已经被修改成hello world页面。

发布到仓库

我们的业务应用镜像创建好后,需要共享给其他人进行部署,则需要发布到仓库。

前面讲过使用docker push可以实现镜像发布到仓库的操作,发布的仓库由镜像中的仓库地址决定,所以如果需要发布到私有仓库,需要对my-app进行重新命名。

使用tag命令进行重新命名,改成公司私有仓库镜像名称。

# 新增镜像tag
docker tag my-app docker.clzytech.com:my-app

# 发布到公司仓库
docker push docker.clzytech.com:my-app

其他位置只需要使用pull命令进行拉取镜像,即可正常使用了。

常见问题

宿主机IP变化,容器内如何配置固定的地址访问宿主机?

使用域名:host.docker.internal,该域名可访问宿主机服务