首页 > 其他分享 >erlang的一次docker部署尝试

erlang的一次docker部署尝试

时间:2022-08-31 15:00:53浏览次数:52  
标签:尝试 容器 md ## erl docker erlang

背景

最近需要在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
From: https://www.cnblogs.com/dacode/p/16643109.html

相关文章

  • docker 容器修改保存
    修改的容器保存命令 语法:dockercommit[OPTIONS]容器ID[REPOSITORY[:TAG]]OPTIONS说明:-a:提交的镜像作者; -c:使用Dockerfile指令来创建镜像; -m:提......
  • CentOS Docker 安装
    CentOSDocker安装一、docker安装1、更新yum云仓库           updatayum2、一键安装docker           curl-sSLhttps://get.daocloud.io/d......
  • 在docker swarm中,如何对一个service进行滚动升级?
    滚动升级,一定听过,就比如说,现在有个服务运行了多个实例,想要对这个服务进行升级(比如:更换镜像),应该怎么弄呢? 接下来的部分,咱们一起来看下。 在本文中,做滚动升级的一个场......
  • openEuler 20.03 LTS SP3 安装Docker
    1.添加阿里云的CentOS8源参考:https://developer.aliyun.com/mirror/centoswget-O/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-vault-8......
  • Docker-Compose 安装 RabbitMQ 并安装延迟队列插件 rabbitmq-delayed-message-exchang
    1、Docker-Compose 安装RabbitMQdocker-compose.ymlversion:'3'services:rabbitmq:restart:alwaysimage:rabbitmq:3.8.5-managementcontainer_......
  • docker配置远程访问
    DockerDaemon默认情况下是只允许本地访问的,不允许远程访问。本文将首先介绍DockerDaemon的连接方式,然后说明如何配置远程访问。即实现通过本地docker客户端访问远......
  • dockerfile
    目录基础结构指令fromlabelmaintainerruncmdexportenvaddcopyentrypointvolumeuserworkdironbuild创建镜像基础结构Dockerfile是一个文本格式的配置文件,用户可以使用D......
  • 3.DockerFile文件编写样例
    Base镜像(scratch):DockerHub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的1)编写DockerFile文件:vi/home/mydocker/Dockerfile文件,内容如下:FRO......
  • dockerfile
    目录基本结构指令FROMLABELMAINTAINERRUNCDMEXPOSEENVADDCOPYENTRYPOINTVOLUMEUSERWORKDIR基本结构Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速......
  • dockerfile
    目录什么是dockerfiledockerfile的基本结构dockerfile的指令创建镜像什么是dockerfiledockerfile构建镜像是以基础镜像为基础。Dockerfile是一个文本文件,内容就是用户......