因为业务的原因,经常会需要快速启动具有某一方面特性的服务去进行功能测试,由此以来频繁复杂的部署会让人感到疲累。所以对于一些服务,我们最好还是使用docker来进行快速部署,以达到快速测试的目的。
在使用docker之前,先来看看docker的架构图,原理和干什么的就不详细解释了,那理解起来更浪费时间。
简单来说,就是把应用打包成镜像,然后再将多个应用集成出容器,然后容器可以直接跑服务这么个东西,哈不多说了
在部署之前,我们需要配置好docker以及docker-compose
在这里使用的系统是ubuntu18
sudo apt install docker
sudo apt install docker-compose
docker服务会自动启动,不过因为网络的原因,最好还是把镜像源修改一下。
先找到daemon.json
文件
sudo vim /etc/docker/daemon.json
添加如下内容:
{
"registry-mirrors":["https://zap5bzuu.mirror.aliyuncs.com"]
}
接下来就pull镜像速度就快很多
Docker-Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。复制的别人的,自己懒得说了..
这里直接上成品吧
version: '3.1'
services:
mysql:
image: mysql:5.7
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
TZ: Asia/Shanghai
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- "/data/database/mysql:/var/lib/mysql"
这里基本都可以看懂了,什么container_name啊,restart啥的,就不解释了,image拉取dockerhub上的mysql:5.7版本,ports将容器端口映射到宿主机端口,environment是配置详情,具体可以加哪些参数可以去mysql镜像官网看文档。这里的参数大家应该都看懂了。
command设定字符集,volumes将数据挂载到本地磁盘上,防止重启后数据丢失。
在这个文件目录下启动,如果文件名是docker-compose.yml,执行
docker-compose up -d
如果随便起的文件名***.yml,执行
docker-compose -f ***.yml up -d
up是启动,-d在后台,测试启动可以不加-d。
停止的话直接执行
docker-compose down
看一下正在运行的容器,执行
docker ps
如果显示如下,即运行成功
mysql:5.7 "docker-entrypoint.s…" 15 hours ago Up 15 hours 0.0.0.0:3306->3306/tcp, 33060/tcp
同上,直接上成品
version: '3.1'
services:
mongo:
image: mongo:4.0.4
container_name: mongo
restart: always
ports:
- 27017:27017
# environment:
# MONGO_INITDB_ROOT_USERNAME: root
# MONGO_INITDB_ROOT_PASSWORD: root
# MONGO_INITDB_DATABASE_NAME: test
command: ["mongod","--bind_ip","0.0.0.0"]
volumes:
- "/data/database/mongo:/data/db"
不多解释了,注释的地方是配置啊,命令里面是外部访问啊balabala
version: "3.1"
services:
redis:
image: redis:alpine
container_name: redis
restart: always
ports:
- "6379:6379"
# command: ["redis-server","--bind","0.0.0.0","--appendonly","yes","--requirepass","密码"]
command: ["redis-server","--bind","0.0.0.0","--appendonly","yes"]
volumes:
- "/data/database/redis:/data"
command里面外部访问啊密码啊balabala
这个东西是做数据平台的,挺好用的有兴趣可以了解一下
balabala....
version: '3.1'
services:
streamsets:
image: streamsets/datacollector
restart: always
ports:
- "18630:18630"
environment:
HOST_IP: 0.0.0.0
volumes:
#- /data/database/localtime:/etc/localtime
- streamsets:/opt/steramsets
volumes:
streamsets:
volumes那里创建盘挂载balabala.....
同Mysql启动,此应用看一下效果吧
访问http://127.0.0.1:18630
如下
账号密码admin,登录后效果如下
拖拖拽拽的处理方式,理解的人就知道用着是多么爽了哈哈。。
这里我们要做集群,所以命令稍微有点不同,yaml稍微改变点,影响不大,就不过多解释了
因为kafka需要zookeeper做协同,所以这里把zookeeper也加进来,为了监控kafka,还另外加了kafka-manager
version: '3.1'
services:
zookeeper:
image: wurstmeister/zookeeper
restart: always
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
restart: always
ports:
- "9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 宿主机hostname
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: always
ports:
- "9000:9000"
links:
- zookeeper
- kafka
environment:
ZK_HOSTS: zookeeper:2181
APPLICATION_SECRET: letmein
KM_ARGS: -Djava.net.preferIPv4Stack=true
对比Mysql启动指令稍微有些不同,因为要做集群。此yaml文件没有把本机端口映射给kafka,要不就冲突喽。这里执行
docker-compose up -d --scale kafka=3
此指令创建三个kafka集群,端口随机映射,看一下kafka-manager的效果
这里我已经添加了集群了,所以manager可以看到。集群启动成功
同上balabala
version: "3.1"
services:
jobmanager:
image: flink
restart: always
ports:
- "8081:8081"
expose:
- "6123"
command: jobmanager
environment:
- JOB_MANAGER_RPC_ADDRESS=jobmanager
taskmanager:
image: flink
restart: always
expose:
- "6121"
- "6122"
depends_on:
- jobmanager
command: taskmanager
links:
- "jobmanager:jobmanager"
environment:
- JOB_MANAGER_RPC_ADDRESS=jobmanager
就不多说了。。。
因为和Kafka启动差不多,以下是指令
docker-compose up -d --scale taskmanager=3
哈哈,直接看效果吧。。
没毛病吧老铁。。OK了
直接把多个服务弄到一个services里就完事了老铁们。。以后再讲服务应用