点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。
前面分析了 Nginx 镜像的 Dockerfile,内容还是挺多的。如果我们要创建自己的 Nginx 镜像,完全不需要从头再来,可以站在巨人的肩膀上。我们可以基于现有的 Nginx 镜像进行定制化修改,以满足特定的需求。
假如我们有一个静态 HTML 页面,我们想使用 nginx 来部署该页面,并且通过 18080 端口访问。为此,我们需要创建一个自定义的 nginx 镜像,然后使用该镜像启动容器,访问静态页面。
以下是使用 Dockerfile 构建镜像的步骤:
创建一个新的 myNginx 目录,用于存放 Dockerfile 和项目相关文件。如下:
root@hxstrive:~/myNginx# ll
total 20
drwxr-xr-x 2 root root 4096 8月 29 13:13 ./
drwx------ 9 root root 4096 8月 29 13:13 ../
-rw-r--r-- 1 root root 160 8月 29 11:51 default.conf
-rw-r--r-- 1 root root 168 8月 29 13:13 Dockerfile
-rw-r--r-- 1 root root 18 8月 29 11:49 index.html💢注意,该目录仅有三个文件,一个静态的 index.html 页面,和 default.conf nginx 配置文件,以及 Dockerfile 文件。
将你的网页文件放置在与Dockerfile相同的目录下(实际项目中通常放在一个目录下),index.html 内容如下:
root@hxstrive:~/myNginx# cat index.html
<h1>My Nginx</h1>default.conf是 Nginx 的默认配置文件(如果名称不是 default.conf,可能会出问题。因为基础 nginx 镜像会默认在 /etc/nginx/conf.d 目录下面创建一个监听 80 端口的默认文件 default.conf)。我们需要使用我们自定义的 default.conf 文件覆盖默认的 Nginx 配置。例如:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/myNginx;
index index.html index.htm;
}
}在该目录下创建一个名为Dockerfile的文件,并添加以下内容:
FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
RUN mkdir /usr/share/nginx/html/myNginx
COPY ./index.html /usr/share/nginx/html/myNginx/index.html说明:
FROM nginx:latest:使用官方的 Nginx 最新镜像作为基础镜像,这样可以避免从头开始构建 Nginx 环境,节省时间和资源。
COPY./default.conf /etc/nginx/conf.d/default.conf:将本地目录下的 default.conf 文件复制到容器内的 /etc/nginx/conf.d/ 目录下。这个目录是 Nginx 配置文件的存放位置之一,通过替换默认配置文件或添加新的配置文件,可以对 Nginx 的行为进行定制。例如,可以设置不同的服务器端口、虚拟主机、反向代理规则等。
RUN mkdir /usr/share/nginx/html/myNginx:在容器内创建一个新的目录 /usr/share/nginx/html/myNginx。这个目录通常是 Nginx 存放网页文件的位置。
COPY./index.html /usr/share/nginx/html/myNginx/index.html:将本地的 index.html 文件复制到新创建的目录中。这样,当 Nginx 启动时,它可以根据配置文件中的设置,将这个网页文件提供给客户端访问。
在 myNginx 目录下执行命令来构建镜像:
root@hxstrive:~/myNginx# docker build -t mynginx .
[+] Building 1.0s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 207B 0.0s
=> [internal] load metadata for docker.io/library/nginx:latest 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/4] FROM docker.io/library/nginx:latest 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 230B 0.0s
=> [2/4] COPY ./default.conf /etc/nginx/conf.d/default.conf 0.1s
=> [3/4] RUN mkdir /usr/share/nginx/html/myNginx 0.3s
=> [4/4] COPY ./index.html /usr/share/nginx/html/myNginx/index.html 0.1s
=> exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:65f6c7f25df344794bcdba2ba023d22ada39fa5d1e2cfc138210aaf0e5c55bb1 0.0s
=> => naming to docker.io/library/mynginx 0.0s
root@hxstrive:~/myNginx# docker images | grep mynginx
mynginx latest 65f6c7f25df3 14 seconds ago 188MB注意:
(1)新构建的镜像名称一定要全部小写,否则会抛错,这是 docker 的硬性要求。
(2)请在 Dockerfile 文件所在的目录下面执行 docker build 指令,当然,也可以将末尾的点号去掉,指定路径来设置构建路径。
镜像构建完成后,可以使用以下命令运行容器:
root@hxstrive:~/myNginx# docker run --name mynginx -d -p 18080:80 mynginx
ee745c447885b0445dc49dda7192b1bceed2cd13f4f5951c02969dac5e6d97e0
root@hxstrive:~/myNginx# docker ps | grep mynginx
ee745c447885 mynginx "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:18080->80/tcp, :::18080->80/tcp mynginx上面命令将在后台运行 mynginx 容器,并将容器的 80 端口映射到宿主机的 18080 端口。
现在,你可以在浏览器中访问 http://宿主机IP:18080 来查看你的 Nginx 服务。你将会看见自定义的 index.html 文件:

点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。