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也有点丑陋
但是自己开发和测试时够了的,毕竟不是搞运维,安全的运维的工作就交给更专业的人来搞吧。

原文地址:https://www.cnblogs.com/xueye9/p/14057262.html