使用ssh连接 [Docker] Ubuntu容器

最近换了新电脑,开始对新电脑进行了一些基础的配置。由于一些学习上的需求,我需要基于Linux环境写一些c++代码。但是常见的虚拟机软件都需要收费,因此我只能将目光转移到了Docker上。这篇博客主要记录了如何使用docker拉取ubuntu镜像并使用ssh连接容器进行简单的开发工作。

0x00. 在 Mac 上安装 Docker

在这里我主要使用Homebrew进行对Docker的安装。

1
2
3
4
5
# 需要一个Docker daemon开启docker服务,因此这个是必备的
brew install docker --cask

# 又安装一个formulae主要是用于便于在terminal中操作
brew install docker

安装完成后启动台中应该会多了一个Docker的应用程序,点击它以启动Docker服务,正常的话会在菜单栏显示一个docker的图标。
在terminal中测试

1
2
docker version
docker info

如果正常打印输出,则Docker环境安装完成。

0x01. 拉取 Ubuntu 镜像

一些简单命令:

1
2
3
4
5
6
7
8
9
# 查看本地所有镜像
docker images
# 根据name搜索docker hub中的指定镜像
docker search ubuntu

# 列出正在运行中的容器信息
docker container ls
# 列出所有容器信息
docker container ls -a

由于是简单的测试,我们对ubuntu系统的版本并无严格要求,因此直接拉取标签为latest的ubuntu镜像即可。

1
2
3
4
5
6
7
docker pull ubuntu

# 现在可以列一下当前机器上的镜像
docker images
# 可以看到我们刚刚pull下来的ubuntu:latest
# ubuntu latest f3d495355b4e 3 days ago 69.2MB
# 可以看到,它仅有69.2MB,因为镜像中只包含了linux必备的最小内核信息。

0x02. 运行容器并安装sshd

通过运行下列命令,我们可以得到一个实例化的容器。

1
2
3
docker run -it -exec ubuntu /bin/bash
# 执行成功我们可以看到提示符变成了下面这样。
root@9a67c88704a0:/#

接下来便是常规操作了:

1
2
3
4
5
6
7
8
9
10
# 备选:可以先修改一下root密码
passwd
# 我不太喜欢直接用root, 可以先新建一个sudo用户来操作。
useradd -d /home/fan -m -s /bin/bash -g sudo fan
passwd fan
# 最开始并没有sudo命令,我们安装sudo
apt install sudo
apt install vim
# 安装opensshd
apt install openssh-server

我们可以简单配置一下sshd,使其开启公钥访问。

1
2
3
4
5
6
7
8
9
10
# 编辑sshd配置文件,开启公钥访问
vim /etc/ssh/sshd_config

# 主要编辑以下几项(取消其注释):
# PermitRootLogin yes
# PubkeyAuthentication yes
# 之后只需要在用户目录下的.ssh目录下的authorized_key填入所用机器的公钥即可

# 另外,需要检查一下在/run目录下有没有sshd这个目录节点,如果没有则新建
mkdir /run/sshd

0x03. Commit 至新镜像

由以上两步我们基本上完成了对ubuntu的简单定制(即openssh的配置),至此我们可以提交一版用于后续的使用。

1
docker commit -m "some description." container_ID yourImageName:TAG

0x04. Run 新镜像

接着上一步,我们对新提交的镜像进行运行得到一个新的容器。

1
docker run -d -p 10022:22 --name ubuntu_test yourImageName:TAG /usr/sbin/sshd -D 

上述命令我们将容器在后台执行,并映射了本机的10022端口至容器内部的22端口,并将容器运行开始通过/usr/sbin/sshd -D 命令开启sshd服务。

接下来,我们在本地机器上就可以通过ssh进行连接了

1
ssh -p 10022 fan@localhost
题目总结-最长上升子序列问题 Leetcode 32. 最长有效括号
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×