Win10中使用docker安装nginx随笔

介绍

本来是用的nginxwindows版本,但是后面考虑要容器化部署项目,并且相关的软件,数据库、redis等也是单独安装的。既然要使用docker,那索性把能容器化的软件全部使用docker来处理。由于安装过程中踩了一些坑,所以就有了这篇文章,记录以防以后再次踩坑。

具体步骤

首先你需要在你的win10上安装docker,具体怎么安装可参考此文

拉取镜像

我使用的镜像版本是1.23,当然你也可以使用latest的。可以在powershell中使用如下命令拉取镜像。

docker pull nginx:1.23

使用之前在网上搜了如何使用,都说需要提前在官网上现在一个配置文件,以便用数据卷映射到docker内部进行配置。但是实际现在的nginx.conf文件都不是非常合适,所以该怎么办呢?

获取默认配置文件

实际上我们可以用以下命令先运行一个容器。

docker run --name nginx -p 9001:80 -d nginx:1.23

注意:9001的端口是win10上的, 可以随便定义。

也可以通过可视化界面查看容器启动的具体日志详细。
在这里插入图片描述

然后运行以下命令进入容器内部进行查看。nginx默认安装在/etc/文件夹下。

docker exec -it nginx bash

在这里插入图片描述

通过上图我们可以看到nginx容器内部是有默认的配置文件的,不过它分为两个部分。一个是nginx根目录下的nginx.conf文件,还有一个在conf.d文件夹下,名字是default.conf。我们可以在容器内通过cat命令进行查看,但我更建议将这两个文件拷贝到宿主机,即win10的硬盘中,更方便查看。可以通过以下命令完成配置文件的拷贝动作。

docker cp nginx:/etc/nginx/nginx.conf E:/nginx/nginx.conf
docker cp nginx:/etc/nginx/conf.d E:/nginx/conf.d
docker cp nginx:/usr/share/nginx/html E:/nginx/

注意:此时我们还是在nginx容器内部,可通过exit命令或者ctrl+z进行退出。

从上面的命令中我们可以看到,我们将配置文件拷贝到我们的E盘的nginx文件夹下, 这个是自定义的,可以根据自己的需要来定义。同时上面的命令将nginx定义的默认网页(/html文件夹下是index.html50x.html)也拷贝出来了,这个看个人需求,如果需要定制默认页面和错误页面的可以拷贝出来。(个人没有使用这个命令,这里放着供大家参考使用)

默认的nginx.confdefault.conf文件的内容如下

# nginx.conf文件的内容
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
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;
}
# default.conf文件的内容
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

运行正式容器实例

命令如下

docker run -d --privileged=true --restart=always -p 8000:80 -v E:/nginx/nginx.conf:/etc/nginx/nginx.conf -v E:/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v E:/nginx/log:/var/log/nginx --name mynginx nginx:1.23

简单解释一下。

  • 这里挂在了三个数据卷,将上面获取的配置挂在,同时将日志挂在出来,方便后期出现问题可查找原因
  • 端口8000是自定义的,容器中对应的是80端口
  • 通过--restart=always设置了容器重启机制

配置说明

当容器正常运行来后,我们就要考虑添加自己需要的配置了。这里我们只需要修改E:/nginx/conf.d/default.conf文件即可。

例如我们在win10宿主机的IIS中不是了一个网站(可以通VS自动生成要给mvc的项目就行测试)。那么我们可以在default.conf中添加如内容。

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_pass http://192.168.2.15:7032;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

#以下省略

此处重点是在location节点下添加proxy_pass属性。而配置的内容是IIS中设置好的。

在这里插入图片描述

配置好需要重启以下容器,可以通过命令或者可视化界面操作,这里就不细说了。

最后让我们看看最终的配置效果。

在这里插入图片描述

发现的问题

在使用一段时间后,有一次重启容器后,容器总是重启失败。查看日志发现其提示没有发现default.conf配置文件。这就很奇怪了,后来通过几次测试发现,是因为改动了此配置文件后保存导致的。后面通过多次测试和分析,发现是此配置文件保存的格式不对,如果保存的格式是UTF8就是会出现这个问题。而通过记事本,选择ANSI格式保存就可以正常运行容器了。

**在这里插入图片描述**

总结

通过上面的介绍,我们就可以通过容器来使用nginx了。而如果要搭配其他软件来实现开发环境的搭建,还需要在创建其他相应的容器,或者通过脚本自动化生成,这个以后有时间再说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值