1. 程式人生 > 實用技巧 >win10 docker安裝使用和mobaxterm登入ssh

win10 docker安裝使用和mobaxterm登入ssh

win10下的docker安裝使用和shell登入

背景

工作需要用到docker,平時編碼都在win10下搞,後來發現現在的win10下一樣也可以安裝docker,那麼何不在win10下搞docker後其他適配編譯啥的都放docker裡搞了得了,畢竟虛擬機器真是有點重。廢話不多數,如下是我win上
安裝docker的環境。

  1. Docker Desktop v19.03.13
  2. 啟用了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也有點醜陋
但是自己開發和測試時夠了的,畢竟不是搞運維,安全的運維的工作就交給更專業的人來搞吧。