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
上图从左到右分别是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
- redis
docker run --rm --name myredis -p 6379:6379 redis
docker start myredis
docker logs -f myredis
docker stop myredis
- 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
glance
- run kafka image
- zookeeper
- 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
下面查看
- 在这个命令下,因为docker的网络跟本地网络是不同的,所以此时cere不能直接连
- 在同一个网络下发布,但是这样就不能用
localhost:9000
了 - 使用
--link myes
,然后地址使用myes:9200
- 或者直接安装非docker版本。这样就可以直接使用localhost:9200了,因为本地9200已经被映射到docker内部的9200了
- es
制作镜像[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