Docker-Compose 容器编排技术
一、容器编排技术
现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的Docker compose实现容器编排技术。
二、Docker-Compose
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
三、Docker-Compose的两个重要的概念
服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
四、离线安装Docker-Compose
- 下载离线包,并上传至服务器
https://download.csdn.net/download/qq_43692950/16155151
- 移动到usr/local/bin下
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
- 1
- 添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose
- 1
- 验证 docker-compose
docker-compose -v
- 1
五、Docker-Compose常用命令
- 查看帮助
docker-compose -h
- 1
- 创建并运行所有容器
docker-compose up
- 1
- 创建并后台运行所有容器
docker-compose up -d
- 1
- 指定模板
docker-compose -f docker-compose.yml up -d
- 1
- 停止并删除容器、网络、卷、镜像
docker-compose down
- 1
- 查看容器输出日志
docker-compose logs
- 1
- 拉取依赖镜像
docker-compose pull
- 1
- 检查配置
dokcer-compose config
- 1
- 检查配置,有问题才有输出
dokcer-compose config -q
- 1
- 重启服务
docker-compose restart
- 1
- 启动服务
docker-compose start
- 1
- 停止服务
docker-compose stop
- 1
六、docker-compose.yml
- Compose常用配置
Image 镜像名称;
Build 根据docker file 打包 成镜像;
Context 指定docker file文件位置;
Commond 使用command可以覆盖容器启动后默认执行的命令;
Container_name 容器名称;
depends_on 指定依赖那个服务;
Ports 映射的端口号;
extra_hosts 会在/etc/hosts文件中添加一些记录;
Volumes 持久化目录;
volumes_from 从另外一个容器挂在数据卷;
Dns 设置dns
- 简单定义通过compose 启动一个tomcat
version: '3.0'
services:
tomcat: ##服务名称
image: tomcat:8 #镜像文件名称
ports:
- 8080:8080
- 1
- 2
- 3
- 4
- 5
- 6
- 指定网桥,数据卷
version: '3.0'
services:
tomcat80: ##服务名称
#container_name: tomcat8080 指定容器名称
image: tomcat:8 #镜像文件名称 run images
ports: ###端口号的映射 -p
- 8080:8080
volumes: ## 数据源 宿主机与容器数据共享 -v
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks: ###定义网络的桥
- mayikt
tomcat81: ##服务名称
#container_name: tomcat8080 指定容器名称
image: tomcat:8 #镜像文件名称
ports: ###端口号的映射
- 8081:8080
volumes: ## 数据源 宿主机与容器数据共享
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks:
- mayikt
networks: ## 定义服务的桥
mayikt:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
七、使用Compose部署springboot项目
- SpringBoot application,yml
spring:
profiles:
active: prd
datasource:
#ip指定 mysql 容器服务的名称
url: jdbc:mysql://mysql:3306/testdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
server:
###端口号
port: 8080
servlet:
##设置springboot项目访问路径
context-path: /abc
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- DockerFile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER abc
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为mayikt.jar
ADD test1.0-SNAPSHOT.jar test.jar
# 运行jar包
RUN bash -c 'touch /test.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
#暴露8080端口
EXPOSE 8080
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- docker-compose.yml
version: "3.0"
services:
mysql: # mysql服务
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
ports:
- "3306:3306" #容器端口映射到宿主机的端口
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'testdb'
MYSQL_USER: 'test'
MYSQL_PASSWORD: 'test'
networks:
- mweb
my-web: #自己单独的springboot项目
hostname: abc
build: ./ #需要构建的Dockerfile文件
ports:
- "38000:8080" #容器端口映射到宿主机的端口
depends_on: #web服务依赖mysql服务,要等mysql服务先启动
- mysql
networks:
- mweb
networks: ## 定义服务的桥
mweb:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 启动服务
docker-compose up -d
- 1
八、使用docker_compose 部署mysql 和 redis
version: '2.0'
services:
mysql:
restart: always
image: mysql:8.0.20
container_name: mysql
volumes:
- /home/mysql/data:/var/lib/mysql
command:
--lower_case_table_names=1
--character-set-server=utf8
--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root123
- TZ=Asia/Shanghai
redis:
restart: always
image: redis
container_name: redis
volumes:
- /home/redis/data:/data
ports:
- "6379:6379"
command: ["redis-server" ,"--appendonly" ,"yes","--requirepass root123"]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
启动服务
docker-compose up -d
- 1
九、DockerFile 解析(补充)
一个镜像文件到底是如何创建?
- 需要手动编写一个dockerfile文件
- 将该dockerfile docker build 自定义成一个镜像文件
- docker run 运行容器
1. Centos镜像文件
2. DockerFile编写规范
- #描述注释;
- 指令必须要大写,后面至少需要带至少一个参数;
- 指令是按照从上到下,顺序执行;
3. DockerFile指令
- FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
- MAINTAINER :维护者
- RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
- ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
- COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
- CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
- ENV: 设置环境变量
- EXPOSE: 指定于外界交互的端口
- VOLUME 用于指定持久化目录
- WORKDIR 设置进入容器时的路径 默认访问的目录
文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_43692950/article/details/115262989
- 点赞
- 收藏
- 关注作者
评论(0)