您的位置:

详解docker+nginx配置指南

一、dockernginx配置文件

docker是目前最流行的容器化技术,nginx则是目前广泛用于Web服务器的开源软件。将两者结合,有助于快速打造高效的网络服务器。

配置docker和nginx,需要先创建一个nginx配置文件。这个文件可以是任何带有nginx配置的文件(通常是nginx.conf)。在文件中,我们可以指定nginx的一些选项,如端口号、匹配规则等。

    server {
        listen      80;
        server_name localhost;
        root        /var/www/html;
        index       index.html;
    }

上面示例中的配置表示,监听80端口,将localhost解析到/var/www/html目录下,并且index文件默认为index.html。

二、dockernginx 端口转发

配置nginx后,我们还需要通过docker来实现端口转发。端口转发将客户端的请求重定向到运行nginx的docker容器内部的端口。这里以将容器内nginx的80端口映射到宿主机的8080端口为例。

首先,启动nginx容器,并将宿主机的8080端口映射到容器内的80端口。

    docker run -d -p 8080:80 nginx

这里的-d参数表示在后台运行,-p参数表示将宿主机的8080端口和容器内的80端口绑定。

如果需要对端口进行更细致的设置,可以使用-p参数指定要使用的IP地址、宿主机文件系统上的路径以及容器内文件系统上的路径等。

    docker run -d -p 127.0.0.1:8080:80 -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx

上面的示例中,通过-v参数将宿主机的nginx.conf文件挂载到容器内的/etc/nginx/nginx.conf路径。

三、docker配置mysql

在配置nginx之前,我们需要先安装mysql,并将其配置为docker容器。

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

这里的--name参数表示为容器指定一个名称,-e参数表示设置环境变量,-d参数表示在后台运行。mysql:latest表示使用最新版本的mysql。接下来我们可以连接到mysql容器,然后执行SQL语句。

    docker exec -it some-mysql bash
    mysql -pMyNewPass4!
    SHOW DATABASES;

以上示例中,我们先通过exec命令进入到正在运行的mysql容器的bash shell中,然后使用mysql客户端工具连接到mysql数据库。

执行的SQL语句是SHOW DATABASES,它将显示已经创建的所有数据库。通过这种方式可以方便地管理mysql数据库。

四、docker与nginx搭配使用的示例

下面是一个完整的docker和nginx搭配使用的示例。在本示例中,我们在容器内部运行nginx和php-fpm,并将它们连接到mysql数据库。

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - ./data/db:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root

  web:
    image: nginx:1.13.3-alpine
    restart: always
    volumes:
      - ./src:/var/www/html/
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    depends_on:
      - php

  php:
    build: .
    volumes:
      - ./src:/var/www/html/
    restart: always
    ports:
      - "9000:9000"
    environment:
      MYSQL_HOST: db
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_DATABASE: docker
    depends_on:
      - db

在这个示例中,我们定义了三个服务(db、web和php)。db服务是用于存储mysql数据库的服务;php服务是用于运行php-fpm的服务。web服务是运行nginx和连接到mysql的服务。

在volumes参数中,我们将宿主机的./src目录挂载到了容器内的/var/www/html/目录。这个挂载操作有助于随时对文件进行修改而无需重新构建镜像。

在ports参数中,我们将宿主机的8080端口和9000端口与容器内的80端口和9000端口进行了映射。这样,我们就可以通过浏览器访问localhost:8080,来访问nginx所运行的Web站点。

五、总结

本文详细阐述了dockernginx配置的过程,从配置nginx文件、端口转发到与mysql的搭配使用以及一个完整的示例,希望对读者有所帮助。