LoginSignup
3
11

More than 5 years have passed since last update.

Dockerコンテナを気楽に扱う

Last updated at Posted at 2017-03-02

対象

dockerで開発環境作っているけど、長ったらしいコマンドに嫌気がさしている人。
もしくは逆にあらゆるコマンドをdockerで提供されたら良いのにと思っている人。

きっかけ

bundle時代はaliasを駆使してberbundle exec rubybeerbundle exec railsなどと出来ていたがdockerを使うようになって以下のようにaliasだけでは上手く行かなくなりました。

  • docker-compose run --rm web railsがwebだったり、appだったり。
  • docker --rm -it -v $pwd:/myapp -w /myapp ruby railsがmyappだったり別の場所だったり。

ということで、毎回手打ちになるのですが、非常につらい。
もうディレクトリを認識して勝手にサービス名だのマウント場所だのを追加してくれないかと考えていたらrbenvのlocalコマンドが似た感じだと気が付いて、いっちょ作ってみるかと思い至りました。

あと、golangを弄りたくて、ネタ探しという側面も・・・。

成果物

使い方

例としてgoコマンドを実行するまでです。

1. インストールして

    $ dcenv install golang

2. デプロイして

    $ dcenv local golang
    $ dcenv rehash

3. コマンド実行

    $ 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に環境変数を書いてリロードします。

.bashrc
    export DCENV_HOME=~/.dcenv
    export PATH=${DCENV_HOME}/shims;${DCENV_HOME}/bin;${PATH}

ファイルをダウンロードして展開します。

bash
    $ 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%\.dcenv
PATH 既存の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上のDocを参照。
若しくは dcenv install naktak/dcenv-script-sampleがわかりやすいです。

作成したコマンドをチェックする

    $ dcenv local busybox
    $ dcenv rehash
    $ ls

レジストリにユーザー登録する。(初回のみ)

GitHub上の登録画面( https://nak1114.github.io/dcenv/index.html )の‘Sign Up‘から登録する。
’Sign Up’を押すと登録したメールアドレスに確認メールが届きますので、メールに記載されているURLをクリックして登録完了です。

コマンドをレジストリに登録する。

    $ dcenv push busybox

レジストリからログアウトする。

    $ dcenv logout

登録したコマンドをレジストリから削除する。

間違えて登録したコマンドは削除できます。自分で登録したコマンド以外はレジストリから削除できません。

    $ dcenv push -d busybox

dcenvのコマンドチートシート

Command cheat sheet

Go言語所感

Go言語の宣伝されている特徴として以下があると思います。

  • クロスプラットフォーム開発が容易である
  • 並列化が容易である
  • 高速なサーバサイドが構築できる
  • マスコットが可愛い

並列化に関しては依然作ったこれを移植するのが早いので、今回はクロスプラットフォーム開発高速なサーバサイドを目標としました。

クロスプラットフォーム開発

私の持っている環境だとLinuxとWindowsがあるのでこの環境に対応できるように設計します。お題があまり良くなかったのかソースは1つだけど手間は2倍のままだった気がします。シェル回りはLinux/Windowsで違いすぎました。

あとMacは所有していないので動作確認は出来ませんがコンパイルするだけならタダなので、リリースはしています。誰か私にMBAを恵んでください。スタバでどや顔したいです。
https://github.com/nak1114/dcenv/releases

高速なサーバサイド

当初はバックエンドも作る予定でした。3月3日に某ゲーム機が発売されるため、これを作る余裕が無くなりそうなのでKiiというBaaSに丸投げです。ハイラルに平和を取り戻したら、もう一度挑戦してみようかと思います。

マスコットが可愛い

Goにおいては超重要事項です。Goのコンパイラは些細な事でエラーを吐いてくれるので、私の頭部毛根の健康状態が危機的状況になるのですが、標準ライブラリの検索で https://golang.org/ に行くたびに、コイツが出迎えてくれるので何とか作り終えた感じです。

最後に

普通にCにGCを追加した素朴な言語でした。当初はRubyと比べながら開発していたのですが、全然違いましたね。
Go言語の過剰なエラーは開発初期には邪魔でしかないという感想なのですが、先輩諸兄はこのコンパイラとどのように付き合っているのか気になります。今回は都合3回くらいデータ構造を変更したのですが、その度に大量エラーが…。初期はRubyのようはゆるーーーい言語で書いて、ある程度仕様が固まって、なお速度が必要ならGoに手を出すのが良いのかと愚考します。

3
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
11