erlang的一次docker部署尝试
作者:互联网
背景
最近需要在arm64和x86平台上,多个系统版本上部署,被环境问题折磨的焦头烂额。因为erlang本身是基于C语言的,基于不同的gcc环境编译的包不能很好的运行。docker用于解决开发生产环境一致性的问题,所有萌发用docker来解决erlang部署环境问题。
docker基础命令
## 获取镜像 erlang
docker pull erlang:20.3
## 查看所有镜像
docker images
## 创建docker容器
docker run -it -p 8124:8124 erlang:20.3 bash
## 退出容器
exit
## 查看容器列表
docker ps -a 或者 docker container ls
## 宿主到容器复制
docker cp /host/path <containerId>:/file/path/within/container
## 容器到宿主复制
docker cp <containerId>:/file/path/within/container /host/path
## 启动容器
docker start <containerId> 或者 docker container start <containerId>
## 停止容器
docker stop <containerId> 或者 docker container stop <containerId>
## 重启容器
docker restart <containerId> 或者 docker container restart <containerId>
## attach容器
docker attach <containerId>
## attach容器后退出
ctrl+p,ctrl+q
## 删除容器
docker rm -f <containerId>
## 容器内执行
docker exec -it [name] /bin/bash
容器内运行erlang
-
存在问题
-
只使用docker容器内的环境,运行程序及数据都在宿主机器,因此需要容器和宿主机器进行目录映射;
-
erlang节点间通讯,除4369端口外,其他为动态端口,docker容器与宿主默认网络隔离,需要使用宿主网络
-
docker容器启动后关闭问题,需运行不停止的命令
-
-
docker run参数调整
## 名称参数,设置容器名称为erl_test
--name erl_test
## 网络参数,需共享宿主网络
--net=host
## 目录挂载
--mount type=bind,source=/host/path/erl/release,target=/container/path/erl/release
## 后台执行
-d
## 重启规则
--restart=always
docker 运行erlang
- erlang服务说明
## 服务名称
erl_md
## 打包工具
rebar3
## 服务后台启动 无返回结果,随即命令结束
bin/erl_md start
## 后台服务停止
bin/erl_md stop
## 服务console模式启动
bin/erl_md console
## 服务console模式停止
Ctrl+c
- 启动erlang容器
## erlang服务宿主目录 /root/erl_server/erl_md
## erlang服务容器目录 /erl_server/erl_md
## erlang服务名称 erl_test
## 镜像 erlang:20.3
docker run --name erl_test --restart=always --net=host --mount type=bind,source=/root/erl_server/erl_md,target=/erl_server/erl_md -itd erlang:20.3 /erl_server/erl_md/bin/erl_md console
-
实现效果
-
多个erlang节点可正常交互
-
erlang服务端口可正常访问
-
可实现开机自启
-
标签:尝试,容器,md,##,erl,docker,erlang 来源: https://www.cnblogs.com/dacode/p/16643109.html