开始前的准备

docker环境安装参考

nginx 安装 运行

mkdir -p /data/nginx/conf /data/nginx/logs  #创建日志和配置文件存放路径

创建 nginx.conf

vim /data/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

events {
    worker_connections  1024;
  #  use epoll;
}


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

    sendfile        on;
    keepalive_timeout  65;
	#error_page   500 502 503 504  /50x.html;
 
	###自动跳转https###
	#server {
	#  listen	  80;
	#  server_name    yun.com;
	#  return	  301 https://$server_name$request_uri;
	#}
	###自动跳转https###
	
	server {
	  listen	  3088;
	  server_name   192.168.0.2; 
	  location / {
            proxy_pass  http://192.168.0.1:3089/obpm;#这个ip一定不要用127.0.0.1,毕竟你的程序 代码不跑在这个容器里
			proxy_buffering  on;
			proxy_buffer_size  4k;
			proxy_buffers 8  1M;
			proxy_busy_buffers_size 2M;
			proxy_max_temp_file_size 0;
			client_max_body_size 100m;
          }
	}

}

ps:docker 使用nginx配置一定要注意不能写localhost或者127.0.0.1 这些都是实际指向容器内,要用ip访问本机,或者局域网其他机器才对。

docker pull nginx
docker run --name nginx3 -d -p 3088:3088  -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v /data/nginx/logs:/var/log/nginx -d nginx
#docker启动出错可以通过
docker logs nginx3 #查看报错
#nginx的错误可以看log目录下的日志
#可以查看docker容器 在本机的ip
docker inspect --format '{{ .NetworkSettings.IPAddress }}' nginx3

安装redis

#菜鸟教程:
docker pull redis 
docker run -p 6379:6379 -v /data/redis:/data  -d redis redis-server --appendonly yes

#命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

在容器ip变化的环境下我们需要用服务名定位应用,利用下面的工具

consul简介:

consul是提供服务发现、简单配置管理、分区部署的服务注册发现解决方案。 主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署 consul的实例叫agent agent有两种运行模式:server和client 每个数据中心至少要有一个server,一般推荐3-5个server(避免单点故障) client模式agent是一个轻量级进程,执行健康检查,转发查询请求到server。 服务service是注册到consul的外部应用,比如spring web server

#1. 在docker上安装consul(默认安装最新版本)
docker pull consul

#2. 启动第一个consul服务:consul1
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0
#8500 http 端口,用于 http 接口和 web ui
#8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信
#8301 serf lan 端口,同一数据中心 consul client 通过该端口通信
#8302 serf wan 端口,不同数据中心 consul server 通过该端口通信
#8600 dns 端口,用于服务发现
#-bbostrap-expect 2: 集群至少两台服务器,才能选举集群leader
#-ui:运行 web 控制台
#-bind: 监听网口,0.0.0.0 表示所有网口,如果不指定默认未127.0.0.1,则无法和容器通信
#-client : 限制某些网口可以访问

#3. 获取 consul server1 的 ip 地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1
#echo 输出是:172.17.0.2

#4. 启动第二个consul服务:consul2, 并加入consul1(使用join命令)
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2

#5. 启动第三个consul服务:consul3,并加入consul1
docker run --name consul3 -d -p 8502:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
  1. 宿主机浏览器访问:http://localhost:8500 或者 http://localhost:8501 或者 http://localhost:8502
  2. 再启动两个 然后stop就能看到监控的区别了。

文章参考: docker 配置nginx的一些坑 docker上搭建consul集群全流程 在Docker下部署Nginx