Docker-compose简介
Docker Compose是一个用于定义和运行多个Docker容器的工具。它使用YAML文件来配置应用程序的服务、网络和卷等方面的设置。通过使用Docker Compose,您可以轻松地创建和管理多个容器,实现容器化应用程序的快速部署和扩展。
使用Docker Compose的步骤如下:
安装Docker Compose:首先,您需要在您的机器上安装Docker Compose。您可以从Docker官方网站上下载适合您操作系统的版本,并按照官方文档进行安装。
创建docker-compose.yml文件:在您的项目目录下创建一个名为docker-compose.yml的文件。这个文件将包含您的应用程序的配置信息。
定义服务:在docker-compose.yml文件中,您可以定义您的应用程序的各个服务。每个服务都可以包含一个或多个容器。您可以指定容器的镜像、端口映射、环境变量、卷挂载等等。
构建和启动容器:使用docker-compose命令,您可以构建和启动您的应用程序的容器。在项目目录下运行
docker-compose up
命令即可启动所有的服务。管理容器:使用docker-compose命令,您可以管理您的应用程序的容器。例如,您可以使用
docker-compose ps
命令查看容器的状态,使用docker-compose stop
命令停止容器,使用docker-compose start
命令启动容器等等。清理容器:使用docker-compose命令,您可以清理您的应用程序的容器。例如,使用
docker-compose down
命令可以停止并删除所有的容器。
通过使用Docker Compose,您可以更方便地管理和部署容器化应用程序。详细的配置选项和命令参数,请参考Docker官方文档(https://docs.docker.com/compose/)。
Docker-compose 与 Kubernetes的区别
Docker-compose和Kubernetes是两种不同的容器编排工具,它们有以下区别:
功能和规模:Docker-compose主要用于在单个主机上编排和管理多个Docker容器,它可以通过一个YAML文件定义和管理多个容器之间的关系和依赖。而Kubernetes是一个更为强大和复杂的容器编排平台,可以用于在多个主机上编排和管理大规模的容器集群。
可扩展性:Docker-compose适用于小规模的应用部署,它可以在单个主机上管理容器的生命周期,但无法实现容器的自动伸缩和负载均衡。而Kubernetes具有强大的可扩展性,可以自动进行容器的伸缩和负载均衡,以适应高负载和大规模的应用部署。
管理和监控:Docker-compose提供了简单的命令行工具来管理和监控容器,但功能相对有限。而Kubernetes提供了丰富的管理和监控功能,可以通过命令行工具或Web界面来管理和监控容器集群的状态、健康状况和资源使用情况。
生态系统和社区支持:Docker-compose是Docker官方提供的工具,与Docker紧密集成,拥有庞大的社区支持和生态系统。而Kubernetes是由Google开源的项目,也拥有庞大的社区支持和生态系统,并且得到了众多厂商和组织的支持和贡献。
总的来说,Docker-compose适用于小规模的应用部署和开发环境,而Kubernetes适用于大规模的容器集群部署和生产环境。选择哪种工具取决于应用的规模和需求。
安装与卸载Docker-compose
curl安装
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
给安装目录权限
chmod +x /usr/local/bin/docker-compose
查看是否安装成功
docker-compose --version
卸载
#如果使用 curl 安装,则输出删除安装目录即可
rm /usr/local/bin/docker-compose
Docker-compose常用命令
docker-compose -h:查看帮助
docker-compose up:启动所有docker-compose服务,添加 -d参数如 docker-compose up -d是指启动所有docker-compose服务并后台运行
docker-compose down:停止并删除容器、网络、卷、镜像,
docker-compose exec [yml里面的服务ID]: 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps:展示当前docker-compose编排过的运行的所有容器
docker-compose top:展示当前docker-compose编排过的容器进程
docker-compose logs [yml里面的服务ID]:查看容器输出日志,添加-f参数实时输出日志
docker-compose config:检查配置
docker-compose config -q:检查配置,有问题才有输出
docker-compose restart:重启服务
docker-compose start:启动服务
docker-compose stop: 停止服务
案例
准备一个jar包,使用scp上传到服务器
写Dockerfile文件,使用scp上传到服务器
FROM java:8
MAINTAINER itmahy<[email protected]>
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为XXXXXX.jar
ADD jjjj.jar XXXXXX.jar
# 运行jar包
RUN bash -c 'touch /XXXXXX.jar'
ENTRYPOINT ["java","-jar","/XXXXXX.jar"]
#暴露6001端口作为微服务
EXPOSE 8086
打包镜像
[root@localhost docker-compase]#docker build -t test-project:1.0 .
...省略
[root@localhost docker-compase]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-project 1.0 795309e7773c 43 seconds ago 830MB
编写docker-compose.yml文件,一定要注意缩进,不然会报格式错误,最好在 yml校验 一下
version: '3'
services:
itmahyService:
image: 'test-project:1.0'
container_name: test01
ports:
- '8056:8056'
volumes:
- '/data/microService:/data'
networks:
- itmahy_net
depends_on:
- itmahy-redis
- itmahy-mysql
itmahy-redis:
image: 'redis:6.0.8'
ports:
- '6379:6379'
volumes:
- '/data/redis/redis.conf:/etc/redis/redis.conf'
- '/data/redis/data:/data'
networks:
- itmahy_net
command: redis-server /etc/redis/redis.conf
itmahy-mysql:
image: 'mysql:5.7'
environment:
MYSQL_ROOT_PASSWORD: '121212@999!'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'qqqq'
# 如果使用 root用户 不要使用下面的两句,不然mysql启动不起来
#MYSQL_USER: 'root'
#MYSQL_PASSWORD: '121212@999!'
ports:
- '3306:3306'
volumes:
- '/data/mysql/db:/var/lib/mysql'
- '/data/mysql/conf/my.cnf:/etc/my.cnf'
- '/data/mysql/init:/docker-entrypoint-initdb.d'
networks:
- itmahy_net
command: '--default-authentication-plugin=mysql_native_password'
networks:
itmahy_net: null
执行docker-compose up -d 命令启动所编排的服务
[root@localhost docker-compose]# docker-compose up -d
Creating docker-compose_itmahy-mysql_1 ... done
Creating docker-compose_itmahy-redis_1 ... done
Creating test01 ... done
[root@localhost docker-compose]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1e3e1b2c033 test-project:1.0 "java -jar /aisino-a…" 7 seconds ago Up 6 seconds 0.0.0.0:8056->8056/tcp, :::8056->8056/tcp, 8086/tcp test01
b352ed6452a2 redis:6.0.8 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp docker-compose_itmahy-redis_1
4711b4c1c1e9 mysql "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp docker-compose_itmahy-mysql_1
将mysql的建表文件导入到mysql中(用工具导入 不然还得进入容器执行sql文件)
查看日志
docker logs -f [容器ID]
docker-compose logs -f [服务名称]