俺が使う俺のためのオレオレdocker イメージを作った
- マイナーで容量もでかいarchlinuxベース
- 日本語環境適用
- 自分のdotfiles適用
他人の作ったベースdockerイメージと自分の作ったカスタムdockerイメージ
oblique/archlinux-yay latest 2.02GB
└── u1and0/archlinux latest 2.56GB
├── u1and0/zplug latest 2.64GB
└── u1and0/neovim latest 3GB
└── u1and0/vim-go latest 3.87GB
- oblique/archlinux-yayをベースにしました。
- u1and0/dotfiles v1.13.3を適用しています。
- pacmanだけてなく、yayでもパッケージのインストール可能です。
- reflectorで最適なサーバーを選択しています。
- u1and0/archlinuxをベースにしました。
- docker hubのビルドテストは何故か失敗していますが、ローカル環境でのビルドは成功しています。リモートのビルドが失敗する原因を調査中。
- 別環境のWindows上のVirtualBox内のArchlinuxで
docker run u1and0/zplug
で動作確認しました。
- u1and0/archlinuxをベースにしました。
- この記事はこのdockerイメージを使って書きました。
- C-Jから始まるキーバインドでdenite, 例えばC-JC-Nで現在ディレクトリ下のファイル検索、C-JC-Fで現在ファイルを検索
- F5でファイラーNERDTreeをサイドバーで開く
- などなど
- u1and0/neovimをベースにしました。
- fatih/vim-go, zchee/deopleteプラグインインストール済み
:GoInstallBinaries
で手に入るツール取得済み
詳しくはページ上のREADMEで。
なぜArchlinuxか
新しいバージョンのパッケージが手に入りやすいから
pacman -S [package name]
で最新版のパッケージをインストールします。
UbuntuやCentOSに落ちているパッケージは古い安定版が多いですが、Archlinux標準のパッケージマネージャpacman
を使えばより新しいバージョンを手に入れることができます。
Archlinuxはローリングアップデートという珍しいアップデート方式を取るLinuxディストロで、Ubuntu18.04のようなバージョンという概念が存在しません。
pacmanデータベースが管理している最新のパッケージ同士の依存関係を解決することがOSアップデートの役割も担っています。
pacman使いたいから
上と同じ。MSYS2やCmderからUNIX入門したので、パッケージマネージャーはpacman1が一番慣れているし、pacmanが一番いいパッケージマネージャだとと思ってます。(デスクトップPCはUbuntuユーザー、仮想環境はArchlinuxユーザー。)
bacpacというpacmanのバックアップツールがあり、ワンコマンドで次の機能が使えます。
* pacmanで入れたパッケージのgistへのバックアップ
* ローカルへ復元
* バックアップしたパッケージのリスト表示
* バックアップと現在インストール状況の差分表示
forkして自分で使いやすく改造していますbacpac。
bacpacの親リポジトリはメンテナンスを終了しています。
AURからもインストールできる
yay2をインストールしてあるdockerイメージをベースにしているのでyayがつかえます。pacman -S
で見つからないパッケージはたいていyay -S
で手に入ります。
yayは AURからパッケージを落としてきます。
Ubuntuでいうapt-add-repository [reponame] && apt install [packagename]
をyay -S [packagename]
で済ませるということですね。
実験用
上述の通りArchlinuxベースのコンテナは最新版のパッケージを手に入れやすいので、パッケージの最新機能を試してはコンテナを壊して、再構築してまた試して、という使い方を想定しています。
dockerはきれいな本番環境を作っていく目的にもいいですが、こういう実験的環境構築にも向いていると思います。
Archlinuxは上述したようなアップデート方式から「永遠の不安定版」と呼ばれているので、実機環境よりは仮想環境向きでしょう。
Powerlineフォントについて
三角形のフォントを表示するにはホストマシンにPowerline fontのインストールと「ターミナルのフォント変更作業」が必要です。
インストール方法はgithubに書かれているので従ってください。
docker開発環境を作ってみたとき気づいたメリットとデメリット
メリット
- エラーやワーニングがでないようにdotfilesを最適化できた
- Dockerfileが出来上がってしまえば環境の再構築がVirtualBoxよりも早い
- Go開発の環境構築が湾コマンドですむようになった
1. git pull https://github.com/u1and0/dotfiles
2. 初回はdotfilesをホームに置き換え
3. 初回はneovimプラグインインストール
4. :GoInstallBinariesで長時間待つ
↓
1. docker pull u1and0/vim-goで長時間待つ
デメリット
- dotfilesが個人依存なので配布できる形で公開する意味はあるのか?dotfilesにingスクリプトも用意してあるし、ダブりじゃないか
- dotfiles更新の度にレイヤーの更新をする仕事が増えた
- historyが残らないのがツラい。開発においては過去のコマンドも資産なので。
- historyを残すにはホストマシンとボリューム共有してhistoryファイルをリンクするとかcommitするとか一手間必要。
- レイヤーが重い。ディスク容量を食いつぶす。VirtualBoxでさえディスク容量食いつぶしてるのに。これは最適化の余地あり
- ホストにもゲストにも同じバイナリ(基本的なgrepとかvimとか、/binとか/usr/bin下にあるようなやつら)があって「それってエコシステムなの?」と自問自答している