轻松处理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%USERPROFILE%\.dcenvPATH既存のPATHの先頭に %USERPROFILE%\.dcenv\shims; %USERPROFILE%\.dcenv\bin;を加える

请下载以下文件并解压至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指令备忘单

Command cheat sheet

Go语言的感受

我认为Go语言宣传的特点如下。

    • クロスプラットフォーム開発が容易である

 

    • 並列化が容易である

 

    • 高速なサーバサイドが構築できる

 

    マスコットが可愛い

考虑到并行性,我们仍旧希望快速移植这个项目,因此本次的目标是进行跨平台开发并实现高效的服务器端。

跨平台开发

由于我的环境同时存在Linux和Windows,所以我将设计以适应这个环境。可能是因为题目不太好,所以虽然只有一个源代码,但我觉得工作量还是增加了一倍。Shell相关方面在Linux和Windows之间有太多的差异。

由于我没有Mac,所以无法进行操作确认,但只要编译就是免费的,所以我已经发布了。请问有人能给我一个MBA吗?我想在星巴克摆出高傲的表情。

快速的服务器端

最初本来也打算制作后端部分。但由于某游戏机于3月3日发售,似乎没有时间来完成它,因此我们选择了将其交由名为Kii的BaaS处理。当海拉尔恢复和平后,我想重新尝试一下。

吉祥物很可爱

在Go中,这是非常重要的事情。由于Go编译器会在一些微不足道的地方抛出错误,所以每次通过标准库搜索 https://golang.org/ 进行查找时,它都会迎接我的到来,以至于我一直担心我的头发根部的健康状况处于危险中,但终于勉强完成了。

最终

在最初是一种简单的语言中添加了GC到C中,和Ruby相比是很不同的。
对于过度的错误提示,我只是觉得在开发的早期很烦人,但我很想知道前辈们是如何与这个编译器相处的。这次我大约修改了3次数据结构,每次都有很多错误……起初我是以Ruby这样一种很灵活的语言编写的,当一定程度的规范确定下来,并且需要更高速度时,我会考虑使用Go,这是我的愚见。

广告
将在 10 秒后关闭
bannerAds