Nginx is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev

概述

相信nginx大家也不陌生,大部分情况下都是在服务器中直接安装Nginx代理,但是如今Docker当道,如何结合Docker的容器化优势和Nginx的反向代理和域名设别?

下面利用一个Demo,搭建一组服务

  • Nginx
  • Ghost

利用Nginx容器内联到Ghost,转发,有以下优点:

  1. 服务器只需要开一个端口给Nginx容器作为入口
  2. 添加其他应用的时候,只需要在Nginx中配置转发规则就可以
  3. 所有应用自带开机重启
  4. 部署内容转变为文件形势,可轻松传递、维护

放出Github地址: docker-nginx-demo

准备

需要准备Docker环境:

分析

demo的文件结构:

- docker-compose.yml  //docker-compose所需的文件,用于描述所有应用的配置信息
- nginx
- Dockerfile
- sites-enabled
- default //nginx容器的配置文件,用于配置如何连接并解析其他的容器

docker-compose.yml:

version: "2"
services:
ghost:
image : ghost
restart: always
container_name: ghost nginx-host:
build: ./nginx
restart: always
ports:
- "80:80"
links:
- ghost
container_name: nginx-host

注意: links节点是内联其他的容器,该处定义了两个容器,一个是Ghost,一个是Nginx,Nginx容器是基于./nginx文件夹进行build的,端口只需要开通80指向nginx容器即可,其他的全部有nginx负责转发

Dockerfile:

FROM tutum/nginx
ADD sites-enabled/ /etc/nginx/sites-enabled

sites-enabled/default:

server {
#listen 443;
listen 80;
server_name blog.kelvv.com
#ssl on;
access_log /var/log/nginx/api-dev.log;
error_log /var/log/nginx/api-dev.error.log;
location / {
proxy_pass http://ghost:2368;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 4 32k;
client_max_body_size 8m;
client_body_buffer_size 128;
}
}

注意:该处的ghost就是刚才docker-compose文件内的links中的关联 , server_name为域名

运行

$ cd docker-nginx-demo
$ docker-compose up -d

这个时候在浏览器中输入 域名就可以自动连接到Ghost ,服务器无污染

总结

最好是使用一个端口,然后所有应用都是通过80端口连接服务器,通过域名区分不同应用。

还有一种方式就是使用多个端口,不同端口不同应用,这就需要在docker-compose.yml中开放多个端口,并且在nginx配置文件中配置多份server用于相应。

docker中使用nginx容器代理其他容器的更多相关文章

  1. docker,构建nginx反向代理tomcat

    Nginx实现负载均衡是通过配置nginx.conf来实现的,nginx.conf的全部内容如下: user nginx; worker_processes 1; error_log /var/log ...

  2. 滚动 docker 中的 nginx 日志

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...

  3. Docker中运行nginx

    Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...

  4. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  5. docker中怎样设置开机启动--随容器的启动而启动服务?

    docker可以说给我们的部署带来极大的方便和可逢凶化吉性!(懂的同学自然懂) 在初步了解之后,我们就能简单使用docker了. 刚开始玩docker时,可以基于系统级别的镜像做定制,比如基于  ce ...

  6. Docker中的三个基本概念容器(container)、镜像(image)和仓库(registry)之间有什么关系?

    Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之 ...

  7. 修改docker中mysql登入密码(包括容器内和本地远程登入的密码)

    查看docker中正在运行的容器 docker ps 进入MySQL 容器中 sudo docker exec -it cd800a1cd503 /bin/bash 在容器中: /etc/mysql/ ...

  8. 为 docker 中的 nginx 配置 https

    没有 https 加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加 https 已经变得刻不容缓.对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题.但对于个人用户来说,如果能有免 ...

  9. 一次docker中的nginx进程响应慢问题定位记录

    有个ft测试的环境,其中nginx使用docker发布的.测试用例是curl的时候,没有获得nginx的响应. docker ps CONTAINER ID IMAGE COMMAND CREATED ...

  10. Docker中使用nginx镜像

    1.到网易蜂巢查看nginx https://c.163yun.com/hub#/m/home/ 复制nginx镜像地址为:docker pull hub.c.163.com/library/ngin ...

随机推荐

  1. 关于 unsigned long long 于 long long

    long long 最大只有19位 : unsigned long long  最大有20位 ,原因牺牲了符合位来换取更大的记录

  2. [转] Mock以及Mockito的使用

    http://www.open-open.com/lib/view/open1462177583813.html [From] http://www.open-open.com/lib/view/op ...

  3. Sublime Text 3插件收集

    0.Package Control 这个是必须装的,就不多解释了 1.ConvertToUTF8 支持 GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS 等编码的插件. 2.B ...

  4. Java多线程(三)锁对象和线程池

    1:锁(Lock) 1.1       java提供了一个锁的接口,这个锁同样可以达到同步代码块的功能,API文档上说使用锁比使用synchronized更加灵活. 1.2       如何使用这个“ ...

  5. 分段锁——ConcurrentHashMap

    1.线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap. 2.效率低下的HashTable容 ...

  6. PTA (Advanced Level) 1066 Root of AVL Tree

    Root of AVL Tree An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of ...

  7. JQuery Div scrollTop ScrollHeight

    jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop.scrollLeft.scrollHeight.其中 scrollHeight 属性,互联网上几乎搜 ...

  8. Shell 编程-常见的文件处理命令

    touch 命令 touch命令用于创建空文件,例如有时应用程序希望在它们写入数据之前,某个日志文件就已经存在.这时可用touch命令创建一个空文件:touch test1:touch命令还可以用来改 ...

  9. angular2自学笔记(三)---ng2选项卡

    学习了这些概念就能简单的描述一个选项功能的选项卡按钮: 数据:1.数组:实例化一个数组的类,如果想要使用这个类中的数据,需要在组件中 使用一个公共属性来暴漏这个类如 heroes=HEROES;con ...

  10. [转]OData and Authentication – Part 5 – Custom HttpModules

    本文转自:https://blogs.msdn.microsoft.com/odatateam/2010/07/19/odata-and-authentication-part-5-custom-ht ...