轻松处理Docker容器
目标
正在使用 Docker 构建开发环境,但对冗长的命令感到厌倦的人。
或者相反地,希望所有命令都能由 Docker 提供的人。
触发
在docker使用以前,可以通过 alias 来灵活使用 bundle 命令,例如使用 ber 来执行 bundle exec ruby,使用 beer 来执行 bundle exec rails。但是现在,只依赖 alias 已经无法顺利进行了。
docker-compose run –rm web railsがwebだったり、appだったり。
docker –rm -it -v $pwd:/myapp -w /myapp ruby railsがmyappだったり別の場所だったり。
所以,每次都要手打,非常辛苦。
我曾考虑过能否自动识别目录并自动添加服务名称和挂载位置,后来发现 rbenv 的 local 命令有类似的感觉,于是想到要不自己也来试试。
另外,我想要玩弄Golang,也是为了找一些灵感的一面。。。
成果物的翻译可以是 “achievements” 或者 “outcomes”
使用方法
只需要一种选项:
仅限于执行go命令之前。
1. 安装
$ dcenv install golang
2. 部署
$ dcenv local golang
$ dcenv rehash
3. 執行命令 (zhí lì)
$ go version
go version go1.8 linux/amd64
只要这个。
环境切换
切换版本
$ dcenv tag golang:1.7
$ go version
go version go1.7.5 linux/amd64
通过目录切换
只能在执行local的子目录中执行。
$ mkdir child
$ cd child
$ go version
go version go1.7.5 linux/amd64
$ cd ../../
$ go version
bash: go: command not found
安装步骤。
Linux(Bash)
在.bashrc文件中编写环境变量并重新加载。
export DCENV_HOME=~/.dcenv
export PATH=${DCENV_HOME}/shims;${DCENV_HOME}/bin;${PATH}
下载文件并解压缩。
$ wget --no-check-certificate https://github.com/nak1114/dcenv/releases/download/v0.0.4/dcenv-v0.0.4-linux-amd64.tar.gz
$ mkdir -p $DCENV_HOME
$ tar xvfz dcenv-v0.0.4-linux-amd64.tar.gz -C $DCENV_HOME
Windows 窗户
通过更改环境变量,重新启动控制台。
请下载以下文件并解压至DCENV_HOME目录下:
https://github.com/nak1114/dcenv/releases/download/v0.0.4/dcenv-v0.0.4-windows-amd64.zip
> powershell Expand-Archive dcenv-v0.0.4-windows-amd64.zip -DestinationPath %DCENV_HOME%
其他指令
为了了解dcenv的状态,有一些命令可供使用。
注册表中已注册的命令(镜像名称)清单
$ dcenv install --list
golang
naktak/clang
naktak/dcenv_test
安装的命令(镜像名称)列表
$ dcenv yard --list
golang
当前目录下可执行的命令列表
$ dcenv command --list
COMMAND | IMAGE (FILE)
go | golang (/tmp/hoge/.dcenv_bash)
已安装的命令(镜像名称)的详细信息。
$ dcenv yard golang
---[ 0 ]---------
Id :
Owner :
Image : golang
Brief : golang for go command
Desc :
Pri : 0
Config : bash
Tag :
Fake : false
Commands: map[go:map[]]
Script :
docker run --rm -it -v "$(pwd)":/myapp -w /myapp golang:{{.Tag}} go "$@"
Config : windows
Tag :
Fake : false
Commands: map[go:map[]]
Script :
docker run --rm -it -v %CD%:/myapp -w /myapp -e GOOS=windows -e GOARCH=386 golang:{{.Tag}} go %*
当前目录下正在执行的命令的详细信息
$ dcenv command go
---[ go ]------------------------------
(略)
创建新命令的步骤
目前注册表中几乎没有任何命令。
然而,您可以自己创建新的命令并将其注册到注册表中。
以下是使用busybox镜像注册ls命令和cat命令的示例。
创建命令的模板
$ dcenv yard --create busybox
Edit: ~/.dcenv/image_yard/busybox.yml
显示已创建的模板文件名称。
编辑模板
$ vi ~/.dcenv/image_yard/busybox.yml
请参阅GitHub上的文档以获取有关模板文件的详细信息。
或者,您也可以尝试安装 naktak/dcenv-script-sample 来获取更清晰的说明。
检查创建的命令
$ dcenv local busybox
$ dcenv rehash
$ ls
在注册表中注册用户。(仅限首次)
从GitHub的注册页面(https://nak1114.github.io/dcenv/index.html)的“注册”按钮进行注册。
点击“注册”后,您将收到确认邮件,里面包含点击完成注册的URL。
将命令添加到注册表中。
$ dcenv push busybox
从注册表中注销。
$ dcenv logout
从注册表中删除已注册的命令。
只能删除误注册的命令。除了自己注册的命令,无法从注册表中删除其他命令。
$ dcenv push -d busybox
dcenv指令备忘单
Go语言的感受
我认为Go语言宣传的特点如下。
-
- クロスプラットフォーム開発が容易である
-
- 並列化が容易である
-
- 高速なサーバサイドが構築できる
- マスコットが可愛い
考虑到并行性,我们仍旧希望快速移植这个项目,因此本次的目标是进行跨平台开发并实现高效的服务器端。
跨平台开发
由于我的环境同时存在Linux和Windows,所以我将设计以适应这个环境。可能是因为题目不太好,所以虽然只有一个源代码,但我觉得工作量还是增加了一倍。Shell相关方面在Linux和Windows之间有太多的差异。
由于我没有Mac,所以无法进行操作确认,但只要编译就是免费的,所以我已经发布了。请问有人能给我一个MBA吗?我想在星巴克摆出高傲的表情。
快速的服务器端
最初本来也打算制作后端部分。但由于某游戏机于3月3日发售,似乎没有时间来完成它,因此我们选择了将其交由名为Kii的BaaS处理。当海拉尔恢复和平后,我想重新尝试一下。
吉祥物很可爱
在Go中,这是非常重要的事情。由于Go编译器会在一些微不足道的地方抛出错误,所以每次通过标准库搜索 https://golang.org/ 进行查找时,它都会迎接我的到来,以至于我一直担心我的头发根部的健康状况处于危险中,但终于勉强完成了。
最终
在最初是一种简单的语言中添加了GC到C中,和Ruby相比是很不同的。
对于过度的错误提示,我只是觉得在开发的早期很烦人,但我很想知道前辈们是如何与这个编译器相处的。这次我大约修改了3次数据结构,每次都有很多错误……起初我是以Ruby这样一种很灵活的语言编写的,当一定程度的规范确定下来,并且需要更高速度时,我会考虑使用Go,这是我的愚见。