Docker服务编排
1 服务编排概念
-
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
- 要从Docker build image 或者去 Docker Hub拉取image。
- 要创建多个container。
- 要管理这些container(启动、停止、删除等)。
-
服务编排:按照一定的业务规则批量管理容器。
2 Docker Compose概念
- Docker Compose是一个编排多容器分布式部署的工具,提供命令管理容器化应用的完整开发周期,包括服务创建构建、启动和停止。
- 使用步骤如下:
- ①利用Dockerfile定义运行环境镜像。
- ②使用docker-compose.yml定义组成应用的各个服务。
- ③运行docker-compose up启动应用。
3 Docker Compose的安装和卸载
3.1 Docker Compose的安装
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 国内的地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod 777 /usr/local/bin/docker-compose
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 查看版本信息
docker-compose -version
3.2 Docker Compose的卸载
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
4 Docker Compose的应用示例
- 新建一个SpringBoot项目,随便建。
- 编写Dockerfile文件。
# 指定基础镜像,在其上进行定制
FROM java:8
#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /tmp 中写入的信息都不会记录进容器存储层
VOLUME /tmp
# 指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
WORKDIR /
#复制上下文目录下的/target/demo-1.0.jar到容器里,并将文件名称修改为demo.jar
ADD /target/demo-1.0.jar demo.jar
#bash方式执行,使robot.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /demo.jar"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"tail
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
- 使用docker build构建镜像。
docker build -t demo
- 新建/var/nginx/nginx.conf.d目录,并新建nginx.conf配置文件:
server {
listen 80;
server_name 192.168.64.100;
location / {
proxy_pass http://app:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 编写docker-compose.yml。
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
links:
- app
volumes:
- "/var/nginx/nginx.conf.d:/etc/nginx/conf.d"
app:
image: demo
- 使用如下命令启动:
docker-compose up -d