WSL安裝和運行docker服務(wù)
Linux子系統(tǒng)(Windows Subsystem for Linux ,WSL)可以在Windows中運行Linux環(huán)境颜曾。它并不是虛擬機丽猬,只是一個模擬環(huán)境,并不能完全實現(xiàn)Linux中的各種操作侨歉,但是其啟動速度非衬γ欤快儿倒,與windows交互非常方便掰吕,消耗非常低果覆,比虛擬機省去大把內(nèi)存,非常適合本地開發(fā)時使用殖熟。
此前在WSL里面不能使用Linux版的docker局待,需要安裝Windows版與其通信,但Windows版是個大坑,而且資源占用很高钳榨。最近發(fā)現(xiàn)舰罚,從win10創(chuàng)新者更新后的版本可以啟動起來Linux版的docker daemon了,體驗大大提升重绷,資源占用大大降低沸停。雖說稍微有點麻煩膜毁,且不能支持docker的全部指令昭卓,但也值得趕快用起來!
WSL的安裝方法參考這篇文章 http://blog.51cto.com/3chou/2294231
docker安裝方式
本機環(huán)境:Win10 Pro 1803 17134.472
重點:需要安裝17.09版本的docker瘟滨,不要使用apt安裝
暫不支持18以上版本(apt安裝的是18版本)候醒,啟動容器時會報一個錯誤(忘了,想起來再補上詳細(xì)錯誤信息)
使用管理員啟動WSL控制臺杂瘸,安裝17.09版本的docker
sudo apt update
sudo apt install libltdl7 cgroupfs-mount
curl -O https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.1~ce-0~debian_amd64.deb
sudo dpkg -i docker-ce_17.09.1~ce-0~debian_amd64.deb
sudo usermod -aG docker $USER
以后每次啟動docker服務(wù)時需要使用管理員啟動WSL控制臺倒淫,執(zhí)行
sudo cgroupfs-mount
sudo service docker start
docker version
如果運行docker version后能看到server的信息就是啟動成功了
如果能看到Server的信息就是啟動成功了,享受Linux內(nèi)核的docker把~
沒有啟動成功時只能看到Client的信息败玉,看不到Server的信息敌土,不管沒有啟動起來也不要著急,試一下從任務(wù)管理器里面把WSL進程(Ubuntu)結(jié)束掉运翼,重新用管理員打開控制臺執(zhí)行上面的語句就可以了
已知問題:
docker exec 執(zhí)行報錯返干,無法進入容器(oci runtime error: exec failed: container_linux.go:265: starting container process caused "could not create session key: function not implemented")
不過沒事兒,咱改用nsenter進入容器就行
這個nsenter是一個工具血淌,可以進入容器里面去矩欠,詳情請參考:https://github.com/jpetazzo/nsenter 。
sudo apt install gcc make -y \
&& wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz \
&& tar -xzvf util-linux-2.24.tar.gz \
&& cd util-linux-2.24/ \
&& ./configure --without-ncurses \
&& make nsenter \
&& sudo cp nsenter /usr/local/bin
## ---找到容器的pid悠夯,使用nsenter進入容器------------------
docker inspect -f {{.State.Pid}} myredis
sudo nsenter -p -i -u -m -n -t 上一行返回的數(shù)字 /bin/sh
### 一條命令進入docker
sudo nsenter -p -i -u -m -n -t `docker inspect -f {{.State.Pid}} myredis` /bin/sh
以后進入正在運行的docker容器時可以用這條快捷命令
sudo nsenter -p -i -u -m -n -t
docker inspect -f {{.State.Pid}} 容器名稱` /bin/sh