在 docker 中安装 nginx 非常简单,接下来本文就分享在 docker 中安装 nginx 的步骤。

1 拉取nginx docker镜像

docker pull nginx

2 启动nginx docker容器

然后就可以启动nginx docker容器了,如下:

docker run --name mynginx1 -p 80:80 -d nginx

下面是docker run命令选项的解释:

  • --name mynginx1命令将 docker 容器命名为 mynginx1
  • -p 80:80表示端口映射,这里是从主机的端口80映射到容器的端口80
  • -d表示以后台模式运行容器:

以下是关于 docker 前台模式和后台模式的说明:

要以后台模式启动容器,您可以使用 -d=true 或仅使用 -d 选项。按照设计,以后台模式启动的容器会在用于运行容器的根进程退出时退出,除非您还指定了 –rm 选项。如果将 -d 与 –rm 一起使用,则容器在退出时或守护程序退出时被删除,以先发生者为准。

在前台模式下(不指定-d时的默认模式),docker run可以启动容器中的进程,并将控制台附加到进程的标准输入、输出和标准错误。它甚至可以伪装成 TTY(这是大多数命令行可执行文件所期望的)并传递信号。

3 将配置文件从主机映射到容器

如果要将 nginx 配置文件从主机映射到容器,可以执行以下操作:

首先,将配置目录从容器复制到主机:

docker cp mynginx1:/etc/nginx .

上面的命令从mynginx1容器的目录复制/etc/nginx到当前主机的工作目录。

然后我们在主机上得到了这个目录:

[root@mx nginx]# ll nginx
drwxr-xr-x 2 root root 4096 11月  9 16:17 conf.d
-rw-r--r-- 1 root root 1007 10月 19 15:56 fastcgi_params
-rw-r--r-- 1 root root 5349 10月 19 15:56 mime.types
lrwxrwxrwx 1 root root   22 10月 19 17:32 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root  648 10月 19 17:32 nginx.conf
-rw-r--r-- 1 root root  636 10月 19 15:56 scgi_params
-rw-r--r-- 1 root root  664 10月 19 15:56 uwsgi_params

[root@mx nginx]# mv nginx conf

您可以看到所有配置文件和目录现在都位于主机的当前工作路径上。我们将nginx目录重命名为conf,因为该目录只包含 nginx 的所有配置文件。

然后我们可以再次启动 nginx 容器:

docker stop mynginx1

docker rm mynginx1

docker container run 
  --rm 
  --name mynginx1 
  --volume "$PWD/conf":/etc/nginx 
  -p 80:80 
  -d 
  nginx

这里我们使用--volume "$PWD/conf":/etc/nginx 命令来映射主机的./conf目录到容器的/etc/nginx目录,然后如果你停止并删除容器,配置文件不会被触及,它们可以在新的 nginx 容器中再次使用。

4 检查nginx容器是否运行

我们可以通过以下方式检查 nginx 是否正在运行:

[root@mx nginx]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS                    PORTS NAMES
691a241bb6fe   nginx               "/docker-entrypoint.…"   13 seconds ago   Up 12 seconds             0.0.0.0:80->80/tcp, :::80->80/tcp


[root@mx nginx]# docker logs 69
/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: IPv6 listen already enabled
/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
2022/11/09 08:29:41 [notice] 1#1: using the "epoll" event method
2022/11/09 08:29:41 [notice] 1#1: nginx/1.23.2
2022/11/09 08:29:41 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/11/09 08:29:41 [notice] 1#1: OS: Linux 3.10.0-1160.76.1.el7.x86_64
2022/11/09 08:29:41 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/11/09 08:29:41 [notice] 1#1: start worker processes
2022/11/09 08:29:41 [notice] 1#1: start worker process 22