远程连接服务器中的Docker容器
前言
利用虚拟机(Ubuntu20.04)模拟服务器,在其上利用Docker创建一个容器,为了方便数据传输,直接使用XShell等软件(笔者使用Tabby)对所创建的容器进行连接。
服务器连接
服务器数据:
- ip:192.168.75.138
- port:22
利用Tabby配置后实现连接

安装Docker
docker学习参考:https://yeasy.gitbook.io/docker_practice/
文章末尾有关于docker操作的命令总结。
-
首先在终端输入
1
2sudo apt update
sudo apt-get install ca-certificates curl gnupg lsb-release -
安装证书
1
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
写入软件源信息
1
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
-
安装Docker
1
sudo apt-get install docker-ce docker-ce-cli containerd.io
-
启动Docker
1
2sudo systemctl enable docker
sudo systemctl start docker -
安装工具
1
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-commonsudo docker run --rm hello-world
-
重启Docker
1
sudo service docker restart
-
测试
1
sudo docker run --rm hello-world
如果出现以下回显,则说明Docker安装成功

-
可以查看Docker版本
1
sudo docker version
-
可以查看刚刚创建的镜像
1
sudo docker images

Docker基本操作
镜像操作
Docker Hub 上有大量的高质量的镜像可以使用。
-
通过
docker pull命令获取镜像,具体格式如下:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]注:镜像地址格式一般为
<域名/IP>[:端口号],如果不加默认为Docker Hub(docker.io)。以Ubuntu 23.04为例,从Docker Hub中获取该镜像:

1
sudo docker pull ubuntu:23.04

-
可以通过
docker image ls命令列出已经下载好的镜像1
sudo docker image ls

-
通过
docker image rm <镜像>命令来删除一个没有任何容器依赖的镜像。其中
<镜像>可以是镜像短 ID、镜像长 ID、镜像名或者镜像摘要。以hello-world镜像为例:
1
sudo docker image rm feb
_7.png)
容器操作
-
通过
docker run [OPTIONS] <镜像> [COMMAND]可以基于指定镜像创建容器1
sudo docker run -it -d -p 10000:22 --name containerName_nbw ubuntu:23.04 /bin/bash
一些参数说明:
-i:表示运行容器-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。--name 容器名:创建容器的名字。-d:在后台运行容器并打印容器ID。-p 外部端口:容器端口:完成宿主机和容器之间的端口映射。(以上述为例:将容器的22端口映射到宿主机的10000端口)-v 外部目录:容器目录:完成宿主机和容器之间的目录映射。(例:-v ./hosts:/etc/hosts:ro:将当前宿主机的hosts目录映射到容器的/etc/hosts目录,并且已只读的方式映射)--gpus all:允许容器使用GPU,可使用nvidia-smi命令查看GPU运行状态。--shm-size 32g:设置容器共享内存。
/bin/bash命令:启动一个 bash 终端,允许用户进行交互。 -
通过
docker container ls -a命令查看已经创建的容器1
sudo docker container ls -a

-
通过
docker container start <容器>命令来启动指定的容器,下面以刚创建的容器containerName_nbw为例:1
sudo docker container start aca
-
通过
docker container stop <容器>命令来停止指定的容器,下面以刚创建的容器containerName_nbw为例:1
sudo docker container stop aca
-
通过
docker attach <容器>命令或docker exec [参数] <容器> [COMMAND]命令进入容器进行操作推荐使用
docker exec,原因如下:docker attach:从容器中执行exit,会导致容器的停止。docker exec:从容器中执行exit,不会导致容器的停止。
以容器
containerName_nbw为例:1
sudo docker exec -it aca bash

参数说明:
- 只用
-i参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。 - 当
-i-t参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
-
在容器内通过
exit命令退出容器1
exit

-
通过
docker container rm <容器>命令来删除一个处于终止状态的容器。1
sudo docker container rm aca
- 如果要强制删除一个正在运行的容器,可以添加
-f参数。(例:docker container rm -f aca) - 使用
docker container prune可以删除所有处于终止状态的容器。
- 如果要强制删除一个正在运行的容器,可以添加
远程连接Docker容器
-
首先进入容器,设置root用户密码:
1
passwd

设置密码是ssh连接所需要的。
-
在容器内下载
vim以及openssh1
2
3apt-get update
apt-get install vim
apt-get install openssh-server -
修改
ssh_config配置文件:1
vim /etc/ssh/sshd_config
将
PermitRootLogin prohibit-password注释(默认为注释状态)添加
PermitRootLogin yes
-
重启ssh服务
1
/etc/init.d/ssh restart

-
通过配置Tabby进行远程容器连接


此时输入
exit命令将会直接断开连接。如果从另一个终端执行
docker container stop命令,该链接也会断开。
-
通过工具可以很方便地进行数据传输

后记
关于Docker的一些操作命令总结:
| 命令 | 描述 |
|---|---|
docker version |
查看docker版本 |
docker pull <镜像> |
获取docker镜像 |
docker image rm <镜像> |
删除一个没有任何容器依赖的镜像 |
docker image ls |
查看已经下载好的镜像 |
docker run [OPTIONS] <镜像> [COMMAND] |
基于指定镜像创建容器 |
docker container ls -a |
查看已经创建的容器 |
docker container start <容器> |
启动指定容器 |
docker container stop <容器> |
停止指定容器 |
docker attach <容器> / docker exec [参数] <容器> [COMMAND] |
进入容器进行操作 |
exit |
退出当前容器 |
docker container rm [OPTIONS] <容器> |
删除指定容器 |



