在Docker环境中工作

使用Docker可以很方便的进行开发和测试环境搭建。之前读了一篇文章《Docker Tips for Beginners》,大致了解了在什么环境下安装什么Docker应用。因为使用Docker Desktop可能会发生许可证问题(你在大公司工作的话,也说不清楚到底是个人使用,还是商业化使用),所以我的整个Docker环境是使用VirtualBox虚拟机,Centos7和Docker CE组建的。(VMWare的Workstation Player也会有许可证问题,VirtualBox Extension Pack也会有许可证问题,建议不要安装)

安装和配置Docker CE

本节内容主要来自网上各种Docker安装教程,因此对于命令就不做解释了,有疑问可以搜索找答案。

sudo yum check-update
curl -fsSL https://get.docker.com/ | sh
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
# 配置registry-mirrors,例如https://docker.mirrors.ustc.edu.cn/,具体镜像网上搜
vi /etc/docker/daemon.json
systemctl restart docker.service
docker info

# 安装docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version

安装Docker参考:Install DockerInstall ComposeDocker CE

配置镜像源参考:csdn

使用Docker安装和配置Flink

以下是使用Docker启动Flink的命令,具体配置文件参考Flink官方文档

# 可以去https://hub.docker.com/查看具体tag版本,默认安装最新
docker search flink
docker pull flink #下载最新的版本
# 目前我的项目使用的Flink 1.13.2,scala 2.12,Java 1.8,具体tag可以在docker hub上搜索
docker pull flink:1.13.2-scala_2.12-java8

Flink部署模式目前分为Application Mode和Session Mode,参考官方文档。目前我尝试的是Session Mode。使用docker-compose启动Flink Session Mode可以参考本文,docker-compose.yml配置文件参考本文。在docker-compose.yml中创建网络参考本文。使用以下命令启动Flink:

cd flink #存放docker-compose.yml文件夹
docker network create my-network #常见网络,也可以在docker-compose.yml中创建网络
docker-compose -f docker-compose-job.yml up -d #分开启动job
docker-compose -p task1 -f docker-compose-task.yml up -d #启动一个task manager
docker-compose -p task2 -f docker-compose-task.yml up -d #启动另一个task manager,注意,这种方案必须在yml文件中指定使用相同的networks,如果不指定,不同的project网络无法互通。此时,不用使用-p参数。要写另外一个yml文件,并且在services下面的服务名不同。例如:taskmanager1,taskmanager2

启动Flink容器中的自定义任务

首先查看路径

docker build --tag cep-flink-img:dev .
# 导出images
docker save -o cep-flink-img.tar cep-flink-img

docker images
docker ps -a
docker exec -it cep_task-api_1 /bin/bash
# 手动从主机拷贝文件到运行的container中
docker cp api.sh cep_jobmanager_1:/opt/flink/webapi/
# 从container中拷贝文件出来
docker cp cep_jobmanager_1:/opt/flink/webapi/api.sh ./
docker kill container_id
# 重新启动container
docker start container_id
docker attach container_id # 或者docker start --attach container_id
docker container inspect container_id # 查看container信息
docker stop container_id
docker rm container_id
docker image rm image_id
docker image prune


# 删除所有exited的容器
docker ps -a | grep -w Exited | awk '{print $1}' | xargs docker rm //删除所有退出的container

更新运行的服务:https://cloud.tencent.com/developer/article/2086860

Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。