首页  

容器化部署 docker docker-compose k8s     所属分类 k8s 浏览量 469
docker docker-compose DockerSwarm k8s 

docker 单个容器

Docker Compose 通过配置文件 docker-compose.yml 来管理多个 Docker 容器,
在配置文件yml中,所有的容器通过service来进行定义,统一管理多个容器的配置,如网络、数据卷、执行指令、环境变量、资源限制等,
然后使用 docker-compose 脚本来启动、停止、重启、监控应用以及应用中的服务和所依赖的容器等,
不用每次要运行多个容器时而重复写大量命令。
Docker Compose 只能管理当前主机上的容器

DockerSwarm 用来管理Docker集群,很少用  ,被 k8s 取代

k8s 容器集群管理系统, 管理多主机的 Docker 容器。
能够实现自动化部署、扩展和维护容器集群等功能 ,提供服务之间的负载均衡,


Docker 部署服务 springboot 应用打包 Dockerfile 编写 FROM java:8 MAINTAINER codefun007 ADD demo-0.0.1-SNAPSHOT.jar demo.jar # 暴露端口8090,推荐在docker run时通过 -p 进行端口暴露 EXPOSE 8090 # 容器启动后执行的命令 ENTRYPOINT ["java", "-jar", "demo.jar"] 构建镜像 docker build -t demo1:0.0.1 . -t 指定镜像 名称 标签 -f 指定dockerfile docker images 查看镜像 docker run --name 容器名称 -p 8090:8090 镜像名称 -it -p 指定容器端口和宿主机端口映射 宿主机端口:容器端口 --name 指定容器名 -it 进入容器并且终端输入命令执 -v -v /data:/data 宿主机目录:容器目录 ,没有目录自动创建。如果容器操作文件夹没有权限,要加 --privileged=true 关闭安全权限 -d 后台运行 -net 指定网络方式 none/host/bridge none 不会进行任何网络配置,其没有网卡、没有IP也没有路由,无法与外界通信,需要手动添加网卡配置IP等,不推荐使用。 host 不会创建自己独立的虚拟网卡,直接使用宿主机的网卡和IP地址,访问容器时直接访问 宿主机IP:容器端口 此模式的网络性能最高,但是各容器之间端口不能相同。在做容器迁移时,不方便,不推荐使用。 bridge 默认网络模式 Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥, 当创建容器时会从 docker0 子网中分配一个 IP 给容器使用,并将容器连接到虚拟网桥 docker0 与外界通信,每个容器的IP不相同。 这种方式用的比较多,但是默认的 bridge 网络有局限性,比如不能通过容器名连接访问, 可以通过创建自定义网络进行连接访问 docker network create demo_bridge
Docker Compose 部署服务 docker-compose.yml 主要分为如下三个部分 version 描述当前docker-compose.yml的版本号 services 可以自定义一个或多个服务 networks 定义使用的网络 version: '3' services: demo2: image: demo2:0.0.1 networks: - demo_net # 映射端口 宿主机端口:容器内部端口 ports: - 8092:8092 # Docker重启时,容器自动启动 restart: always # 网络 networks: # 网络名称 demo_net: external: false 进入docker-compose.yml所在目录 docker-compose up -d 启动 docker-compose.yml 编排的所有容器 -d,daemon模式,后台运行, docker-compose常用命令: # 启动服务 docker-compose up # 启动服务 后台运行 docker-compose up -d # 查看服务的启动日志 docker-compose logs -f # 查看指定容器的启动的日志 docker logs -f 容器id # 查看指定容器的启动的日志 ( 最后 n 条日志) docker logs -f --tail n 容器id # 停止compose服务 docker-compose stop # 重启compose服务 docker-compose restart # kill compose服务 docker-compose kill # 查看compose服务状态 docker-compose ps # 删除compose服务 docker-compose rm
K8s 部署服务 通过 kubectl apply 命令部署 通过 Kubesphere 平台部署 通过 kubectl apply 命令部署 demo.yml apiVersion: apps/v1 kind: Deployment # 声明一个 Deployment 资源对象 metadata: name: deployment-myapp spec: replicas: 2 # 声明 pod 个数是2 selector: # 通过标签选择被控制的 pod matchLabels: app: myapp template: # 在template中定义 pod metadata: labels: app: myapp # 给pod打上标签 myapp spec: containers: - name: myapp # 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中 image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 kubectl apply -f demo.yml 查看 Pod 信息 kubectl get pods 完整yaml文件模板 apiVersion: v1 # 必选,版本号,例如v1 kind: string # 必选,Pod类型,有 Pod/Deployment/Service。Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。 metadata: # 必选,元数据 name: string # 必选,名称 namespace: string # 必选,所属的命名空间 labels: # 自定义标签 - name: string # 自定义标签名字 annotations: # 自定义注释列表 - name: string spec: # 必选,Pod中容器的详细定义 containers: # 必选,容器列表 - name: string # 必选,容器名称 image: string # 必选,容器的镜像名称 imagePullPolicy: string # 获取镜像的策略,可填Always/Never/IfNotPresent。Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像 command: [string] # 容器的启动命令列表,如不指定,使用打包时使用的启动命令 args: [string] # 容器的启动命令参数列表 workingDir: string # 容器的工作目录 volumeMounts: # 挂载到容器内部的存储卷配置 - name: string # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名 mountPath: string # 存储卷在容器内mount的绝对路径,应少于512字符 readOnly: boolean # 是否为只读模式 ports: # 需要暴露的端口号列表 - name: string # 端口号名称 containerPort: int # 容器需要监听的端口号 hostPort: int # 容器所在主机需要监听的端口号,默认与Container相同 protocol: string # 端口协议,支持TCP和UDP,默认TCP env: # 容器运行前需设置的环境变量列表 - name: string # 环境变量名称 value: string # 环境变量的值 resources: # 资源限制和请求的设置 limits: # 资源限制的设置 cpu: string # cpu的限制,单位为core数,将用于docker run --cpu-shares参数 memory: string # 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数 requests: # 资源请求的设置 cpu: string # Cpu请求,容器启动的初始可用数量 memory: string # 内存清楚,容器启动的初始可用数量 livenessProbe: # 对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可 exec: # 对Pod容器内检查方式设置为exec方式 command: [string] # exec方式需要制定的命令或脚本 httpGet: # 对Pod内部容器健康检查方法设置为HttpGet,需要制定Path、port path: string port: number host: string scheme: string HttpHeaders: - name: string value: string tcpSocket: # 对Pod内部容器健康检查方式设置为tcpSocket方式 port: number initialDelaySeconds: 0 # 容器启动完成后首次探测的时间,单位为秒 timeoutSeconds: 0 # 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒 periodSeconds: 0 # 对容器监控检查的定期探测时间设置,单位秒,默认10秒一次 successThreshold: 0 failureThreshold: 0 securityContext: privileged:false restartPolicy: string # 重启策略,可填 Always/Never/OnFailure。Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod nodeSelector: obeject # 设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定 imagePullSecrets: # Pull镜像时使用的secret名称,以key:secretkey格式指定 - name: string hostNetwork:false # 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络 volumes: # 在该pod上定义共享存储卷列表 - name: string # 共享存储卷名称 (volumes类型有很多种) emptyDir: {} # 类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值 hostPath: string # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录 path: string # 所在宿主机的目录,将被用于同期中mount的目录 secret: # 类型为secret的存储卷,挂载集群与定义的secre对象到容器内部 scretname: string items: - key: string path: string configMap: # 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部 name: string items: - key: string path: string
KubeSphere 是在目前主流容器调度平台 k8s 之上构建的企业级分布式多租户容器平台, 提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度, 旨在解决 K8S 本身存在的存储、网络、安全和易用性等痛点。 除此之外,平台已经整合并优化了多个适用于容器场景的功能模块, 以完整的解决方案帮助企业轻松应对敏捷开发与自动化运维、微服务治理、多租户管理、工作负载和集群管理、 服务与网络管理、应用编排与管理、镜像仓库管理和存储管理等业务场景。
服务部署方式对比 传统方式(直接手动裸部署) docker部署 docker-compose部署 k8s部署 1、优点 传统方式:简单直接,无需安装docker等环境。 docker:部署服务只需拉取镜像,启动即可,方便快速。 docker-compose:通过配置文件统一编排部署多个容器。 K8s: (1)支持分布式环境下的容器编排部署,能管理多主机的容器服务。 (2)集群管理功能齐全,能够实现自动化部署、扩展和维护容器集群、监控容器状态、负载均衡等功能。 2、缺点 传统方式:手动部署服务,比如MySQL等,部署麻烦,需关心配置、版本和环境等。 docker: (1)容器需要一个个部署,如果容器很多,工作量会很大。 (2)一般是部署单个服务,真实的业务场景下,容器应用间的依赖关系,网络通信,数据持久化,状态等非常复杂,用这种方式处理起来非常棘手。 docker-compose:只能在当前主机编排部署容器,不能实现跨宿主机编排部署。 K8s: (1)部署集群复杂,学习成本高,比较难懂。 (2)资源占用高。 3、适用场景 传统方式:只想简单直接使用某个单体服务,不介意繁琐的配置。 docker:想简单容器化部署某个或几个服务,不需要处理容器间依赖关系等服务集群。 docker-compose:只需在当前主机上统一编排部署容器组。 K8s: (1)需要在分布式多主机环境下编排部署容器。 (2)想要更齐全强大的容器集群管理功能。 (3)能承受高资源占用情况。

上一篇     下一篇
以Docker为代表的容器技术介绍

docker和containerd

k8s服务暴露

vertx core web 实例

JAVA Void类

vertx promise future