Docker 安装 Nginx(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

Docker 是容器化技术领域的“瑞士军刀”,而 Nginx 则是 Web 服务器领域的“瑞士军刀”。两者的结合不仅能够简化开发环境的搭建,还能通过容器化实现高效部署与运维。本文将从零开始,带领编程初学者和中级开发者逐步掌握如何通过 Docker 安装并配置 Nginx。通过实际案例与代码示例,读者将理解容器化部署的优势,并能够独立完成相关操作。


Docker 基础概念:容器与镜像的“集装箱”比喻

什么是 Docker?

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖打包成一个轻量级、可移植的容器。想象 Docker 是一个集装箱码头,而应用程序是需要运输的货物:

  • 镜像(Image):如同集装箱的设计图纸,记录了应用程序的运行环境与配置。
  • 容器(Container):基于镜像运行的“实例”,就像根据图纸组装的集装箱,可以随时启动、停止或删除。

Docker 的核心优势在于环境一致性——无论在本地开发机还是生产服务器上,只要运行相同的镜像,就能确保应用程序的行为一致。


环境准备:安装 Docker

在开始安装 Nginx 之前,需确保本地已安装 Docker。以下是不同操作系统下的安装步骤:

Linux 系统(以 Ubuntu 为例)

sudo apt-get update  

sudo apt-get install docker-ce docker-ce-cli containerd.io  

docker --version  # 应输出 Docker 版本号,如 Docker version 20.10.7, build f0df350  

macOS 或 Windows 系统

  1. 访问 Docker 官网 ,下载并安装 Docker Desktop。
  2. 安装完成后,打开 Docker Desktop 并确保其状态为“Running”。

步骤一:拉取 Nginx 镜像

Docker Hub 是全球最大的容器镜像仓库,提供了官方维护的 Nginx 镜像。通过以下命令获取镜像:

docker pull nginx  

执行后,Docker 会自动下载最新版本的 Nginx 镜像。若需指定版本,可添加标签(例如 nginx:1.21.3)。


步骤二:运行 Nginx 容器

基础命令:启动容器

使用 docker run 命令启动 Nginx 容器:

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

参数解释

参数作用
-d后台运行容器(类似“守护进程”模式)
-p 80:80将容器的 80 端口映射到宿主机的 80 端口
--name my-nginx为容器指定名称(便于后续管理)
nginx使用名为 nginx 的镜像启动容器

验证容器运行状态

docker ps  

若看到类似以下输出,说明容器已成功运行:

CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                  NAMES  
abc123...      nginx         "nginx -g 'daemon of…"   2 minutes ago    Up 2 minutes    0.0.0.0:80->80/tcp     my-nginx  

步骤三:访问 Nginx 默认页面

在浏览器中输入 http://localhost,若看到“Welcome to nginx!”的欢迎页面,说明安装成功。


进阶操作:自定义 Nginx 配置

修改 Nginx 配置文件

Nginx 的核心配置文件位于容器内的 /etc/nginx/nginx.conf。通过 Docker 的**卷挂载(Volume)**功能,可以将本地配置文件与容器内的文件绑定,实现动态修改。

示例:自定义欢迎页面

  1. 在本地创建目录 my-nginx-conf,并添加自定义的 nginx.conf 文件:

    worker_processes auto;  
    events { worker_connections 1024; }  
    http {  
        server {  
            listen 80;  
            location / {  
                root /usr/share/nginx/html;  
                index index.html;  
            }  
        }  
    }  
    
  2. 重新运行容器,挂载配置文件与静态资源:

    docker run -d \  
        -p 80:80 \  
        -v $PWD/my-nginx-conf/nginx.conf:/etc/nginx/nginx.conf \  
        -v $PWD/my-html:/usr/share/nginx/html \  
        --name my-nginx \  
        nginx  
    
    • $PWD 表示当前目录路径。
    • -v 参数将本地目录挂载到容器中,实现配置与文件的实时同步。
  3. my-html 目录下创建 index.html,输入自定义内容后,刷新浏览器即可看到效果。


进阶技巧:Docker Compose 简化部署

对于复杂项目,Docker Compose 可以通过 YAML 文件管理多容器应用。例如,创建 docker-compose.yml

version: '3'  
services:  
  web:  
    image: nginx  
    ports:  
      - "80:80"  
    volumes:  
      - ./nginx.conf:/etc/nginx/nginx.conf  
      - ./html:/usr/share/nginx/html  
    restart: always  

执行以下命令启动服务:

docker-compose up -d  

常见问题与解决

问题 1:端口已被占用

若提示 port is already allocated,可尝试:

  • 修改 -p 参数中的宿主机端口(例如 -p 8080:80)。
  • 终止占用端口的进程(Linux 命令:sudo kill -9 $(lsof -t -i:80))。

问题 2:容器停止后无法访问

检查容器状态:

docker ps -a  

若容器已退出,可尝试:

docker restart my-nginx  

结论

通过本文,读者已掌握 Docker 安装 Nginx 的核心流程:从环境搭建到容器运行,再到配置修改与故障排查。Docker 的容器化技术不仅简化了开发环境的管理,还为团队协作与持续集成提供了标准化的解决方案。

对于希望深入学习的开发者,建议进一步探索以下方向:

  • Dockerfile 自定义镜像
  • 使用 Traefik 等工具管理反向代理
  • 结合 Kubernetes 实现容器编排

通过实践与探索,Docker 与 Nginx 的组合将成为高效开发与部署的得力工具。

最新发布