Docker Host(Windows 64bit) + Docker Client(OSX)

奇跡的にこんな環境で作業する羽目になった. Windows 64bitと明記している理由は,Docker Toolboxを利用するからである.

Windows 32bitは割と苦行だと思う.2016/05/05, docker-machineにdriver(virtualbox-driver等)が入ってなく詰んだ.たぶん,正解はWindows32bit machineにVirtualBoxsshサーバを立てて,clientはgenericを使ってdocker hostをつくるのかなー?

Install (Host)

Docker Toolbox

Docker Toolbox | Docker

Create Container

docker-machine create -d virtualbox docker0
VBoxManage controlvm docker0 naptpf1 "docker_host,tcp,0.0.0.0,52376,,2376"
VBoxManage controlvm docker0 naptpf1 "ssh_host,tcp,0.0.0.0,50022,,22"

copy ssh-key

以下のコマンドで,$HOGE/.dockerが出力される.ssh-keyがあるdirectoryまで移動する.

docker-machine config docker
cd $HOGE/.docker/machine/machine/docker0
ls
#=> id_rsa を OSXまで持っていく 

Install (Client)

export DOCKER_HOST_ADDR=Windows 64bitのIP Addressをいれる

docker-machine

以下から最新のdocker-machineを持ってくる.2016/05/05, v0.7.0

Releases · docker/machine · GitHub

取得したらPATHを通す

register docker-host with docker-machine

copy ssh-keyにて取得したid_rsa$HOME/.ssh/docker-machineへrenameする. そのssh-keyと以下のコマンドでdocker-machineへ登録する.

docker-machine create -d generic --generic-ssh-user docker --generic-ssh-key $HOME/.ssh/docker-machine --generic-ip-address $DOCKER_HOST_ADDR --generic-ssh-port 50022 --generic-engine-port 52376 docker9

以下のコマンドので確認する.

docker-machine ls
#NAME      ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER    ERRORS
#docker9   *        generic   Running   tcp://$DOCKER_HOST_ADDR:52376           v1.11.1

実際にdockerを使って見る

eval "$(docker-machine env docker9)"
docker run hello-world

Port forwarding

例えば,nginxのコンテナを作るとする. 以下のようにPort forwardingしないと,nginxにアクセスすることができない.

docker run -d -p 58080:80 nginx
docker-machine ssh docker9 -f -N -L 58080:localhost:58080

なぜなら,以下のようにNAPTしているからだ.

Docker Host <- NAPT -> (Windows 64bit) <-> Docker Client

plus

上記の例には無駄がある. -p 58080:80マッピングは不要だ.

exposeしているportへのマッピングは下記でよい.

docker run -d nginx
#=> ad8w3h
docker-machine ssh docker9 -f -N -L 58080:$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ad8w3h):80

add CMD

export cmd=/bin/sh
docker exec -it $container_name $cmd

confirm command

docker-machine create -d virtualbox docker0

create docker host

VBoxManage controlvm docker0 naptpf1 "docker_host,tcp,0.0.0.0,52376,,2376"

NAPT

VBoxManage controlvm $VM_NAME naptpf[1-n] "$RULE_NAME,$PROTOCOL,$LOCAL_ADDRESS,$LOCAL_PORT,$VM_ADDRESS,$VM_PORT"

docker-machine config docker

show config

docker-machine create...

create docker host info

docker-machine create -d $DRIVER .... $HOST_NAME

into container (Docker)

nsenterは標準でzshを呼び出そうとしていた.

# PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
# nsenter --target $PID --mount --uts --ipc --net --pid /bin/bash

参考

postd.cc

AURを用いたパッケージのインストールメモ

Archにjdkをインストールする際にAURを用いたのでメモ

Arch User Repository - ArchWiki

ビルドファイルの取得

依存などが書いてあるPKGBUILDが含まれているtarballをダウンロードする. Package Actionsの欄にあるDownload tarballからダウンロードする. AUR (en) - jdk

依存の解決とパッケージの作成

保存したtarball(ここではjdkを例とする)であるjdk.tar.gzを解凍する. そうすると以下のファイルが作成される.

$ tar zxvf jdk.tar.gz
jdk/
jdk/.SRCINFO
jdk/jconsole-jdk8.desktop
jdk/jdk.install
jdk/jmc-jdk8.desktop
jdk/jvisualvm-jdk8.desktop
jdk/PKGBUILD
jdk/policytool-jdk8.desktop

そして,cd jdkで移動し,makepkg -sで依存解決を行いパッケージを作成する. その結果,jdk-8u45-1-x86_64.pkg.tar.xzが作成される.

パッケージのインストール

作成した,jdk-8u45-1-x86_64.pkg.tar.xzをインストールする. sudo pacman -U jdk-8u45-1-x86_64.pkg.tar.xz

おしまい

Emacsでgitのdiffを見るときのfont colorを変える

.emacsやinits/00-setting.elに以下を記述

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(org-document-title ((t (:foreground "red"))))
 '(diff-hunk-header ((t (:background "brightred" :foreground "black"))))
 '(diff-removed ((t (:background "color-22" :foreground "brightred"))))
 '(diff-added ((t (:background "yellow" :foreground "black"))))
 '(custom-face-tag ((t (:inherit custom-variable-tag :foreground "brightred"))))
 '(custom-group-tag ((t (:inherit variable-pitch :foreground "brightred" :weight bold :height 1.2))))
 '(custom-variable-tag ((t (:foreground "brightred" :weight bold))))
 '(font-lock-function-name-face ((t (:foreground "Blue"))))
 '(highlight ((t (:background "darkseagreen2" :foreground "black"))))
 '(hlline-face ((t (:background "OliveDrab1" :foreground "black"))))
 '(lazy-highlight ((t (:background "paleturquoise" :foreground "black"))))
 '(match ((t (:background "yellow1" :foreground "black"))))
 '(minibuffer-prompt ((t (:foreground "brightyellow"))))
 '(next-error ((t (:inherit region :foreground "black"))))
 '(region ((t (:background "lightgoldenrod2" :foreground "black"))))
 '(secondary-selection ((t (:background "yellow1" :foreground "black"))))
 '(show-paren-match ((t (:background "turquoise" :foreground "black")))))

他の色に変えたいときは...

名前の取得

色を変えたい文字にカーソルを合わせ,M-x eval-expression RET (get-char-property (point) 'face) RET で名前を取得できる.(例えば,diff-added等)

好きな色を探す

M-x list-colors-displayで色とその名前を調べることができる.(例えば,blue1はどうのような色か確認できる)

色の変更

上記のEmacs Lispに書き加えるか,M-x customize-faceで値を変更してC-x C-sで保存する.

引用元

http://dminor11th.blogspot.jp/2011/08/face.html

Lispで無名関数を作ったはいいけど,実行はどうすれば...?の解決

初心者向けのサイトを見ているとlambdaを使用しているのは良いが,任意のタイミングでlambdaを実行する方法について言及している場合が少ない.

なので,調べた方法について記述する.

結論としては,funcallにlambdaと引数を渡すことで実行できる.

code

まずはじめにlambdaを生成する.

(defun make-lambda ()
  (lambda (x) (+ x x)))

次にfuncall使用して実行する.

(funcall (make-lambda) 2)
;; 4