admin管理员组文章数量:1794759
除了k8s,docker
前言
随着微服务架构的现代兴起,容器化技术已经成为应用开发的重要组成部分。Docker作为最流行的容器化平台之一,使得应用的部署和管理变得更加灵活。
我平时使用docker容器通常都是部署单个小的应用,所以使用docker的命令就可以满足启停、运维的需求。但是对于一个应用中多个容器这种情况来说,就需要一些工具来将这些容器组织起来。
k8s是我们听过最常用的容器管理工具,但是对于个人开发者来说,k8s有点过于重量级了,其中包含了许多复杂的组件,从学习和部署都是需要一定的时间和资源成本。所以简单好用的docker-compose就成了一个比较不错的选择。
docker-compose
docker-compose是一个工具,用于定义和运行多个 Docker 容器。用户通过一个名为docker-compose.yml的YAML文件,来配置应用的各个服务,包括服务的镜像、环境变量、端口映射、卷挂载等信息。使用docker-compose,开发人员可以一键启动整个应用的所有服务,减轻了手动管理每个容器的复杂性。
我之前在服务器上,基于docker搭建了一个HDP版本的Hadoop集群,一共5个节点,包含2个NameNode和3个DataNode。然后我就是用docker-compose将五个节点启动组织成一个大数据集群应用。在此应用中,DN要在NN前启动。
docker-compose使用yum即可安装,真正的难点是如何编写docker-compose的yaml配置文件,其实这个文件和Dockerfile大同小异,掌握了语法就能轻松的编写,不过要注意的是:yaml文件要按照配置层级进行缩进。
yaml配置
还是从docker-compose.yaml的一个样例,来演示如何编写配置:
代码语言:yaml复制version: '3' # 指定 Compose 文件的版本
services: # 定义服务
service_name: # 服务名称
image: image_name:tag # 使用的镜像
build: # 可选,构建服务所需的 Dockerfile 路径
context: ./path/to/dockerfile # 构建上下文
dockerfile: Dockerfile # Dockerfile 名称
ports: # 端口映射
- "host_port:container_port"
environment: # 环境变量
- VARIABLE_NAME=value
- ANOTHER_VARIABLE=value
volumes: # 卷挂载
- host_path:container_path # 共享文件夹
networks: # 连接的网络
- network_name
depends_on: # 服务依赖关系
- other_service_name
restart: always # 容器重启策略
配置参数解释如下:
- version: 指定 Docker Compose 文件的版本,常用的版本有 '2' 和 '3'。
- services: 定义应用的所有服务,每个服务都包含一系列的配置。
- service_name: 每个服务的唯一名称,可以自定义。
- image: 指定要使用的 Docker 镜像,可以包含标签(如 latest)。
- build: 指定构建服务的 Dockerfile 路径,包含 context 和可选的 dockerfile。
- ports: 指定容器和主机之间的端口映射,格式为 host_port:container_port。
- environment: 设置环境变量,可以使用键值对的格式。
- volumes: 配置数据卷,用于持久化数据,格式为 host_path:container_path。
- networks: 指定服务连接的网络,可以自定义网络名称。
- depends_on: 指定服务的启动顺序,确保依赖服务在当前服务之前启动。
- restart: 定义容器的重启策略,如 no、always、on-failure。
compose镜像操作
上面就是纯纯理论知识,在这我就使用docker-compose来搭建一个1 Nginx + 2 Tomcat的容器应用。
首先创建一个项目目录,在目录下新建一个docker-compose.yaml文件,其中nginx使用80端口,tomcat使用8080端口。
代码语言:yaml复制version: '3'
services:
nginx:
build:
context: /root/app/dockerfile/nginx
dockerfile: Dockerfile
ports:
- "800:80"
depends_on:
- tomcat1
- tomcat2
restart: always
tomcat1:
build:
context: /root/app/dockerfile/tomcat
dockerfile: Dockerfile
ports:
- "8081:8080"
restart: always
tomcat2:
build:
context: /root/app/dockerfile/tomcat
dockerfile: Dockerfile
ports:
- "8081:8080"
restart: always
可以通过build指定Dockerfile自己构建镜像,nginx和tomcat使用的之前的Dockerfile,如下图:
也可以直接使用image参数指定之前构造的对象,当编写完yaml配置之后,我们就可以开始使用compose来操作yaml中定义的一组容器。
1. 检查配置
之前说了yaml文件有层级的规范要求,那么如何知道我们的yaml是否符合规范,我们可以执行配置的检查命令:
代码语言:bash复制docker-compose config -q
执行之后提示配置文件有问题。
去配置文件查看ports的缩进有问题,修改之后再次执行,当没有任何输出时表示配置没问题。
2. 根据yml构建容器
然后就开始构建容器,这个原理也是使用yaml中指定的Dockerfile来完成的构建。
代码语言:bash复制docker-compose build
构建过程如图:
构造过后,可以看到多了compose开头的image。
3. 后台启动所有容器
有了image,就可以基于镜像启动容器了。
代码语言:bash复制docker-compose up -d
-d表示后台启动,可以通过docker ps看到启动的容器信息:
上面的命令只需要执行一遍,docker-compose就通过yaml文件与一组容器关联了起来。接下里就是通过compose对这组容器进行操作了。
compose容器操作
我们最常用的就是对容器进行启停。
启停容器
代码语言:bash复制docker-compose restart
docker-compose start
docker-compose stop
如图,和我们使用docker启动单个命令一样,docker-compose通过yaml文件启动一组容器。
停止删除所有容器
然后就是删除所有容器,不过删除之后只需要后台启动容器就好了,构造镜像的步骤就不需要了。
代码语言:bash复制docker-compose down
其他操作
最后就是一些其他的命令,可以对比docker的命令。
代码语言:bash复制# 进入容器
docker-compose exec 容器id
# 查看运行的所有容器
docker-compose ps
# 查看容器进程
docker-compose top
# 查看容器输出日志
docker-compose logs 容器id
结语
从上面不难看出,docker-compose对于容器的操作和docker大同小异,只不过一个操作一组容器的命令,一个是操作单个容器的命令,这样让熟悉docker的开发者能够很快的上手docker-compose。
同时,docker-compose更适合开发和测试小型项目,而K8s则是为生产环境设计的容器编排平台,适合大规模和复杂的应用场景。
本文标签: 除了k8s,docker
版权声明:本文标题:除了k8s,docker 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754633616a1704605.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论