title: docker compose替换k8s CreateTime: 2025-04-22 11:18:08 UpdateTime: 2025-11-10 13:35:16 CategoryName: CloudNative --- # 说明 k8s越来越复杂,也不太好维护,决定使用docker compose 替换k8s # 安装docker ```shell ## 卸载老版本 yum remove docker-ce docker-ce-cli containerd.io ## 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 ## 下载阿里云镜像仓库文件 curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## 安装docker yum install -y docker-ce docker-ce-cli containerd.io ## 开机启动 systemctl start docker systemctl enable docker ### 建议软连接 docker 目录 systemctl stop docker mv /var/lib/docker /data ln -s /data/docker /var/lib/ systemctl start docker ``` # 配置加速地址 ```vi /etc/docker/daemon.json``` ```json { "registry-mirrors": [ "http://docker.m.daocloud.io", "https://docker.xuanyuan.me", "https://docker.1ms.run", "https://docker.linkedbus.com", "https://dockerhub.o0o.us.kg", "https://docker.chongzhen.icu", "https://docker.kengdie.xyz", "https://docker.1panel.live" ], "insecure-registries": ["127.0.0.1:5000"], "log-driver":"json-file", "log-opts":{"max-size":"10m"} } ``` # 迁移yaml文件 ## k8s redis.yaml文件 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: redis-config labels: app: redis data: redis.conf: |- port 6379 #bind 127.0.0.1 -::1 protected-mode no #daemonize yes maxmemory-policy volatile-lru #loadmodule /data/redisearch_v2.4.8.so #loadmodule /data/librejson_v2.0.8.so --- ###声明 Deployment#### apiVersion: apps/v1 kind: Deployment metadata: name: redis spec: replicas: 1 ###更新:容器准备完成之后,延迟60s,配合strategy.maxUnavailable: 0时,可以忽略### #minReadySeconds: 60 strategy: ###升级方式,默认的方式### type: RollingUpdate ###严格控制,每次升级一个pod,不可用状态为0个pod### rollingUpdate: ###滚动升级时会先启动1个pod### maxSurge: 1 ###滚动升级时允许的最大不可用的pod个数### maxUnavailable: 0 selector: matchLabels: app: redis template: metadata: ####禁用istio自动注入sidecar### annotations: sidecar.istio.io/inject: "false" ###istio需要app和version两个标签### labels: app: redis version: v1 spec: containers: - name: redis image: redis:8.0.0 ### imagePullPolicy: IfNotPresent #imagePullPolicy: Always command: - "sh" - "-c" - "redis-server /etc/redis/redis.conf" env: ###设置时区### - name: TZ value: Asia/Shanghai #- name: LC_ALL value: zh_CN.UTF-8 #- name: LANG value: zh_CN.UTF-8 ports: - containerPort: 7070 volumeMounts: ###挂载点### - mountPath: /data ###对应下面卷 cephfs-pvc-pod 的名称### name: redis-data ###指定子目录,会在cephfs里创建子文件夹#### subPath: redis/pvc ###挂载点### - mountPath: /etc/redis/redis.conf ### volumes.name ### name: redis-config ### 文件名 #### subPath: redis.conf volumes: ###卷名称,对应上面的挂载名称### - name: redis-data persistentVolumeClaim: ###对应cephfs-pvc.yaml的metadata.name### claimName: k8s-pvc - name: redis-config configMap: defaultMode: 0600 ### 对应的ConfigMap名称 ### name: redis-config --- ###可以使用 kubectl api-versions 查询支持的version### apiVersion: v1 ### service 类型#### kind: Service ###元数据### metadata: ###service的名称#### name: redis ###具体描述### spec: ###标签选择器### selector: ###标签是 nginx 的pod### app: redis ###节点类型是 NodePort ### type: NodePort ###虚拟IP### #clusterIP: 10.98.239.102 ###端口列表### ports: ###http的端口说明,istio需要端口的命名为协议名(http)或者协议名加后缀(http-a)### - name: tcp ###TCP协议### protocol: TCP ###虚拟IP的端口是80### port: 6379 ###pod的端口是80,一般和port属性一致### #targetPort: 80 ###实际物理机IP映射的端口,一般自动分配, kubectl get services 可以查看,如果外部有LB,可以指定,方便管理#### nodePort: 30379 ``` ## docker compose ### 目录结构 ``` /redis ├── docker-compose.yml ├── conf │ └── redis.conf └── data ``` ### docker-compose.yaml ```yaml services: redis: image: redis:8.2.2 container_name: redis restart: unless-stopped command: sh -c "redis-server /etc/redis/redis.conf" environment: TZ: Asia/Shanghai ports: - "30379:6379" volumes: - ./data:/data - ./conf/redis.conf:/etc/redis/redis.conf healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 5s retries: 3 start_period: 30s deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G ``` ### redis.conf ```conf bind 0.0.0.0 protected-mode no # requirepass your_strong_password maxmemory 4gb maxmemory-policy volatile-lru appendonly yes dir /data tcp-keepalive 300 ``` # 常用命令 ```shell ## 进入容器 docker exec -it 容器名 /bin/bash ## 后台启动, -d代表后台启动,会应用配置 docker compose up -d ## 强制重建服务 docker compose up -d --build --force-recreate ## 仅启动 web 和 db 服务 docker compose up -d web db ## 仅停止容器(不删除) docker compose stop ## 仅启动容器(不更新配置) docker compose start ## 停止并清理 docker compose down ## 彻底清理(含数据卷) docker compose down -v ## 查看容器运行状态 docker compose ps ## 实时查看日志 docker compose logs -f ## 查看服务依赖关系 docker compose config --services ```