@khan-lau
2016-04-07T20:45:59.000000Z
字数 2447
阅读 5250
列表项
Docker
Erlang环境
Docker1.3.2版本以上支持加速器,如果您没有安装Docker或者版本较旧,请安装或升级。
参考Boot2Docker安装文档(http://docs.docker.com/installation/mac/)。高速下载Boot2Docker(http://get.daocloud.io/#install-boot2docker)
鉴于国内的网络环境, 要正常使用 docker, 额外配置源.
去http://daocloud.io 注册账号 (daocloud 是 docker 官方认可的服务商)
注册完成后进入https://dashboard.daocloud.io/, 点击加速器
按钮, 进入 https://dashboard.daocloud.io/mirror, 获得跟你账户相关的加速 url. http://用户id.m.daocloud.io
请确认你的Boot2Docker已经启动,并执行
boot2docker ssh
sudo su
echo "EXTRA_ARGS=\"--registry-mirror=http://用户id.m.daocloud.io\"" >> /var/lib/boot2docker/profile && exit
exit
boot2docker restart
以上为 mac os x 配置, 其他系统配置请看服务提供商的帮助文档
打开boot2Docker
在终端界面输入 :
docker search erlang
搜索关键字为 erlang
的镜像. 执行完成后, 终端返回了一堆镜像列表:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
correl/erlang Erlang/OTP for Docker 9 [OK]
nacyot/erlang-erlang 3 [OK]
eproxus/erlang-base 2 [OK]
zfbp/erlang 1 [OK]
unbalancedparentheses/erlang Docker Image packaging for each erlang ver... 1 [OK]
adie/erlang 1 [OK]
nifty/erlang Base docker image for Erlang projects 0 [OK]
我挑了其中correl/erlang
这个镜像
如果之前有未下载完成的镜像, 请先删除, 如果没有, 则忽略关于删除的部分. 这条指令是移除所有的容器和镜像
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
注:shell 中的 $() 和 `` 类似,会先执行这里面的内容,上面的脚本会出现如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 删除容器, docker rmi 删除镜像
退出时删除容器
如果你仅仅想在一个容器中快速的运行一个命令,然后退出,并且不用担心容器状态,把 --rm 参数加入 run 命令后面,这将结束很多你保存了的容器,并且清理它们。
当没有运行的容器或者是根本没有容器的时候,这只会提示一个警告信息。当你想尝试的时候,这就是个非常好的单行命令。如果你仅仅想删除所有的容器,你可以运行如下命令:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
以上所有内容都准备好之后, 从服务器 pull 下镜像
docker pull correl/erlang
使用了镜像源之后, 应该下载速度比较快, 下载完成后, 环境就算搭建完成了.
验证镜像, hello world, 首先可以测试在容器中指定用echo
指令执行 hello world.
docker run correl/erlang echo "hello word"
如果镜像没有什么问题的话, 终端会收到对应的反馈.
执行Erlang shell
docker run --rm -it correl/erlang erl
--rm 参数 前面有介绍, 设定退出时删除容器
-i, --interactive=false Keep STDIN open even if not attached
-t, --tty=false Allocate a pseudo-TTY
如果没有意外的话, 应该收到反馈
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:8:8] [async-threads:10] [kernel-poll:false]
Eshell V6.4 (abort with ^G)
1> hello world.
* 1: syntax error before: world
1> hello.
hello
2>
如下把宿主机的当前目录映射到容器的/home 目录下:
docker run --rm -it -v $(pwd):/home correl/erlang /bin/bash
这样就可以在宿主机器上编写代码, 在容器中编译 调试 部署 执行
xxxx@xxxxs-Mac-Pro:~/Project/ErLang/test$ docker run --rm -it -v $(pwd):/home correl/erlang erl
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:8:8] [async-threads:10] [kernel-poll:false]
Eshell V6.4 (abort with ^G)
1> cd("/home").
/home
ok
2> ls().
shop.erl
ok
3>
查看 docker 版本
docker version
查看docker 容器信息
docker info
查看当前本地的镜像
docker images
查看当前本地镜像的 layer
docker images --tree