远程连接服务器中的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
容器操作
-
通过
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
以及openssh
1
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] <容器> |
删除指定容器 |