Docker在英雄联盟游戏中的实践探索(四)

  • 时间:
  • 浏览:2
  • 来源:uu快3倍率_uu快3网游_单双计划

本小节将涉及:

  • 使用Compose来管理多容器应用
什么是Compose
Compose是从那我工具Fig发展而来的。Docker将它定义为“运行繁复应用的工具”。让人从https://docs.docker.com/compose/查看相关文档。当运行应用时,Compose能可不都还可以 帮当当我们 构建镜像,决定停止和启动什么容器。

一种生活次责将涉及以下几点:

  • 创建简单的Nginx容器
  • 学习要怎样从本地目录中去掉 文件到镜像中,比如Nginx配置文件
  • 使用Docker容器链接(link),连接Nginx和Jenkins
  • 配置Nginx来代理Jenkins
更换OS
在Riot,当当我们 不须常用Debian;然而,Cloudbees的Jenkins镜像使用Debian作为默认OS,继承自Java 8镜像。但会 ,Docker的其中另二个强大之指在于,当当我们 能可不都还可以 使用任意的OS,不可能 宿主机不须在乎。这也展示了容器的“混合模式”。这由于,不可能 应用在多个容器之间运行,它们不须需就是 同另二个OS。不可能 某个特定的tcp连接池池需要使用某个特定的Linux发行版的库或模块,一种生活做法就很有价值了。至于应用在Debian/Centos/Ubuntu上的扩展性(spread)算不算个好主意,当当我们 能可不都还可以 自行判断。

注意-d使得Docker-Compose以daemon最好的最好的办法运行容器,就像Docker的参数-d一样。不可能 你想知道什么容器正在运行,Docker-Compose都不 相相似的型态:

docker-compose ps

针对Jenkins的NGINX配置
就像上一章那样,我会先提供一份完整性的配置文件,但会 再修改特定的配置。让人发现大多数内容能可不都还可以 在Jenkins的官方文档找到。

将像一些另二个条目,它也另二个名字(jenkinsnginx)和另二个构建目录。但会 ,当当我们 去掉 了两根links指令,就像命令行中的--link

现在来修改默认配置:1、使Nginx不以daemon最好的最好的办法运行:

daemon off;

这是不可能 命令行中调用nginx,Nginx将以daemon最好的最好的办法运行在后台。这会返回exit 0,Docker会认为tcp连接池池不可能 退出,但会 停止容器。让人发现一种生活疑问无缘无故指在。对于Nginx来说,假若简单地修改下配置就能可不都还可以 出理 一种生活疑问。2、将Nginx的worker数目提升为2:

worker_processes 2;

创建Nginx配置文件
以下的nginx.conf是另二个默认配置,但会 再修改特定的配置。

打开epolling能可不都还可以 使用高效的连接模型。为了加速,当当我们 关闭了accept_mutex,不可能 当当我们 都越来越乎较低的连接请求数造成的资源浪费。4、设置代理头:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

除了关闭daemon模式之外,这是第二个需要的Jenkins代理配置。只能那我,Jenkins可不都还可以正确指在理请求,但会 会出现一些警告。5、客户端大小:

client_max_body_size 100m;
client_body_buffer_size 128k;

现在,当当我们 终于能可不都还可以 启动Nginx容器,并连接jenkins-master:

docker run -p 100:100 --name=jenkins-nginx --link jenkins-master:jenkins-master -d myjenkinsnginx

这条命令也会删除你的数据容器。不可能 你不你要 删除数据容器一段话,也很简单。

docker-compose rm jenkinsmaster jenkinsgninx

总结
让人在https://github.com/maxfields20 ... al_05上找到代码和实例。

只另二个配置,是真正关于代理的:

proxy_pass   http://jenkins-master:100100;

为了加速,当当我们 打开了gzip压缩。保存文件为conf/nginx.conf。下一步就是 为Jenkins去掉 特定的配置文件。

6、启动Nginx:

CMD ["nginx"]

与往常一样,代码和示例都能可不都还可以 在GitHub上找到,地址是https://github.com/maxfields20 ... al_04。让人注意到makefile更新了,去掉 了Nginx容器和Jenkins容器的启动顺序。

Docker Compose和Jenkins

当当我们 现在运行了二个容器,另二个是Nginx代理容器,另二个是Jenkins应用容器和另二个保存Jenkins数据的数据卷容器。当当我们 不可能 发现,不可能 数据卷和容器连接,这二个容器之间有启动顺序和依赖。本文将介绍Compose来出理 什么。

  • 在你的项目根目录中,创建另二个文件docker-compose.yml
你完整性能可不都还可以 使用另外另二个名字,但会 默认具体情况下,Compose将首先查找一种生活名字。
第二步: Jenkins数据容器
编辑docker-compose.yml,去掉 以下内容(不可能 它是yaml,不多需要保持缩进):

以上是创建了另二个容器的条目,叫做“jenkinsdata”。Compose不支持名字中的特殊字符,如“-”。但会 ,当当我们 去掉 了另二个构建目录,名字是Dockerfile所在的目录名,如“jenkins-data”。检查一切算不算正常:

  1. 保存文件。
  2. 执行docker-compose build

注意:迁移到新模型,当当我们 只能丢掉数据容器,这很讨厌。在未来的文章中,我不可能 讨论要怎样备份数据。但会 不可能 你需要备份什么数据一段话,让人先用第三篇docker up来备份数据。

docker-compose build
docker-compose up -d

本文讲的是Docker在英雄联盟游戏中的实践探索(四)【编者一段话】这篇博客是Riot的Docker实践系列博客的第四篇,主要讨论了要怎样去掉 另二个基于Nginx的代理容器,以及要怎样用Compose来管理多容器应用。

第五步:将所有什么组合在一些
完整性的docker-compose.yml:

就像Jenkins数据镜像一样,当当我们 也另二个条目,来命名容器,并定义构建目录。当当我们 也加了两根volumes_from一段话,与命令行中的--volumes-from=的作用相同。但会 ,请注意Compose使用的容器名并都不 真正的名字。这是Compose的另二个方便的型态,能可不都还可以 让人门 引用什么名字,提高可读性。Compose足够聪明,能可不都还可以 把它们组合在并肩,来构建容器。那我优势是Compose知道jenkinsmaster依赖于jenkinsdata,但会 会以正确的顺序来启动它们。让人在Compose文件中以任意顺序列举它们。最后,当当我们 使用ports指令,来出理 端口映射。为了JNLP从连接,当当我们 需要确保Jenkins主容器做10000端口映射。

  1. 完整性控制所有的镜像
  2. 备份Jenkins镜像
  3. 构建从容器
下次再会!原文链接:JENKINS, DOCKER, PROXIES, AND COMPOSE(翻译:夏彬 校对:李颖杰)

这和makefile的行为很相似。使用Compose的选者在于,你需要额外再维护另二个配置文件。本小节单独成章,是不可能 使用Docker-Compose是另二个买车人选者。然而,不可能 你有很强的Windows开发背景,越来越 Compose不可能 也另二个很好的选者。

需求
  • 不可能 你在OSX上使用Docker Toolbox, Compose是默认安装的。
  • 不可能 你还没安装Docker Toolbox,不可能 使用Linux,越来越 请参考https://docs.docker.com/compose/install/安装Compose
  • OSX 不可能 Linux

当当我们 了解到Compose能可不都还可以 繁复多镜像应用的管理,只需要多加另二个配置文件。一种生活文件用来自描述容器之间的关系。Compose是另二个不错的、可操作的工具。不可能 的另二个缺点是,容器名是基于父目录而定的,无缘无故需要你指定另二个项目名称。Compose能可不都还可以 使用PS和RM等工具。当当我们 也了解到Compose还只能在Windows上运行。你算不算使用Compose取决于你算不算需要Windows支持,不可能 你算不算喜欢Compose的命名最好的最好的办法。我买车人很喜欢docker-compose.yml的自描述最好的最好的办法。让人注意到我仍然提供了makefile,不可能 我需要记住所有容器的名字。至此,基础教程开始英文。就是 的文章将涉及更高级的内容。

下一步

当当我们 还另二个高级话题:备份,构建从节点和Docker镜像的完整性控制。我不可能 讨论要怎样完整性制作你买车人的Jenkins镜像,而需要依赖公共仓库。主就是 不可能 依赖管理,不可能 是不可能 你不喜欢基于Debian的容器,更喜欢Ubuntu不可能 CentOS。但会 ,就是 当当我们 会从头创建买车人的Dockerfiles,来构建从容器。接下来的内容是:

这是当当我们 第一次使用COPY命令。ADD命令与COPY命令十分相似。不可能 想透彻地了解两者的区别,我推荐你阅读以下链接:

  • http://stackoverflow.com/quest ... s-add
  • https://docs.docker.com/articl ... -copy
针对当当我们 的场景,COPY是最好的选者。就像以上文章中推荐的,当当我们 就是 拷贝单个的文件,不须需要ADD命令提供的型态(解压tarball,基于URL的获取等)。当当我们 会更新默认的nginx.conf和Jenkins的配置文件。5、当当我们 希望Nginx监听100端口:
EXPOSE 100

相似,不可能 假若运行二个容器应用,重新构建Jenkins容器,重新运行应用-不可能 是升级Jenkins版本。请运行以下命令:

docker stop jenkins-nginx
docker stop jenkins-master
docker rm jenkins-nginx
docker rm jenkins-master
docker build -t myjenkins jenkins-master/.
docker run --name=jenkins-master --volumes-from=jenkins-data -d myjenkins
docker run -p 100:100 --name=jenkins-nginx --link jenkins-master:jenkins-master -d myjenkinsnginx

刷新浏览器http://yourdockermachineiphere不可能 只能访问100100端口了,相反,能可不都还可以 通过Nginx代理访问它了。

构建Nginx镜像,并连接到Jenkins镜像
现在,当当我们 不可能 创建了Nginx和Jenkins的配置文件。请确保你是在顶层目录中。

Docker-Compose会找到jenkins-data目录,构建Dockerfile,就像执行了docker build jenkins-data/一样。让人注意到,镜像的名字是不同的。Compose使用的命名转换是“projectname_composecontainername”。默认具体情况下,项目名称是父目录的名字。一种生活命名标准是相当重要的。这是产品环境中的容器命名最好的最好的办法。请确保父目录的名字是合理的,不可能 使用-p来制定镜像名称。你要 可不都还可以 使用-p来区别产品环境和开发环境。

第三步: Jenkins主镜像
继续编辑docker-compose.xml,去掉 以下内容:

保存文件,但不须构建它。不可能 Dockerfile中另二个COPY命令,当当我们 需要首先创建什么文件。但会 ,不可能 什么文件不指在,构建不可能 失败。

4、去掉 配置文件:

COPY conf/jenkins.conf /etc/nginx/conf.d/jenkins.conf
COPY conf/nginx.conf /etc/nginx/nginx.conf

2、使用yum安装Nginx:

RUN yum -y update; yum clean all
RUN yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm; yum -y makecache
RUN yum -y install nginx-1.8.0

测试一切算不算正常很容易。假若在浏览器中输入IP地址,一切应该正常工作了。不可能 出了疑问,越来越 一定有什么东西阻塞了100端口(这更不可能 指在在OSX上)。请确保防火墙不可能 关闭,不可能 合适能可不都还可以 接受100端口的流量。不可能 不可能 一种生活由于,你只能清除100端口,请关闭并删除jenkins-nginx容器,以-p 1000:100参数重启它。但会 ,访问http://yourdockermachineip:1000,看看一切算不算正常。

Jenkins镜像清理
当当我们 不可能 让Nginx监听在100端口了,就需要Jenkins镜像暴露100100端口了。现在当当我们 需要删除一种生活端口配置。停止并重启Jenkins容器,并肩Nginx容器也需要重启,不可能 两者是连接在并肩的。每次重启时,它们时会连接在并肩。

你不可能 需要什么配置,就是 可能 需要。不可提前大选的是,100MB是另二个很大的body大小。然而,当当我们 的用户上传文件到Jenkins服务器,其中一些是HPI插件,一些是真实文件。6、打开GZIP:

gzip on;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_min_length 0;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;

这是我每次设置Nginx时必定做的事。当然,让人选者保持该配置为1。Nginx调优能可不都还可以 单独写一篇文章。我只能告诉你什么是对的。粗略地说,该配置指定了哪几个个单独的Nginxtcp连接池池。CPU数目是另二个不错的参考值,当然,不多NGINX专家会说具体情况远比一种生活要繁复。3、事件调优(Event tuning):

use epoll;
accept_mutex off;

一种生活配置需要域名jenkins-master指在,一种生活能可不都还可以 通过容器连接来保证(稍时会讲到)。不可能 你还没使用容器连接一段话,越来越 需要将映射Jenkins容器的IP/hostname。然而,你只能把它设置为localhost。这是不可能 每个Docker容器都不 买车人的localhost,将代理指向了Nginx容器一种生活,这里并越来越 运行在100100端口的Jenkins。为了出理 使用容器连接,需要执行Docker Host(应该那个她 的Desktop或laptop)的IP地址。尽管你是知道一种生活信息的,但会 请想象一下,不可能 你的Jenkins容器是运行在Dockerhost集群中的任意一台。你需要写另二个自动脚本,来获取IP地址,但会 编辑配置文件。这是能可不都还可以 做到的,但会 非常麻烦。容器连接能可不都还可以 繁复一种生活过程。

构建完成就是 ,当当我们 能可不都还可以 启动它,并连接到jenkins-master镜像,使代理指在作用。首先,请确保jenkins-data和jenkins-master正在运行。

docker run --name=jenkins-data myjenkinsdata

在当当我们 的第一篇文章中,当当我们 介绍了要怎样把Jenkins放到Docker容器中。第二篇文章中,当当我们 介绍了要怎样使用Docker数据卷容器来创建持久化层。当当我们 创建了另二个容器,来保存Jenkins相关的文件,以持久化插件、任务和一些的Jenkins核心数据。当当我们 讨论了数据卷容器和宿主机挂载卷之间的区别。最后,为了不持久化Jenkins war文件,当当我们 介绍了要怎样从Jenkins主目录中移除war文件。在第二篇文章的末尾,当当我们 不可能 有了另二个功能完备的、能可不都还可以 保存数据的Jenkins镜像。然而,不可能 若干由于,它还不完美。本篇文章将出理 其中另二个疑问:在Jenkins就是 缺少另二个web代理。并肩,当当我们 将运行二个容器来构建Jenkins环境。本文将分为另二个次责:一是要怎样去掉 另二个代理容器,二是要怎样使用Compose(一种生活方便的Docker工具)来管理多容器应用。读完本文,你不可能 完成另二个全栈(full stack)的Jenkins主服务器。

第一次责: 代理容器

在Riot,当当我们 使用Nginx作为代理,不可能 它能可不都还可以 容易地重定向至HTTPS,并使Jenkins监听在100100端口,web服务器监听在100端口。这里不必介绍要怎样配置Nginx的SSL和HTTPS(互联网可不都还可以可不都还可以 找到文档和实例);相反,我将介绍要怎样在容器中运行Nginx代理服务器,并代理Jenkins服务器。

请注意,Compose还只能在Windows上与Windows版本的Docker客户端并肩运行。不可能 你使用的是Windows和Docker Toolbox,具体情况会有所不同。我的建议是暂时使用makefile。Compose的开发团队正在开发Windows兼容版本,但会 1.4版本尚不支持。

第一步:创建Compos配置文件
Compose使用YAML配置文件。当当我们 为每另二个需要Compose管理的镜像去掉 另二个条目。

1、设置OS基础镜像:

FROM centos:centos7
MAINTAINER yourname

不可能 指在了错误,不必紧张,这说明容器不可能 指在了。这是另二个好事,不可能 这由于当当我们 越来越 覆盖那我的数据。

docker stop jenkins-master
docker rm jenkins-master
docker run -p 100100:100100 -p 10000:10000 --name=jenkins-master --volumes-from=jenkins-data -d myjenkins

当当我们 能可不都还可以 将镜像转去掉 Ubuntu、Debian,不可能 任意另二个OS。当当我们 将使用CentOS 7。在本文的第四次责,我不可能 具体地讨论要怎样更换Jenkins镜像中的默认OS,并移除对于结构镜像的依赖性。需要考虑的是,不可能 你更换了OS,越来越 需要更改不多命令和配置,来确保Nginx正常工作。

创建Nginx Dockerfile
在你的项目根目录中,创建另二个新目录jenkins-nginx,来保存那我Dockerfile。现在,你应该另二个目录了(不可能 你读过就是 的文章):

正确配置就是 ,当当我们 能可不都还可以 运行Compose:

docker-compose stop
docker-compose build
docker-compose up -d

第六步:使用Compose维护
Compose足够聪明到了解数据卷,并持久化。

第四步:Nginx镜像
jenkinsnginx:
  build: jenkins-nginx
  ports:
     - "100:100"
  links:
     - jenkinsmaster:jenkins-master
 

注意当当我们 使用的Nginx版本是1.8.0。这是另二个最佳实践:无缘无故锁定版本,出理 镜像的重新构建使用未经测试的版本。3、清除需要的默认Nginx配置:

RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/conf.d/example_ssl.conf

  • 在Jenkins实例中,创建两根测试任务

    docker-compose stop
    
  • 简单地编辑一下Jenkins主Dockerfile,相似更改MAINTAINER。

    docker-compose build
    docker-compose up -d
    
  • 回到Jenkins实例,查看测试任务算不算不可能 指在。
Docker Compose会启动数据容器,并重新创建Nginx容器和主容器。Compose另二个简单的最好的最好的办法来清理所有的东西:
docker-compose rm

请注意--link参数。让人在Docker官方网站上找到相关文档。需要确保域名"jenkins-master"在NGINX容器中指在,指向jenkins-master容器的结构Docker网络IP。请注意Nginx容器需要在jenkins-master容器就是 启动。这由于,不可能 要停止和重启jenkins-master容器,越来越 也需要重启Nginx容器。

当当我们 需要构建所有什么。首先,需要确保越来越 就是 的容器的痕迹。不可能 你不可能 清理了,让人跳过一种生活步:

docker stop jenkins-nginx
docker rm jenkins-nginx
docker stop jenkins-master
docker rm jenkins-master
docker rm jenkins-data