docker系列一compose容器编排 有更新!

 
评论 • 174 浏览

docker-compose容器编排

背景

通过Dockerfile模板文件,可以很方便的定义一个单独的容器。但是在现代服务架构中,服务都是相互依赖的。比如一个web应用服务可能会依赖着DB数据库服务,缓存服务,Nginx负载均衡服务。
这种情况下该如何解决容器之间的依赖关系呢?
Compose就是用来解决这样的需求的。
它允许用户通过一个单独的docker-compose.yml模板文件来定义一组关联的容器为一个项目。

概念

Compose中有两个核心概念:

  • 服务(service):可以理解为一个应用的容器
  • 项目(project):可以理解为多个应用组成完整的一个业务系统。

Compose默认管理的对象是项目,通过子命令对项目中的容器进行便捷的生命周期管理。
Compose项目是python编写。

安装和卸载

在linux上可以直接下载包:

curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

即可。
如果下载很慢的话,也可以直接上compose的github下载好包,然后放在/usr/local/bin目录下即可。
记得一定要赋予可执行权限!

小结:一个项目可以由多个服务(容器)关联而成,Compose面向项目进行管理。

使用compose对dubbo-admin和zookeeper编排

这里使用dubbo和zookeper进行容器编排的示例。

1.获取dubbo-admin的源码

从github上获取dubbo的master分支的源码

git clone -b master https://github.com/apache/incubator-dubbo-ops.git

修改admin中的application的配置,把zookeeper地址改为:zookeeper://zookeeper:2181

使用maven进行打包:

mvn clean package -Dmaven.test.skip=true

打包后会在dubbo-admin的target目录下生成编译后的dubbo-admin-0.0.1-SNAPSHOT.jar。

[root@iz2ze69bx00tfe97qzk0lvz target]# ls
classes  dubbo-admin-0.0.1-SNAPSHOT.jar  dubbo-admin-0.0.1-SNAPSHOT.jar.original  generated-sources  maven-archiver  maven-status

PS:
如果没有生成,或者报错,请在incubator-dubbo-ops目录下的pom文件中增加:

	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-jar-plugin</artifactId>
		<configuration>
			<classesDirectory>target/classes/</classesDirectory>
			<archive>
				<manifest>
					<mainClass>com.alibaba.dubbo.container.Main</mainClass>
					<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
					<useUniqueVersions>false</useUniqueVersions>
					<addClasspath>true</addClasspath>
					<classpathPrefix>lib/</classpathPrefix>
				</manifest>
				<manifestEntries>
					<Class-Path>.</Class-Path>
				</manifestEntries>
			</archive>
		</configuration>
	</plugin>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-dependency-plugin</artifactId>
		<executions>
			<execution>
				<id>copy-dependencies</id>
				<phase>package</phase>
				<goals>
					<goal>copy-dependencies</goal>
				</goals>
				<configuration>
					<type>jar</type>
					<includeTypes>jar</includeTypes>
					<useUniqueVersions>false</useUniqueVersions>
					<outputDirectory>
						${project.build.directory}/lib
					</outputDirectory>
				</configuration>
			</execution>
		</executions>
	</plugin>

能够正常生成,请忽略上述步骤。

2.构建dubbo-admin镜像

在dubbo-admin目录下新建Dockerfile文件。内容如下:

#FROM,表示使用jdk8为基础镜像,如果镜像不是本地的会从DockerHub上下载
FROM openjdk:8-jdk-alpine

#作者
MAINTAINER wangqianjun

VOLUME /tmp

#ADD,拷贝文件并且重新命名
add ./target/dubbo-admin-0.0.1-SNAPSHOT.jar app.jar

#ENTRYPOINT,为了缩短tomcat启动时间,添加java.security.egd的系统属性指向/dev/./urandom作为ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

然后构建镜像:

docker build -t dubbo-admin:1.0 .

编译后会生成dubbo-admin的镜像。

3.编写docker-compose.yml

在项目根目录下编写docker-compose.yml文件。
内容如下:

version: '3.4' #版本
services: #服务1
 zk_server: #zk服务
  image: zookeeper:3.4 #zk的镜像,没有的话会去官方dockerHub上拉取
  ports: #端口
   - 2181:2181 #2181端口映射
 dubbo-admin: #服务2
  image: dubbo-admin:1.0 #这里镜像是我们生成的镜像
  links: #容器间引用
   - zk_server:zookeeper #引用zk_server
  depends_on: #依赖
   - zk_server #依赖 zk_server 
  ports:
   - 7001:7001 #端口
4.启动

根目录下运行

 docker-compose up

在浏览器中输入ip:7001进行访问即可。用户名密码:root/root guest/guest

评论
validate