Docker容器管理

  • 单一容器管理

    当我们需要单个zookeeper的时候直接拉取一个镜像就可以

    1
    docker pull zookeeper

    拉取镜像之后需要将容器运行起来

    1
    2
    3
    4
    docker run --name single_zookeeper -d zookeeper:latest

    --name的意思是给这次启动的zookeeper起个名字
    -d 的意思是在后台运行

    此时就会在后台运行一个名字为single_zookeeper的容器,默认使用2181端口

    我们可以使用下面的命令来查看日志

    1
    docker logs -f single_zookeeper
    • 容器标识符

      每个容器启动都会给容器分配一个CONTAINER_ID,默认是128位的,相当于主键,但是一般16位就可以保证唯一性

      有个问题就是CONTAINER_ID虽然能够保证唯一性,但是比较难以记忆,所以就如上面示例一样可以使用 - -name给容器起一个别名

      有了容器名字就可以通过名字来查询容器的一些信息,对容器进行一些操作,如下面

      1
      2
      3
      docker ps -a | grep single_zookeeper   //查看容器的运行状态
      docker stop single_zookeeper //停止容器
      docker start single_zookeeper //启动容器
    • 容器内部命令:

      容器启动好后还不够,我们有时需要进入容器内部去执行一些命令,docker给我们提供了这样的命令,使用

      1
      2
      3
      docker exec 容器名 容器内执行的命令
      EX:
      docker exec single_zookeeper ls

      如果需要执行多条命令可以加上 - it参数,这样就相当于进入了容器

      1
      docker exec -it single_zookeeper /bin/bash

      这里要注意要带着后面的/bin/bash不然无法进入内部

  • 多容器管理

    docker 的理念是“一个容器一个进程”,一个服务如果需要多个容器,可以把多个容器起来后使用 —link选项来建立起来联系,这里我们使用一个比较通用和简单的方式 docker compose来启动一个zookeeper集群

    1. 首先我们新建一个文件名叫docker-compose.yml,其中内容为下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      version: '2'
      services:
      zoo1:
      image: zookeeper
      restart: always
      container_name: zoo1
      ports:
      - "2181:2181"
      environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

      zoo2:
      image: zookeeper
      restart: always
      container_name: zoo2
      ports:
      - "2182:2181"
      environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

      zoo3:
      image: zookeeper
      restart: always
      container_name: zoo3
      ports:
      - "2183:2181"
      environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

      下面我们取其中一个配置来进行分析一下配置文件及其含义:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      version: '2'
      services:
      zoo1:
      image: zookeeper //指定启动容器的镜像
      restart: always //当启动docker的时候,容器跟着一块启动
      container_name: zoo1 //容器名字
      ports: //暴露端口信息,将本地的2181(前)端口映射到容器的2181(后)端口
      - "2181:2181"
      environment: //t添加环境变量
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    2. 容器启动及管理

      1
      2
      3
      4
      5
      6
      COMPOSE_PROJECT_NAME=multi_zookeeper docker-compose up //此时启动的是文件名为docker-compose.yml的配置文件,如果需要制定配置文件可以使用 -f 来制定配置文件

      docker-compose ps //查看当前启动的容器

      docker rm 容器名 //删除已停止的容器,删除前确保没有重要数据

综上,我们就把简单的容器管理学完了,其中顺带把zookeeper的环境配置给配置了一下,这就是docker的一个很明显的优势,本来我们只有一台机器的情况下是没办法来进行多台机器的模拟的,除非启动几台虚拟机,可是这样的代价比较高,并且虚拟机比较耗内存,而docker就给我们提供了这么简单的方式来构建一个zookeeper集群环境

有什么想法欢迎大家在下面评论,最好带上邮箱,回复评论会有邮件提醒