Docker安装配置 nginx

目前情况下,随着云服务和微服务的蓬勃发展,越来越多的公司和项目向微服务和虚拟化的路上靠拢,既然要虚拟化和容器化,那么docker肯定要掌握的,docker 有什么好处就不用多说了,总之一点,有了docker,我们安装各种环境爽多了。

最近,整理了一下自己使用的测试环境,因此我就下决心使用 docker 来部署一下 nginx ,以后的项目都采用 docker 来进行部署,使用 nginx 来进行反向代理。

那么第一步肯定就是使用 docker 来安装 nginx ,先把镜像拉下来 :docker pull nginx

把镜像来下来之后,我们知道,传统的 容器启动 docker -p port:port -d --name aliasName iamgeName

但是是存在很大的缺点的:

  • -p 之后就确定了端口映射,但是做反向代理的时候,端口是不确定的,我们就不能够在启动容器的时候就把端口确定好
  • -v 之后我们把宿主机的文件夹挂在到对应的容器内,如果仅仅映射到 nginx.conf 来管理所有的项目,那么这样的话, nginx.conf 中的 server 快就会变得特别多而难以管理。因此,我们可以通过 容器内的 /etc/nginx/conf.d 的来挂载出来,以后就能够在 conf.d 中的为每一个项目来创建一个配置文件进行管理

通过上面两个缺点,我们采用共享宿主机的端口,动态映射式来进行运行 nginx 容器:

docker run -d -v /data/nginx:/nginx_conf -v /data/project:/var/www/html --net host --name nginx nginx

我们等于是配置文件那里 宿主机文件夹 /data/nginx ----> 容器 /nginx_conf,然后把容器内的 /etc/nginx/nginx.conf 拷贝到 /nginx_conf 文件夹内,这样的话宿主机内的 /data/ngixn 就会出现 nginx.conf 文件,当以后我们在宿主机内修改配置文件之后,对应的容器内的 /nginx_conf 对应的也会改变,然后再把它拷贝到 /etc/nginx 内覆盖原来的 nginx.conf ,然后重启 nginx 服务就好了。

image-20201210161507880

这样虽然很麻烦,但是没有什么问题,这个时候就会有人问了,为什么不直接让宿主机挂载容器的 /etc/nginx呢?

我之前就是这样做的,但是不知道是什么原因,容器每次都起不来,查看日志发现是 /etc/nginx 文件夹不存在,但是众所周知,这个文件夹是肯定存在的,王还是那个有人说因为 centos 7 的 SELinux 模块造成的,但是我查看拿了之后,发现那个模块在关闭着,最终这个问题采用了上述的解决办法。

nginx 搞好了之后,就该搞 spring boot 项目的景象了,其实很简单,就是把 jar 包上传到服务器,然后再统计目录下新建 Dockerfile 文件:

FROM java:8
VOLUME /tmp
ADD halo-1.4.1.jar halo-1.4.1.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/halo-1.4.1.jar"]

ADD 你上传的 jar 包名称 自定义名称

ENTRTPOINT 后面是需要执行 jar 包的命令。包的名字替换为你在 ADD 命令中自定义的名称

然后退出编辑,进行制作:

docker built -t tagname .

其中的 tagname 是你制作镜像的标签名字。

随后就可以启动镜像了。

最后我们就需要把nginx反向代理到对应的应用上了,修改nginx.conf:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass localhost:8090;
    }

    #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;
    }
}

这个是需要放到 http 块内的,通常情况下,一个 server 块就对应一个应用

我们来逐条分析每一个字段是什么意思:

listen 80;表示监听服务器的 80 端口;

server_name localhost; 监听的服务器地址

location / 路径匹配

也就是说当地址栏中输入 localhost:80 的时候,转换为 localhost:8090

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值