win10下的docker安裝使用和shell登錄
背景
工作需要用到docker,平時編碼都在win10下搞,后來發現現在的win10下一樣也可以安裝docker,那么何不在win10下搞docker后其他適配編譯啥的都放docker里搞了得了,畢竟虛擬機真是有點重。廢話不多數,如下是我win上
安裝docker的環境。
- Docker Desktop v19.03.13
- 啟用了WSL2,啟用了docker可以直接在WSL2中直接使用,這樣就和在linux下操作docker一毛一樣了
目標
安裝一個ubuntu docker 可以在mobaxterm的終端進行登錄即可。
安裝鏡像
隨便找了一個docker鏡像,直接在powershell中 docker pull osgeo/gdal:ubuntu-full-lastest
創建容器(在WSL中)
使用
docker run --name="test-docker" -dit -v /mnt/e:/home/test -p 9022:22 [docker鏡像id]
創建鏡像,run的詳細命令參數的意思,可網上搜一下,這里簡要說明一下:
- --name="test-docker" 制定創建容器的名字
- -dit 制定創建容器 分離的方式創建容器機run后不在控制台交互(-d), STDIN打開即可以和控制台交互(i),t 分配一下偽控制台(源命令解釋 Allocate a pseudo-TTY)
- -v /mnt/e:/home/test 將宿主機 /mnt/e(即E盤) 映射到容器的 /home/test 目錄
- -p 9022:22 將宿主機的 9022 端口映射到容器的22端口,后邊用來遠程登錄容器
啟動容器后使用 Mobaxterm 登錄:
發現不能登錄,找到原因是 ubuntu 默認是不開啟ssh服務的。
進入容器中安裝ssh服務,參考
http://blog.chinaunix.net/uid-69944074-id-5831708.html
發現,ubuntu 默認不允許使用root登錄, 我按上文修改了容器中的:
sudo vi /etc/ssh/sshd_config 找到PermitRootLogin without-password 修改為PermitRootLogin yes (本人遇到過)
然后重啟ssh服務在 Mobaxterm 登錄就OK了
注意:一般容器中的軟件鏡像源都不是最新的,而且直接apt install 會提示有問題,那么就需要執行如下命令:
apt update
apt upgrade
如上邊命令很慢,那么就更新ubuntu的鏡像源,參考 https://github.com/0fengzi0/Blog/issues/15
比較惡心的是容器中一般沒有編輯器 那么直接用cp 命令 和echo 命令修改 /etc/apt/sources.list文件
#備份原始倉庫信息
cp /etc/apt/sources.list /etc/apt/sources.list
#替換倉庫信息 (ubuntu20)其他版本有變動
echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list
到這里基本就折騰完了。
后記
多說一句,原本我是想直接對外部保留 docker 本身的IP地址的,但是折騰很久也沒折騰出來
( 參考文章1 ,參考文章2 [參考文章3](https://xiabee.cn/coding/wsl2) [參考文章4] https://blog.51cto.com/zhongliang/2454181)。后來還是老老實實的做端口映射吧。當然現在直接用root登錄docker也有點丑陋
但是自己開發和測試時夠了的,畢竟不是搞運維,安全的運維的工作就交給更專業的人來搞吧。