# Docker Nginx

docker hub 网址:https://hub.docker.com/_/nginx (opens new window)

当前(2021-04-02) latest 版本和 1.19.9 版本是同一个版本;stable 版本和 1.18.0 版本是同一个版本。

# 1. 安装及测试

# 查询中央仓库
docker search -f is-official=true mysql

# 从中央仓库下载
docker pull nginx:1.18.0

# 或,直接导入已有的镜像文件
# docker load -i nginx-1.1.18.0.tar

# 查看本地镜像
docker images

会出现类似如下内容:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         1.18.0    b9e1dc12387a   2 months ago   133MB
nginx         1.19.9    7ce4f91ef623   2 days ago     133MB

运行容器:

# 删除曾经已有的同名容器
docker stop nginx-test
docker rm nginx-test

# 创建并运行 nginx 容器的语法
docker run \
    -d \
    --name <指定容器名> \
    -p <指定宿主机端口>:80 \ 
    nginx:1.18.0

例如:

docker run \
    -d \
    --name nginx-test \
    -p 80:80 \ 
    nginx:1.16.1

验证安装成功

  • 通过 docker ps 命令查看容器的运行信息:

    docker ps
    

    会看到类似如下信息:

  • 访问 nginx 主页

    启动容器后,访问 http://宿主机IP:80 能看到 Nginx 的欢迎界面: Welcome to nginx!

# 2. 容器中的配置文件和数据的存储

Docker Nginx 的配置文件是容器中的

/etc/nginx/nginx.conf

Docker Nginx 的日志目录是容器中的

/var/log/nginx/

Docker Nginx 的静态资源文件目录是容器中的

/usr/share/nginx/html

# 3. 配置与挂载

  • 删除已存在的同名容器

    docker stop nginx-80
    docker rm nginx-80
    

    后续可通过 docker run--rm 选项免去『删除』这步操作。

  • 在宿主机上创建目录及配置文件。

    mkdir -p ~/docker/nginx/80/log
    touch ~/docker/nginx/80/nginx.conf
    
  • 创建并运行容器

    docker run  \
        -d  \
        --rm \
        --name nginx-80 \
        -p 80:80 \
        -v ~/docker/nginx/80/nginx.conf:/etc/nginx/nginx.conf:ro \
        -v ~/docker/nginx/80/log:/var/log/nginx \
        nginx:1.18.0
    

以下内容是 nginx 配置文件的默认内容:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

# 4. docker-compose 启动

version: '3'
services:
  nginx:
    image: nginx:stable
    container_name: nginx-zgg
    volumes:
      - ~/docker/nginx/80/logs:/etc/nginx/logs
      - ~/docker/nginx/80/nginx.conf:/etc/nginx/nginx.conf
      - ~/docker/nginx/80/html:/usr/share/nginx/html
    ports:
      - 80:80