在 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