点击学习开源企业 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 软件 教程。