(八)Docker-compose

itmahy
itmahy
发布于 2024-01-18 / 34 阅读
0
0

(八)Docker-compose

Docker-compose简介

Docker Compose是一个用于定义和运行多个Docker容器的工具。它使用YAML文件来配置应用程序的服务、网络和卷等方面的设置。通过使用Docker Compose,您可以轻松地创建和管理多个容器,实现容器化应用程序的快速部署和扩展。

使用Docker Compose的步骤如下:

  1. 安装Docker Compose:首先,您需要在您的机器上安装Docker Compose。您可以从Docker官方网站上下载适合您操作系统的版本,并按照官方文档进行安装。

  2. 创建docker-compose.yml文件:在您的项目目录下创建一个名为docker-compose.yml的文件。这个文件将包含您的应用程序的配置信息。

  3. 定义服务:在docker-compose.yml文件中,您可以定义您的应用程序的各个服务。每个服务都可以包含一个或多个容器。您可以指定容器的镜像、端口映射、环境变量、卷挂载等等。

  4. 构建和启动容器:使用docker-compose命令,您可以构建和启动您的应用程序的容器。在项目目录下运行docker-compose up命令即可启动所有的服务。

  5. 管理容器:使用docker-compose命令,您可以管理您的应用程序的容器。例如,您可以使用docker-compose ps命令查看容器的状态,使用docker-compose stop命令停止容器,使用docker-compose start命令启动容器等等。

  6. 清理容器:使用docker-compose命令,您可以清理您的应用程序的容器。例如,使用docker-compose down命令可以停止并删除所有的容器。

通过使用Docker Compose,您可以更方便地管理和部署容器化应用程序。详细的配置选项和命令参数,请参考Docker官方文档(https://docs.docker.com/compose/)。

Docker-compose 与 Kubernetes的区别

Docker-compose和Kubernetes是两种不同的容器编排工具,它们有以下区别:

  1. 功能和规模:Docker-compose主要用于在单个主机上编排和管理多个Docker容器,它可以通过一个YAML文件定义和管理多个容器之间的关系和依赖。而Kubernetes是一个更为强大和复杂的容器编排平台,可以用于在多个主机上编排和管理大规模的容器集群。

  2. 可扩展性:Docker-compose适用于小规模的应用部署,它可以在单个主机上管理容器的生命周期,但无法实现容器的自动伸缩和负载均衡。而Kubernetes具有强大的可扩展性,可以自动进行容器的伸缩和负载均衡,以适应高负载和大规模的应用部署。

  3. 管理和监控:Docker-compose提供了简单的命令行工具来管理和监控容器,但功能相对有限。而Kubernetes提供了丰富的管理和监控功能,可以通过命令行工具或Web界面来管理和监控容器集群的状态、健康状况和资源使用情况。

  4. 生态系统和社区支持: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 [服务名称]


评论