0%

运维

Docker Compose

编写docker-compose.yml脚本,配合dockerfile和sh脚本进行搭建

  • 示例一:搭建一主二从三哨兵的redis集群 ^220b94
    version: '3' #dockercompose版本
    services: #定义应用的的服务,每个服务运行一个镜像
      redis-master: #服务名称
        image: redis:latest #镜像
        command: redis-server --appendonly yes --requirepass bronya #启动容器时要执行命令
        volumes: #挂载数据卷,不存在的目录会自动创建
          - ./data/master:/data
        ports: #定义端口映射
          - "6379:6379"
    
      redis-slave1:
        image: redis:latest
        command: redis-server --slaveof redis-master 6379 --appendonly yes
        depends_on:
          - redis-master
        volumes:
          - ./data/slave1:/data
    
      redis-slave2:
        image: redis:latest
        command: redis-server --slaveof redis-master 6379 --appendonly yes
        depends_on:
          - redis-master
        volumes:
          - ./data/slave2:/data
    
      redis-sentinel1:
        image: redis:latest
        command: redis-sentinel /etc/redis/sentinel.conf
        depends_on:
          - redis-master
        volumes:
          - ./sentinel1.conf:/etc/redis/sentinel.conf
    
      redis-sentinel2:
        image: redis:latest
        command: redis-sentinel /etc/redis/sentinel.conf
        depends_on:
          - redis-master
        volumes:
          - ./sentinel2.conf:/etc/redis/sentinel.conf
    
      redis-sentinel3:
        image: redis:latest
        command: redis-sentinel /etc/redis/sentinel.conf
        depends_on:
          - redis-master
        volumes:
          - ./sentinel3.conf:/etc/redis/sentinel.conf
    #!/bin/bash
    docker-compose up --build
  • 示例二:基于dockerfile
    version: '3'
    services:
      app:
        build: 
          context: .
          dockerfile: Dockerfile
        ports:
          - "8080:8080"
    Dockerfile文件
    # 使用官方的java镜像作为基础镜像
    FROM openjdk:8-jdk-alpine
    
    # 设置工作目录
    WORKDIR /app
    
    # 将本地的jar包复制到Docker镜像中
    COPY ./your-app.jar /app
    
    # 设置启动命令
    ENTRYPOINT ["java", "-jar", "/app/your-app.jar"]

Docker

常见命令

  • 之间的关系:
    常见命令与他们之间的关系
  • 使用format对ps的结果进行格式化,更容易观察
    docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
  • 可以通过编辑/root/.bashrc文件去给常用的命令起别名
    # 修改/root/.bashrc文件
    vi /root/.bashrc
    内容如下:
    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
    alias dis='docker images'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
  • 网络问题:
    - 容器的ip是一个虚拟ip,其值并不与容器绑定
    - 可以使用docker的网络功能实现容器的互联