Ubuntu部署Docker指南

由于项目的需求,学习了以下如何在Ubuntu的服务器上面装好Docker,并用SSH远程连接。下面是调用成功的调试顺序~

(1). 更新源列表

打开"终端窗口",输入"sudo apt-get update"–>回车–>“输入当前登录用户的管理员密码”–>回车,就可以了。
(2).安装openssh-server

在终端中输入: sudo apt-get install openssh-server

(3) 查看 查看ssh服务是否启动

打开"终端窗口",输入"sudo ps -e |grep ssh"–>回车–>有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"–>回车–>ssh服务就会启动。这里注意,第一句代码之后,弹出有sshd 才算ssh服务开启,如果什么都没有,但ssh服务就没有开启。

SSH服务 另外的启动方式:sudo /etc/init.d/ssh start

(4)SSH配置服务相关

配置相关:
ssh-server配置文件位于/etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。

添加端口就是在#Port 22的下一行 加上Port 8080。 8080可以写成你想要的其他端口

把配置文件中的”PermitRootLogin without-password”加一个”#”号,把它注释掉,再增加一句”PermitRootLogin yes” (可能没有PermitRootLogin without-password这行命令,在其相似的句子后面,加上PermitRootLogin yes 即可。 这是ssh服务开启root用户ssh权限。

然后重启SSH服务:

sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start 

这里再记录一些SSH其他的常用命令:(Ubuntu18.04和20.04亲测好用)

 sudo systemctl enable ssh  sudo systemctl disable ssh  sudo systemctl start ssh  sudo systemctl stop ssh  sudo systemctl status ssh 

此时,你就可以用ssh远程连接你的这台ubuntu服务器了。

https://docs.docker.com/engine/install/ubuntu/ 

只需要执行到:Upgrade Docker Engine就ok了,此时Docker就装好咯!

1.自己尝试的部署SSH 成功方案

装好Docker 之后 你需要pull镜像,运行容器balabala等等。

这里分享一下,我经常用的run命令:

sudo docker run -itd --name="xxx" -p 8090:8090 ImageID(改为你的) /bin/bash sudo docker run -itd -v 宿主机目录:容器目录(code:/code) -p 10789:22 --shm-size="1g"(多线程运行程序可选) --gpus all --name="xxx" ImageID /bin/bash sudo docker run -itd -v /home/b605/code:/code(宿主机根目录) -p 10789:22 --shm-size="1g" --gpus all --name="cc" db15446df90b /bin/bash sudo docker run -itd -v /home/b605/code:/code -p 10789:22 --shm-size="1g" --gpus all --name="torch1.9.1" --restart=always f5bc49447a8e /bin/bash 

然后用sudo docker attach 或者是 sudo docker exec命令连接docker容器(这里就不多说命令了,菜鸟教程上有很多解释)

连接上Docker容器之后,你可以通过passwd来修改当前容器的连接密码(也就是说,你在远程ssh连接需要输入的密码,用户名一般是root)

OK,到这里,你依然不能SSH远程连接Docker容器,还差最后一步:在Docker 容器内部装好Openssh-Server并开启就好了。

按照第一步重新安装好SSH服务,安装过程中可能不需要加sudo了。

需要多说的一句话是,容器内可能什么都没有安装,要编辑ssh的信息,你可能需要现在容器内安装vim编辑器,,apt-get install vim,另外,在最后配置SSH的时候,容器内的SSH服务,必须要添上这三种:

vim /etc/ssh/sshd_config 去掉 Port 22 前面的井号 去掉 ListenAddress 0.0.0.0 前面的井号 去掉 ListenAddress :: 前面的井号 去掉 PermitRootLogin yes 前面的井号 将 UsePAM yes 修改为 UsePAM no 1. 你docker映射的端口号:比如Port 8090 2. PermitRootLogin yes 3. RSAAuthentication yes (2和3放在一起就好了 3或者不放) 4. passwd  

最后重启以下容器内的ssh服务,就可以实现远程访问啦!

另外,想要docker自启动之后,容器内的ssh服务也自动开启,可以将ssh开启的服务命令写入.bashrc 文件中省事, 也就是service ssh start 写入到.bashrc 文件中.

2. Docker书上提供的方案

(1) 首先安装openssh-server

apt-get install openssh-server 

(2)安好之后,如果需要正常启动SSH服务,则目录 /var/run/sshd 必须存在。下面手动创建他,并启动ssh服务。

mkdir -p /var/run/sshd /usr/sbin/sshd -D &  

此时,查看容器的22端口(SSH服务默认监听的端口),可见此端口已经处于监听状态:

netstat -tunlp   apt-get install net-tools 

加监听端口,可以参考第一个SSH配置中的内容(Port xxx)

修改SSH服务的安全登陆配置,取消pam登陆限制:

sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd 

在root用户目录下创建.ssh目录,并复制需要登陆的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa命令生成)到authorized_keys文件中:

mkdir root/.ssh vim /root/.ssh/authorized_keys 

创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:

vi /run.sh chmod +x run.sh 

run.sh脚本内容:

#!/bin/bash /usr/sbin/sshd -D 

最后,退出容器:exit

保存镜像:
将退出的容器用docker commit 命令保存为一个新的sshd:ubuntu的镜像。

docker commit fc1 sshd:ubuntu 

这样就保存啦!

下次就可以使用这个镜像跑别的容器啦!

docker run -p 10022:22 -itd --name='xxx' sshd:ubuntu /run.sh 

启动成功!

在宿主主机或者其他主机上,可以通过SSH访问10022端口来登陆容器!

有时候服务器端的开发环境配置好了,但SSH远程连接的时候没有办法进入Conda环境,显示“conda:未找到命令 ”。
只需要在SSH终端中输入:

echo 'export PATH="/opt/conda/bin:$PATH"'>>~/.bashrc source ~/.bashrc //设置CUDA的路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64 export PATH=$PATH:/usr/local/cuda-11.1/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.1 

就可以啦!

原文链接:https://blog.csdn.net/weixin_44345913/article/details/120388867

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享