Docker容器下运行Nginx并实现反向代理

目录
  • 一、前言
  • 二、运行Nginx容器
    • 1、获取Nginx镜像
    • 2、运行Nginx容器
  • 三、运行ASP.NET Core应用程序
    • 1、构建ASP.NET Core应用程序镜像
    • 2、运行应用容器
  • 三、设置反向代理

一、前言

我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号。在Linux系统上最常用的反向代理就是Nginx。本篇文章中,我们会通过Docker容器分别运行一个Nginx容器和一个ASP.NET Core应用程序的容器,然后设置反向代理。

二、运行Nginx容器

1、获取Nginx镜像

要运行容器,首先需要有相应的镜像,使用下面的命令拉取NGINX镜像:

docker pull nginx

如图所示

2、运行Nginx容器

获取Nginx镜像之后,我们就可以根据镜像来运行容器

docker run --name=nginx -d -p 4030:80 nginx

上面命令的解释如下:

  • --name:设置容器的名称。
  • -d:表示在后台运行容器。
  • -p:指定端口映射。4030是宿主机的端口,80是Nginx容器内部的端口。
  • nginx:表示根据nginx镜像运行容器。

如图所示

然后在浏览器里面访问:

出现上面的截图,就说明Nginx容器运行成功。

三、运行ASP.NET Core应用程序

1、构建ASP.NET Core应用程序镜像

我们在宿主机上面创建一个demo目录,然后在创建一个ReverseProxy目录,把发布后的项目上传到ReverseProxy目录下面

上传项目后的目录结构

然后我们使用下面的命令创建镜像

docker build -t reverseproxy .

上面命令的解释:

  • -t:表示给镜像起一个名字。

上面命令最后英文状态的"."不能省略,表示在当前目录中查找Dockerfile文件。

执行过程如下图所示

执行完成以后,我们就可以看到刚才创建的镜像了

2、运行应用容器

创建完镜像以后运行容器

docker run --name=reverseproxy -d -p 9020:80 reverseproxy

这里使用宿主机的9020端口映射到容器内的80端口。

如图所示

从上图中我们可以看到容器已经在运行了,我们在浏览器里面访问,验证容器是否运行成功

出现上图所示的结果,表明容器运行成功。

三、设置反向代理

在上面的步骤中,我们分别运行了nginx容器和ASP.NET Core应用程序的容器,并且都可以在浏览器里面访问,下面我们来设置反向代理。

反向代理实现如下的效果:在浏览器里面访问4030端口的时候跳转到9020端口,浏览器显示ASP.NET Core应用程序。

配置反向代理,我们需要修改Nginx的配置文件。在Nginx的配置文件里面设置反向代理的HTTP地址。

要修改Nginx的配置文件,首先需要进入Nginx容器里面,使用下面的命令进入容器里面

docker exec -it nginx /bin/bash

上面命令的解释说明:

  • -it:表示分配一个伪终端。
  • nginx:表示容器的名称,这里也可以使用容器ID。
  • /bin/bash:表示对容器执行bash操作。

执行过程如图所示

上面的截图中,我们使用ls查看,发现里面其实就是一个Linux操作系统。

Nginx默认会安装在etc目录下面

然后进入nginx目录

我们看到了nginx.conf配置文件,需要在这个配置文件里面设置反向代理。我们使用vim命令编辑nginx.conf文件:

我们看最后红框里面的内容,表示使用的是conf.d目录下面的conf文件进行配置。我们进入conf.d目录下面,然后编辑default.conf文件。

要配置反向代理,我们首先需要知道要代理的程序的IP地址,所以在修改配置之前,我们首先需要获取reverseproxy容器的IP地址。

docker inspect 容器名称

如图所示

我们会看到很多信息,这里只需要关注最后的网络配置信息即可

获取到了容器的IP地址以后,我们就可以配置反向代理了。default.conf文件

因为容器是内部访问,所以设置的端口是80,而不是运行容器时设置的9020端口。修改完成之后保存退出。

我们可以使用下面的命令检查一下修改后的配置文件是否有错:

nginx -t

如图所示

如果修改的配置文件没有错误,则退出容器。如果修改的配置文件有错误,要改正错误,然后退出容器。

由于我们修改了配置,所以需要重新运行容器,以便配置生效。

然后我们在浏览器里面访问4030端口

可以看到页面被代理到了9020端口显示的内容。这样就实现了反向代理。

到此这篇关于Docker容器下运行Nginx并实现反向代理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 为Centos安装指定版本的Docker

    安装 Docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE. Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用. 本文介绍 Docker CE 的安装使用. 移除旧的版本: $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docke

  • Docker镜像与容器的导入导出操作实践

    目录 一.前言 二.docker镜像的导入和导出 1.docker镜像的导出 2.docker镜像的导入 三.docker容器的导入和导出 1.docker容器的导出 2.docker容器的导入 四.总结 一.前言 随着容器技术的发展,现在很多的应用程序系统都会选择使用docker容器进行部署,但是有时候使用docker容器进行部署的时候会遇到问题,比如说我们的应用程序里面需要依赖其他第三方的镜像,如果这时候服务器是在内网不能连接外网的情况下,那么就无法部署了.基于这种情况,docker官方支持

  • Docker部署项目完全使用指南(小结)

    目录 环境准备 Docker安装启动 Java环境安装 Docker远程访问配置 Docker重启 IDEA配置Docker 项目配置 配置Dockerfile文件 Docker配置 Maven打包生成Docker镜像 总结 Linux操作命令 Docker操作命令 环境准备 Docker安装启动 检查系统内核是否满足3.10及以上版本: uname -r 升级内核软件包: yum update 使用yum安装Docker: yum install docker 启动Docker: system

  • Docker exec 的实现原理介绍

    我使用了 docker exec 命令进入到了容器当中.在了解了Linux Namespace 的隔离机制后,你应该会很自然地想到一个问题:docker exec 是怎么做到进入容器里的呢?实际上,Linux Namespace 创建的隔离空间虽然看不见摸不着,但一个进程的 Namespace 信息在宿主机上是确确实实存在的,并且是以一个文件的方式存在. 比如,通过如下指令,你可以看到当前正在运行的 Docker 容器的进程号(PID)是 25686: $ docker inspect --fo

  • docker基本命令及使用实例详解

    docker基本命令 docker文件系统 docker镜像为分层设计,相比于全量的虚拟机镜像,少了引导程序bootfs,共用系统内核rootfs. 配置层(容器层) commit镜像 docker commit -a="" -m="" docker_id image_name:tag 类似于给镜像打个快照. 容器数据卷 解决问题 ->数据持久化 本质是目录挂载 使用数据卷 方式一: 直接使用命令挂载 -v docker run -it -v 主机目录:容器内

  • 关于docker启动jenkins环境的问题

    [注意:]jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问题!!! jenkins基本工作原理 1.拉取镜像 需要从官网进入:Jenkins download and deployment 命令: docker pull jenkins/jenkins:lts 2.创建目录 由于防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此创建文件对外挂载 mkdir /data/jenkins

  • docker exec执行多个命令的操作

    docker exec命令能够在运行着的容器中执行命令. docker exec命令的使用格式: docker exec [OPTIONS] container_name COMMAND [ARG...] OPTIONS说明: -d,以后台方式执行命令: -e,设置环境变量 -i,交互模式 -t,设置TTY -u,用户名或UID,例如myuser:myusergroup 通常COMMAND只能是一条语句,为了支持多个命令的执行,需要将多个命令连接起来交给Shell, docker exec命令的

  • Docker容器下运行Nginx并实现反向代理

    目录 一.前言 二.运行Nginx容器 1.获取Nginx镜像 2.运行Nginx容器 三.运行ASP.NET Core应用程序 1.构建ASP.NET Core应用程序镜像 2.运行应用容器 三.设置反向代理 一.前言 我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号.在Linux系统上最常用的反向代理就是Nginx.本篇文章中,我们会通过Docker容器分别运行一个Nginx容器和一个ASP.NET Core应用程序的容器,然后设置反向代理. 二.运行Ngi

  • Docker容器中运行nginx

    nginx简介 Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少,稳定性高等优势.与旧版本(<=2.2)的Apache不同,nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑,削减了上下文调度开销,所以并发服务能力更强.整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活. 在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高.同时Nginx在OpenBSD或FreeBSD

  • Docker部署Nginx并配置反向代理

    准备工作 在docker内部署任何应用,都需要先下载对应的镜像:下载镜像之前,需要先搜索镜像来确认该镜像是否存在: docker search nginx 从列表可以看到,docker已经有了nginx的镜像,名称是“nginx”,接下来下载镜像: docker pull nginx 下载完成后,查看一下本地镜像: 如果在列表中看到nginx,镜像下载就已经成功了. 容器设置 在docker中,真正运行的是容器,镜像在我理解中是一种环境.我们在指定的镜像中运行某个容器,然后编辑和配置这个容器,从

  • Docker容器中运行flume及启动不输出运行日志问题

    flume配置文件如下: # Name the components on this agent app1.sources = r1 app1.sinks = k1 app1.channels = c1 # Describe/configure the source app1.sources.r1.type = avro app1.sources.r1.bind = 0.0.0.0 app1.sources.r1.port = 44444 # Describe the sink #a1.sink

  • docker容器下配置jupyter notebook的操作

    docker容器下配置jupyter notebook,主要是为了编写python代码,更具体点是做深度学习的开发. jupyter web形式最高效的使用方式就是部署在云上,不管是cpu云服务器还是gpu的云服务器,都能快速启动使用. 而docker的出现又方便了很多在部署使用上. - 安装 docker docker分为docker CE和docker EE,一般使用docker CE(社区版本). docker可以在Linux(ubuntu.centos).MacOS.Windows或者树

  • 在 Docker 容器中运行 PHPMyAdmin的详细步骤

    目录 基本用法 预设服务器 使用 MySQL Docker 容器 使用 Docker Compose 简化部署 配置安装 概括 PHPMyAdmin是 MySQL 和 MariaDB 数据库的流行管理界面.它允许您使用 Web 浏览器与您的模式.表和数据进行交互.phpMyAdmin能够为你的MySQL提供直观.方便的Web管理界面,非常好用. 该项目有一个官方的 Docker 镜像,它简化了在容器化环境中的部署.以下是如何使用图像快速运行新的 PHPMyAdmin 实例. 基本用法 最简单的安

  • java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    开发需求: 因系统程序部署时,经常是拆分部署(多台机器) ,手工部署费时费力,且每次都要手工配置系统参数(系统提供配置向导). 如下图所示: 1)进行main容器 -> 2)执行系统配置向导 -> 3)选择服务器模式 -> 4) 选择web控制台....然后进行具体的服务器IP设置. 为了解放双手,用java实现了Linux(centos) 下docker 应用程序的命令交互. 具体代码如下: import java.io.*; /** * @author by dujiajun * @

  • Docker容器搭建运行python的深度学习环境的方法

    任务管理器中查看虚拟化,已启用 若禁用,重启电脑,到Bios中开启 安装Docker Desktop及开启WSL功能. 打开 powershell 创建镜像 docker run --rm -it quay.io/azavea/raster-vision:pytorch-latest /bin/bash docker images 依据镜像id创建容器 docker create -it --name [name] [镜像id] docker start [name] 进入容器 docker e

  • 简单实现nginx+tomcat的反向代理与动静分离

    windows下测试 nginx+tomcat实现java web项目的动静分离 1. 安装nginx,访问静态资源 安装成功后,启动nginx,浏览器输入http://localhost/出现欢迎页面. 在nginx下依次建立目录 static\test1\js\common,并将jquery.XX.js 放进去. PS: static 代表静态文件主目录,test1 代表tomcat下的项目名称,本机使用jquery-1.12.1.min.js 修改配置文件nginx.conf,添加如下配置

  • 关于nginx 实现jira反向代理的问题

    摘要:配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA本身可以使用上下文路径/ jira监听端口8080. 配置nginx反向代理jira 配置Tomcat 修改配置文件server.xml(在jira安装目录下) 更改前: <Context docBase="${catalina.home}/atlassian-jira" path=&

随机推荐