Docker关注点

Overview

概念

  • A container容器 is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another(类似于一个打好的jar包)
  • Docker is a tool designed to make it easier to create, deploy, and run applications by using containers(本身并不是容器,而是创建容器、打包容器、部署容器、运行容器的工具)

keyword

general comparison

上图从左到右分别是vm, container, physical,

  • VM: 每个VM都有自己的内核,可以与主机不同,但是启动较慢,消耗较大
  • container: 每个container与主机内核一致
  • physical: 常规服务器
特性 虚拟机vm 容器container
隔离级别 操作系统级别 进程级别
隔离策略 Hypervisor CGroup,Namespace
资源占用 5~15% 0~5%
启动时间 分钟级别 秒级别
镜像大小 GB~TB KB~MB
集群规模 上百 上万
HA策略 备份,容灾,迁移 弹性,负载,动态

Docker三大核心,

  • 镜像,image,相当于一个模板,类似Java里面的类,将应用与其需要的环境一起打包为镜像
  • 容器,container,相当于一个具体应用,类似java里面的对象
  • 仓库,repository,存放image的地方,Browse Popular Images

Version

Install example

  1. redis
    • docker run --rm --name myredis -p 6379:6379 redis
    • docker start myredis
    • docker logs -f myredis
    • docker stop myredis
  2. kafka
    • zookeeper
      • docker run --rm --name myzk -p 2181:2181 wurstmeister/zookeeper
    • kafka
      • run kafka image
          docker run --rm --name mykafka -p 9092:9092 \
            --link myzk \
            -e "KAFKA_ADVERTISED_HOST_NAME=localhost" \
            -e "KAFKA_ZOOKEEPER_CONNECT=myzk:2181" \
            wurstmeister/kafka
        
      • valid kafka image
          0. docker exec -it mykafka /bin/bash  #(go to kafka container)
          1. cd opt/kafka_2.12-2.2.1/bin  #(go to kafka inner directory, changed by different kafka version, kafka_xxx-xxx)
          2. list topic
           kafka-topics.sh --zookeeper myzk:2181 --list
          3. create topic
           kafka-topics.sh --create --zookeeper myzk:2181 --replication-factor 1 --partitions 1 --topic myKafkaTopic
           kafka-topics.sh --delete --zookeeper myzk:2181 --topic myKafkaTopic # permanent delete since wurstmeister change the kafka default config
          4. producer push msg into topic
           kafka-console-producer.sh --broker-list localhost:9092 --topic myKafkaTopic
           then input some contents
          5. consumer pull msg from topic
           kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic myKafkaTopic
           then you can see the contents, or you can open another session to see realtime msg
        

      image

      glance

  3. elasticsearch
    • es
      docker run --rm --name myes -p 9200:9200 -p 9300:9300 \
      -e "discovery.type=single-node" \
      -e "cluster.name=my_docker_es_720" \
      -e "node.name=node01" \
      -e "discovery.type=single-node" \
      -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
      elasticsearch:7.2.0
      
    • cerebro
      • docker run --rm --name mycere -p 9000:9000 lmenezes/cerebro
        • 在这个命令下,因为docker的网络跟本地网络是不同的,所以此时cere不能直接连localhost:9200,但是可以连ip:9200,ip可以从mac -> system preferences -> network -> Wi-Fi -> address下面查看 image
      • 在同一个网络下发布,但是这样就不能用localhost:9000
      • 使用--link myes,然后地址使用myes:9200
      • 或者直接安装非docker版本。这样就可以直接使用localhost:9200了,因为本地9200已经被映射到docker内部的9200了 image

制作镜像[11]

可以通过以下方式制作,

  • docker commit,将当前容器导出为一个镜像
  • Dockerfile,编写一个file来灵活组合构建一个镜像(更推荐)
  • docker-compose
    • docker-compose -f docker-compose.yml up -d,构建image,启动services
    • 利用docker-compose scale ping-app=xx来水平扩缩容

docker资源分配

默认container可以完全使用主机的resource

  • Memory
  • CPU
  • GPU

Reference

  1. Docker容器教程
  2. Docker run命令
  3. Docker相似的命令与区别
  4. docker部署redis实战
  5. docker安装kafka
  6. Kafka Shell基本命令
  7. kafka-cheat-sheet
  8. docker ui-kitematic
  9. 10分钟快速掌握Docker必备基础知识
  10. 10分钟看懂Docker和K8S
  11. 用Docker部署一个Web应用