Docker部署web环境之总结篇

3. 问题总结

问题总结1: 数据库容器时区问题以及环境变量的安全控制

  • docker-compose.yml文件中的环境变量,可以配置的变量方法有两种:

方法一:docker-compose.yml文件中用environment的形式配置

environment:  
  TZ: Asia/Shanghai  
第一种适用于数据服务(也适用于其他)  

environment:  
  - TZ=Asia/Shanghai  
第二种适用于普通的服务.  
  yml文件中数据库服务中仅能识别第一种形式"<key>: <value>",基于配置的统一用法方便记忆,所有的环境变量的配置又都识别第一种形式,所以选择第一种  

方法二:docker-compose.yml文件利用变量文件的形式引入多个变量(比较安全,推荐)

# cat docker-compose.yml  
......   
  volumes:  
    - ./mysql/mysql5.7/conf:/etc/mysql/conf.d  
    - ./mysql/mysql5.7/data:/var/lib/mysql  
  command: --character-set-server=utf8  
  env_file:  
    - ./mysql/mysql5.7/conf/env  
  ......  

# cat ./mysql/mysql5.7/conf/env  
TZ=Asia/Shanghai  
MYSQL_ROOT_PASSWORD=admin  
MYSQL_USER=user  
MYSQL_PASSWORD=user123  

这里可以env文件中的配置root密码相对安全,缩小密码文件的权限即可  

优缺点:

方法一:会把密码信息暴露出来,若非要使用的话,建议只配置初始化密码,容器起来后立即修改root密码    
方法二:会把比较敏感信息隐藏起来,放在文件中,比较安全(强烈推荐)



问题总结2: 反向代理中关于后端服务器访问日志记录客户端IP的问题

附: 客户端宿主机:          192.168.1.209
    docker宿主机:          192.168.1.210
    自定义容器网桥网关:     192.168.30.1 
    apache容器前端代理容器: 192.168.30.11
    nginx容器前端代理容器:  192.168.30.12
    tomcat后端服务器容器:  192.168.30.13

lamt反向代理中: 1.209(客户端) --->  1.210:82(前端代理apache容器映射端口),那么tomcat容器访问日志会随着apache调用方式不同而不同,
                通过http协议调用tomcat,访问日志则记录客户端IP;通过ajp协议调用tomcat,访问日志则记录前端代理IP。  

lnmp反向代理中: 1.209(客户端) --->  1.210:83(前端代理nginx容器映射端口),那么tomcat容器访问日志默认会记录前端代理IP,
                若想要实现tomcat记录客户端真实IP,需要修改nginx+tomcat的配置文件,如下:

                nginx配置需要添加:  
                location / {
                    proxy_pass       http://lb_tomcat;
                    proxy_set_header Host       $host;
                    proxy_set_header X-Real-IP  $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }

                tomcat配置需要添加:  
                修改server.xml 找到pattern行                     
                原内容: pattern="%h %l %u %t &quot;%r&quot; %s %b"  
                修改后  
                新内容: pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i" resolveHosts="false"  

重启容器即可,此配置也适用于宿主机内的反向代理配置

问题总结3: 创建网络的网桥命名太长

网桥的命名规则为: <docker-compose.yml 文件所在目录的目录名>_<网络服务的网络名>  
如果想改成自定义的网络名,参考如下

自定义的网络名称中"_"下划线是去不掉的,要合理利用它,在docker-compose.yml文件所在目录下,编辑 .env 文件
添加内容:

# cat  .env
COMPOSE_PROJECT_NAME="compose" 

问题总结4: 编排lnmp环境时,root目录挂载问题

nginx服务名下面的root挂载目录要和 php服务名下的root挂载目录一致,否则,php找不到*.php文件,处理不了php文件的请求。

问题总结5: 控制宿主机内不同网段容器通信

默认创建的不同网段的桥接网络,容器之间是可以互相通信的,为了避免不必要的麻烦,避免出现容器被作为肉鸡情况,需要禁掉,添加配置如下:

# cat /etc/docker/daemon.json
  {"icc": false}

 

 



 

 

 

posted @ 2019-07-24 15:24  淡淡定定  阅读(1628)  评论(0编辑  收藏  举报