在前端的开发工作中,Nginx 是一个非常重要的服务器,经常用来处理请求、负载均衡等任务。而 Docker 可以帮助我们轻松部署 Nginx,使得我们能够快速创建并运行多个相互独立的 Nginx 实例。在这篇文章中,我们将介绍如何使用 Docker 部署 Nginx。
安装 Docker
首先需要安装 Docker,如果你已经安装过 Docker,请跳过这一步。
Docker 安装分为多个步骤,这里仅提供简单的说明,更详细的安装步骤可以参考 Docker 官方文档。
Ubuntu
$ sudo apt-get update $ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt-get update $ sudo apt-get install -y docker-ce
CentOS
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo $ sudo yum update -y && sudo yum install docker-ce docker-ce-cli containerd.io -y $ sudo systemctl start docker $ sudo systemctl enable docker
编写 Dockerfile
我们需要创建一个 Dockerfile,来描述如何构建 Docker 镜像。下面是一个典型的 Dockerfile:
FROM nginx:1.11 COPY nginx.conf /etc/nginx/nginx.conf COPY sites-enabled/ /etc/nginx/sites-enabled/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
这个 Dockerfile 的意思是:
- 使用官方的 Nginx 镜像作为基础
- 将本地的 nginx.conf 文件复制到容器中的 /etc/nginx/nginx.conf 中
- 将本地的 sites-enabled 目录复制到容器中的 /etc/nginx 目录中
- 暴露容器的 80 端口
- 在容器启动后,运行 nginx,并在前台执行
构建 Docker 镜像
在 Dockerfile 所在目录中执行下面的命令,来构建 Docker 镜像:
$ docker build -t mynginx .
其中,-t 参数指定了镜像名称,最后的点表示当前目录。
运行 Docker 容器
我们可以用下面的命令来运行 Docker 容器:
$ docker run --name mynginx -d -p 8080:80 mynginx
其中,--name 参数指定了容器名称,-d 参数表示后台运行,-p 参数指定了端口映射,mynginx 是我们之前构建的镜像名称。
现在我们可以在浏览器中访问 http://localhost:8080 来查看我们运行的 Nginx。
修改 Nginx 配置
如果需要修改 Nginx 的配置,可以在 Dockerfile 中指定,然后重新构建镜像即可。例如,我们需要修改 /etc/nginx/nginx.conf 文件中的 server_name,可以在 Dockerfile 中加入下面的命令来修改:
RUN sed -i 's/server_name localhost;/server_name myserver.com;/g' /etc/nginx/nginx.conf
这里使用 sed 命令来进行文本替换。
总结
在这篇文章中,我们学习了如何使用 Docker 部署 Nginx。我们使用 Dockerfile 来描述如何构建 Docker 镜像,然后用 Docker 运行容器。通过这种方式,我们可以轻松地创建并运行多个相互独立的 Nginx 实例。如果你想要部署多个服务器应用,那么 Docker 就是你的不二选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646488cf968c7c53b056762f