DockerFile实战

发布于:2025-02-11 ⋅ 阅读:(34) ⋅ 点赞:(0)

Dockerfile 详解 

认识Dockerfile

镜像的生成途径 基于容器制作

dockerfile,docker build   

        基于容器制作镜像,已经在上篇基于容器制作镜像并上传到Docker Registry详细讲解过了,大家有 需要可以去上篇查找;这篇主要讲解基于Dockerfile,使用docker build 命令制作镜像。

Dockerfile 介绍   

        Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除 了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数 (如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。   

        镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构 建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜 像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。   

        Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每 一条指令的内容,就是描述该层应当如何构建。

 Dockerfile 指令

  • FROM
  • MAINTAINER
  • COPY
  • ADD
  • WORKDIR
  • VOLUME
  • EXPOSE
  • ENV
  • RUN
  • CMD
  • ENTRYPOINT
  • HEALTHCHECK
  • ONBUILD
  • USER ARG
  • SHELL
  • STOPSIGNAL

Dockerfile 的使用

(1)Dockerfile 编写的基本结构

        Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

(2)一台主机可以有多个Dockerfile   

        要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录 下构建新的镜像;   

注意:Dockerfile 中所包含的需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录 下存在;

(3)docker build 基于dockerfile制作镜像的命令 ① 格式: ② 选项: -t:打标签 -c,- cpu-shares int :CPU份额(相对权重) -m,- memory bytes:内存限制 --build-arg:设置构建时变量,就是构建的时候修改ARG指令的参数

 FROM 指令

  •  介绍 FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句; FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环 境;
  • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指 定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的 镜像文件,docker build 会返回一个错误信息;
  • FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。 如果FROM语句没有指定镜像标签,则默认使用latest标签。

MAINTAINER

用于让dockerfile制作者提供本人的详细信息 dockerfile 并不限制MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后

COPY

介绍: 用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中

  • 同COPY指令 如果为URL且不以 / 结尾,则指定的文件将被下载并直接被创建为;如果以/结尾,则文件名URL指定 的文件将被直接下载并保存为/ ,如果是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于"tar-x"命 令;
  • 然而,通过URL获取到的tar文件将不会自动展开;
  • 如果有多个,或其间接或直接使用了通配符,则必须是一个以/结尾的目录路径 ;
  • 如果不以/结尾,则 其被视作一个普通文件,的内容将被直接写入到;

示例:

[root@docker-test docker]# cat Dockerfile 
FROM nginx:latest #指定镜像
MAINTAINER "wyx"     #介绍本人信息
COPY index.html /data/web/html/   #将当前目录文件拷贝到指定目录

[root@docker-test docker]# docker build -t mynginx:v1 ./
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/3 : MAINTAINER "wyx"
 ---> Running in 07d0fdcc6577
Removing intermediate container 07d0fdcc6577
 ---> c1bf37c9ee62
Step 3/3 : COPY index.html /data/web/html/
 ---> 95bea8d32a79
Successfully built 95bea8d32a79
Successfully tagged mynginx:v1
[root@docker-test docker]# docker run --name web1 --rm mynginx:v1 cat /data/web/html/index.html
test123

COPY 目录

[root@docker-test docker]# vim  Dockerfile 
FROM nginx:latest
MAINTAINER "wyx"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/

[root@docker-test docker]# cp -r /etc/yum.repos.d/ ./
[root@docker-test docker]# ls yum.repos.d/
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-x86_64-kernel.repo
CentOS-Base.repo.bak   CentOS-Media.repo      docker-ce.repo
CentOS-CR.repo         CentOS-Sources.repo    kubernetes.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo
[root@docker-test docker]# ll
total 12
-rw-r--r--. 1 root root  102 Dec 24 06:02 Dockerfile
-rw-r--r--. 1 root root    8 Dec 24 05:28 index.html
drwxr-xr-x. 2 root root 4096 Dec 24 06:02 yum.repos.d

[root@docker-test docker]# docker build -t busybox:v1 ./
Sending build context to Docker daemon  32.26kB
Step 1/4 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/4 : MAINTAINER "wyx"
 ---> Using cache
 ---> c1bf37c9ee62
Step 3/4 : COPY index.html /data/web/html/
 ---> Using cache
 ---> 95bea8d32a79
Step 4/4 : COPY yum.repos.d /etc/yum.repos.d/
 ---> bacdc7bf432d
Successfully built bacdc7bf432d
Successfully tagged busybox:v1
[root@docker-test docker]# docker run --name web1 --rm busybox:v1 ls /etc/yum.repos.d/CentOS-Base.repo
CentOS-Base.repo.bak
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
CentOS-x86_64-kernel.repo
docker-ce.repo
kubernetes.repo

ADD

介绍 :ADD 指令类似于COPY指令,ADD支持使用TAR文件和URL路径

[root@docker-test docker]# vim  Dockerfile 
FROM nginx:latest
MAINTAINER "wyx"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/
ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/

[root@docker-test docker]# docker build -t busybox:v2 ./
Sending build context to Docker daemon  32.26kB
Step 1/5 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/5 : MAINTAINER "wyx"
 ---> Using cache
 ---> c1bf37c9ee62
Step 3/5 : COPY index.html /data/web/html/
 ---> Using cache
 ---> 95bea8d32a79
Step 4/5 : COPY yum.repos.d /etc/yum.repos.d/
 ---> Using cache
 ---> bacdc7bf432d
Step 5/5 : ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
Downloading  1.028MB/1.028MB
 ---> 41814f545f8d
Successfully built 41814f545f8d
Successfully tagged busybox:v2
[root@docker-test docker]# docker images
REPOSITORY                                                                 TAG        IMAGE ID       CREATED          SIZE
busybox                                                                    v2         41814f545f8d   7 seconds ago    193MB

[root@docker-test docker]# docker run --name web1 --rm busybox:v2  ls /usr/local/src
nginx-1.15.8.tar.gz

COPY 本地的路径的tar包

[root@docker-test docker]# vim  Dockerfile 
FROM nginx:latest
MAINTAINER "wyx"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
ADD nginx-1.15.8.tar.gz /usr/local/src/

[root@docker-test docker]# docker build -t busybox:v3 ./
Sending build context to Docker daemon  1.061MB
Step 1/5 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/5 : MAINTAINER "wyx"
 ---> Using cache
 ---> c1bf37c9ee62
Step 3/5 : COPY index.html /data/web/html/
 ---> Using cache
 ---> 95bea8d32a79
Step 4/5 : COPY yum.repos.d /etc/yum.repos.d/
 ---> Using cache
 ---> bacdc7bf432d
Step 5/5 : ADD nginx-1.15.8.tar.gz /usr/local/src/
 ---> 247eee4aacf4
Successfully built 247eee4aacf4
Successfully tagged busybox:v3
[root@docker-test docker]# docker run --name web1 --rm busybox:v3 ls /usr/local/src /usr/local/src/nginx-1.15.8
/usr/local/src:
nginx-1.15.8

/usr/local/src/nginx-1.15.8:
CHANGES
CHANGES.ru
LICENSE
README
auto
conf
configure
contrib
html
man
src

WORKDIR

介绍 :用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定设定工作目录

[root@docker-test docker]# vim  Dockerfile 
[root@docker-test docker]# docker build -t busybox:v4 ./
Sending build context to Docker daemon  1.061MB
Step 1/7 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/7 : MAINTAINER "wyx"
 ---> Using cache
 ---> c1bf37c9ee62
Step 3/7 : COPY index.html /data/web/html/
 ---> Using cache
 ---> 95bea8d32a79
Step 4/7 : COPY yum.repos.d /etc/yum.repos.d/
 ---> Using cache
 ---> bacdc7bf432d
Step 5/7 : WORKDIR /usr/local/
 ---> Running in fe8f33301f23
Removing intermediate container fe8f33301f23
 ---> d1e12db98037
Step 6/7 : ADD nginx-1.15.8.tar.gz  ./src/
 ---> 4b892976c4b9
Step 7/7 : VOLUME /data/mysql
 ---> Running in cd74dbec4f1d
Removing intermediate container cd74dbec4f1d
 ---> 43c4cc1bd9ca
Successfully built 43c4cc1bd9ca
Successfully tagged busybox:v4

[root@docker-test docker]# cat Dockerfile 
FROM nginx:latest
MAINTAINER "wyx"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
WORKDIR /usr/local/
ADD nginx-1.15.8.tar.gz  ./src/
VOLUME /data/mysql

[root@docker-test docker]# docker run --name web1 -d busybox:v4 /bin/sh

0aeb7b22b5270cd6163d06de2e8cf0434a5678d36a11bd981fabb3caaddb78fe
[root@docker-test src]# docker inspect -f '{{.Mounts}}' web1
[{volume 3b695cc98822131cf490c47ce3fe8f852abe30ef5e49e11987ffb6f8887a69b6 /var/lib/docker/volumes/3b695cc98822131cf490c47ce3fe8f852abe30ef5e49e11987ffb6f8887a69b6/_data /data/mysql local  true }]

EXPOSE

介绍 用于为容器打开指定要监听的端口以实现与外部通信、

注: 用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议 EXPOSE指令可一次指定多个端口,例如:EXPOSE 11211/udp 11211/tcp

[root@docker-test docker]# docker build -t my_nginx_image .
FROM nginx:latest
MAINTAINER "wyx"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
WORKDIR /usr/local/
ADD nginx-1.15.8.tar.gz  ./src/
VOLUME /data/mysql
EXPOSE 80/tcp

Sending build context to Docker daemon  1.061MB
Step 1/8 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/8 : MAINTAINER "wyx"
 ---> Using cache
 ---> c1bf37c9ee62
Step 3/8 : COPY index.html /data/web/html/
 ---> Using cache
 ---> 95bea8d32a79
Step 4/8 : COPY yum.repos.d /etc/yum.repos.d/
 ---> Using cache
 ---> bacdc7bf432d
Step 5/8 : WORKDIR /usr/local/
 ---> Using cache
 ---> d1e12db98037
Step 6/8 : ADD nginx-1.15.8.tar.gz  ./src/
 ---> Using cache
 ---> 4b892976c4b9
Step 7/8 : VOLUME /data/mysql
 ---> Using cache
 ---> 43c4cc1bd9ca
Step 8/8 : EXPOSE 80/tcp
 ---> Using cache
 ---> 3a875467607c
Successfully built 3a875467607c
Successfully tagged my_nginx_image:latest
[root@docker-test docker]# 

[root@docker-test docker]# docker run --name web3 -P -itd my_nginx_image
82f24a0c0ebdda3482dfdc94b39d859092307949619c9c5d76ddb5677c689d71
[root@docker-test docker]# docker ps
CONTAINER ID   IMAGE                                                        COMMAND                  CREATED         STATUS         PORTS                                     NAMES
82f24a0c0ebd   my_nginx_image                                               "/docker-entrypoint.…"   9 seconds ago   Up 7 seconds   0.0.0.0:49155->80/tcp, :::49155->80/tcp   web3
633a6edcfdd6   registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/pause:3.2   "/pause"                 6 hours ago     Up 6 hours                                               k8s_POD_calico-node-rkxlj_kube-system_32f47878-a857-4db5-b475-85a52b04be40_0
3d4610f6f6e5   8dbf9a6aa186                                                 "/usr/local/bin/kube…"   6 hours ago     Up 6 hours                                               k8s_kube-proxy_kube-proxy-dchxk_kube-system_7142c019-07ff-4244-bd82-eb7c66ac5b0d_0
6afc8b4941e2   registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/pause:3.2   "/pause"                 6 hours ago     Up 6 hours                                               k8s_POD_kube-proxy-dchxk_kube-system_7142c019-07ff-4244-bd82-eb7c66ac5b0d_0
9cf3f15f63fa   nginx                                                        "/docker-entrypoint.…"   5 days ago      Up 7 hours     0.0.0.0:88->80/tcp, :::88->80/tcp         mynginx
[root@docker-test docker]# curl http://192.168.58.227:49155
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

ENV

介绍 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、 COPY等)所调用 调用格式为$variable_ name 或 ${variable_ name}

[root@docker-test docker]# docker run --name web4 -P -it busybox:v6 ls /usr/local/src /data/web/html/
/data/web/html/:
index.html

/usr/local/src:
nginx-1.15.8
[root@docker-test docker]# cat Dockerfile 
FROM nginx:latest
MAINTAINER "wyx"
ENV DOC_ROOT=/data/web/html/ \
    WEB_SERVER_PACKAGE="nginx-1.15.8"
#COPY index.html /data/web/html/
#COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
#WORKDIR /usr/local/
#ADD nginx-1.15.8.tar.gz  ./src/
#VOLUME /data/mysql
#EXPOSE 80/tcp
COPY index.html ${DOC_ROOT}
COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
WORKDIR /usr/local/
ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src/
VOLUME /data/mysql
EXPOSE 8080:80/tcp

RUN

 介绍 用于指定docker build过程中运行的程序,其可以是任何命令

语法

RUN <command> 或
RUN ["<executable>", "<param1>", "<param2>"]

注: 第一种格式中,通常是一个shell命令, 且以“/bin/sh -c”来运行它,这意味着此进程在容器中的 PID不为1,不能接收Unix信号,因此,当使用docker stop 命令停止容器时,此进程接收不到 SIGTERM信号;

第二种语法格式中的参数是一个JSON格式的数组,其中为要运行的命令,后面的 为传递给命令的 选项或参数;然而,此种格式指定的命令不会以“/bin/sh -c”来发起,因此常见的shell操作如变量 替换以及通配符(?,*等)替换将不会进行;不过,如果要运行的命令依赖于此shell特性的话,可以将 其替换为类似下面的格式。 RUN ["/bin/bash", "-c", "", ""]

[root@docker-test docker]# docker run --name web1  -P -it busybox:v7 ls /usr/local/src

nginx-1.15.8  nginx-1.15.8.tar.gz

[root@docker-test docker]# cat Dockerfile 

FROM nginx:latest
MAINTAINER "Along <along@along.com>"
ENV DOC_ROOT=/data/web/html/ \
WEB_SERVER_PACKAGE="nginx-1.15.8.tar.gz"
COPY index.html ${DOC_ROOT}
COPY yum.repos.d /etc/yum.repos.d/
WORKDIR /usr/local/
ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} ./src/
#ADD ${WEB_SERVER_PACKAGE} ./src/
VOLUME /data/mysql
EXPOSE 8080:80/tcp
RUN cd ./src && \
    tar -xf ${WEB_SERVER_PACKAGE}

 CMD

 介绍 类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同 RUN指令运行于映像文件**构建过程中,而CMD指令运行于基于Dockerfile构建出的新映像文件启 动一个容器时** CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止; 不过,CMD指定的命令其可以被docker run的命令行选项所覆盖 在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效

[root@docker-test docker]# cat Dockerfile 

FROM nginx:latest
MAINTAINER "Along <along@along.com>"
ENV DOC_ROOT=/data/web/html/ \
WEB_SERVER_PACKAGE="nginx-1.15.8.tar.gz"
COPY index.html ${DOC_ROOT}
COPY yum.repos.d /etc/yum.repos.d/
WORKDIR /usr/local/
ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} ./src/
#ADD ${WEB_SERVER_PACKAGE} ./src/
VOLUME /data/mysql
EXPOSE 8080:80/tcp
RUN cd ./src && \
    tar -xf ${WEB_SERVER_PACKAGE}
CMD ["nginx", "-g", "daemon off;"]
[root@docker-test docker]# docker build -t my_nginx_image .
Sending build context to Docker daemon  1.061MB

Step 1/11 : FROM nginx:latest
 ---> 66f8bdd3810c
Step 2/11 : MAINTAINER "Along <along@along.com>"
 ---> Using cache
 ---> bd29b5365b30
Step 3/11 : ENV DOC_ROOT=/data/web/html/ WEB_SERVER_PACKAGE="nginx-1.15.8.tar.gz"
 ---> Using cache
 ---> b26eb357298d
Step 4/11 : COPY index.html ${DOC_ROOT}
 ---> Using cache
 ---> 32e0fcfa4817
Step 5/11 : COPY yum.repos.d /etc/yum.repos.d/
 ---> Using cache
 ---> b7cf3b2e8a12
Step 6/11 : WORKDIR /usr/local/
 ---> Using cache
 ---> 227e205c4eb2
Step 7/11 : ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} ./src/
Downloading  1.028MB/1.028MB
 ---> Using cache
 ---> 67e658479614
Step 8/11 : VOLUME /data/mysql
 ---> Using cache
 ---> 579cfef47dcf
Step 9/11 : EXPOSE 8080:80/tcp
 ---> Using cache
 ---> 406af9455c09
Step 10/11 : RUN cd ./src &&     tar -xf ${WEB_SERVER_PACKAGE}
 ---> Using cache
 ---> 68bd15c1d1a4
Step 11/11 : CMD ["nginx", "-g", "daemon off;"]
 ---> Running in 04e187b011b6
Removing intermediate container 04e187b011b6
 ---> e88418cea855
Successfully built e88418cea855
Successfully tagged my_nginx_image:latest
[root@docker-test docker]# 
[root@docker-test docker]# docker rm web1
web1
[root@docker-test docker]# docker run --name web1 -P -it my_nginx_image

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/12/24 12:44:03 [notice] 1#1: using the "epoll" event method
2024/12/24 12:44:03 [notice] 1#1: nginx/1.27.3
2024/12/24 12:44:03 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2024/12/24 12:44:03 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64
2024/12/24 12:44:03 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/12/24 12:44:03 [notice] 1#1: start worker processes
2024/12/24 12:44:03 [notice] 1#1: start worker process 29
2024/12/24 12:44:03 [notice] 1#1: start worker process 30
192.168.58.227 - - [24/Dec/2024:12:45:49 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
2024/12/24 12:45:55 [notice] 1#1: signal 28 (SIGWINCH) received
2024/12/24 12:45:55 [notice] 30#30: signal 28 (SIGWINCH) received
2024/12/24 12:45:55 [notice] 1#1: signal 28 (SIGWINCH) received
2024/12/24 12:45:55 [notice] 29#29: signal 28 (SIGWINCH) received


[root@docker-test src]# curl 192.168.58.227:49162
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>


网站公告

今日签到

点亮在社区的每一天
去签到