题外话
先说说题外话,Docker这个东西,的确是带来了很大的便利,让开发-测试-生产 三个阶段的环境统一,并且方便了部署的处理,而且还将单机器的性能发挥到最大!~~~但是也存在缺陷,缺陷在与问题的查找(这个和你的docker架构有关),发发闹骚= =||
问题
docker到底是什么?
它到底能做什么?
我们如何来用它?
与它有关联的有哪些东西?
解决问题
问题一:docker到底是什么?
答:不扯哪些什么高大尚的东西,很多docker入门都把docker是什么,都是从什么LXC开始说起,我这里就说docker就是一个软件,一个让我们能封装我们程序到固定系统的软件,它让我们更好的携带它做环境的部署
问题二:它到底能做什么?
答:docker能更大的便于运维上面的管理,并且将开发环境、测试环境、生产环境三大环境统一,不会出现环境不同导致各式各样的问题。
问题三:我们如何来用它?
答:我们可以用它来搭建我们的集群,搭建我们自己的多服务负载,并且还能更好的使用我们的服务器端口映射
问题四:与它有关联的有哪些东西?
答:有kubernetes、docker-machine、docker-swarm。首先kubernetes在安装的时候就会安装docker,所以这个是一定相关的;docker-compose与docker-machine、docker-swarm并称为docker三剑客,这三个之间的关系是不容置疑的了。
入门
首先入门,当然要做docker的安装了,当然不同的系统有不同的安装方式,具体的可以参照官方文档来安装,这里我就不累赘说明了
官方文档地址 https://docs.docker.com/engine/installation/#server
下面就直接说示例了,实际操作来的快些
实操
环境:vmware14 + centos7.4 +docker18.01.0-ce
docker插件部署:使用docker-compose,安装方式,也是看官方 https://docs.docker.com/compose/install/ 自行观看安装
示例:做tomcat+nginx+redis的session共享
首先我们在centos7.4里面新建一个目录docker,我们放到data根目录下,然后在docker里面新建nginx和tomcat两个文件夹,并在tomcat文件里面建两个文件夹lib和conf两个文件夹,用于我们的jar和配置文件的copy到docker容器中,新建好的目录结构应该是如下图:
图1那么我们来编写我们的Dockerfile,首先我们写我们的nginx的Dockerfile,进入nginx文件夹新建文件Dockerfile
touch /data/docker/nginx/Dockerfile
vim /data/docker/nginx/Dockerfile
Dockerfile文件内容如下
#拉取nginx的镜像
FROM nginx:alpine
#写入作者信息
MAINTAINER A.Dong noroadzh@sina.cn
#将本地文件中已经写好的nginx拷贝到容器中
COPY nginx.conf /etc/nginx/
#指定容器的开放端口
EXPOSE 80
#执行nginx
CMD ["nginx", "-g", "daemon off;"]
nginx.conf我就不提供了
写完了nginx,我们进入tomcat文件夹来完成我们tomcat的编写和准备,我们使用的tomcat为7.0.82最新的tomcat7的版本
tomcat要做redis的session共享,需要准备三个jar包,并且还学要修改配置文件
三个jar包为:
commons-pool2-2.2.jar
jedis-2.5.2.jar
tomcat-redis-session-manage-tomcat7.jar
下载好这三个包,放入我们的/data/docker/tomcat/lib 文件夹中
jar包有了,我们还需要修改我们的配置文件 context.xml 、web.xml、server.xml
context.xml是为了指定我们session用的是redis,并且redis的连接地址是什么,使用的命名空间是什么
web.xml是为了设定我们的session过期时间
server.xml是为了解决中文乱码问题
context.xml的内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<Context>
< WatchedResource >WEB-INF/web.xml</WatchedResource>
<Value className="com.orangefunction.tomcat.redissession.RedisSessionHandlerValve" />
<Manager className=" com.orangefunction.tomcat.redissession.RedisSessionManager" host="redis" port="6379" database="0" maxInactiveInterval="1800" />
</Context>
web.xml需要修改的点如下
...
<session-config>
<session-timeout>1800</session-timeout>
</session-config>
...
server.xml需要修改的为
图2然后我们在tomcat文件夹下面直接新建一个Dockerfile文件,文件内容如下:
FROM tomcat:7.0.82
MAINTAINER A.Dong noroadzh@sina.cn
#copy custorm file into lib and web and conf
COPY ./lib/ /usr/local/tomcat/lib/
COPY ./conf/ /usr/local/tomcat/conf/
COPY ./web/ /usr/local/tomcat/webapps/
#open port
EXPOSE 8080
CMD ["~/tomcat7/bin/catalina.sh", "run"]
然后我们回到我们的docker主目录,写我们的docker-compose.yml文件,内容如下
version: '2'
services:
tomcat01:
container_name: "tomcat01"
build: ./tomcat
expose:
- "8080"
volumes:
- /data/docker/tomcatWeb/log01:/usr/local/tomcat/logs/
links:
- redis:redis
restart: always
tomcat02:
container_name: "tomcat02"
build: ./tomcat
expose:
- "8080"
volumes:
- /data/docker/tomcatWeb/log02:/usr/local/tomcat/logs/
links:
- redis:redis
restart: always
tomcat03:
container_name: "tomcat03"
build: ./tomcat
expose:
- "8080"
volumes:
- /data/docker/tomcatWeb/log03:/usr/local/tomcat/logs/
links:
- redis:redis
restart: always
redis:
image: "redis:Alpine"
container_name: "redis"
expose:
- "6379"
ports:
- "6379:6379"
restart: always
command: redis-server --appendonly yes
nginx:
build: ./nginx
container_name: "nginx1.13.8"
links:
- tomcat01:t01
- tomcat02:t02
- tomcat03:t03
expose:
- "80"
ports:
- "8080:80"
volumes:
- /data/docker/nginx/logs:/var/log/nginx/
restart: always
至此,我们的准备工作完成了,然后我们在/data/docker 文件夹目录下面,执行我们的命令
docker-compose up -d
后我们就是等待了
是否安装好了,我们用下面命令看看
docker-compose ps
看看是否在执行
图3看见的确是在执行状态,至此我们就搭建完了我做了测试是可以正常访问的
遗留问题
session感觉还是没有共享到,不知道是docker的问题,还是怎么的,因为这个环境我不用docker容器,直接在系统里面跑是没有发生当不同tomcat访问的时候,session共享的问题,问了下高手,他们说也遇见了相同的问题,但是用了docker-swarm做集群后就没有发现了,我也只有自己去尝试了
未完,待续~~~~~
网友评论