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服务:

<span class="token function">sudo</span> /etc/init.d/ssh stop <span class="token function">sudo</span> /etc/init.d/ssh start
<span class="token function">sudo</span> /etc/init.d/ssh stop <span class="token function">sudo</span> /etc/init.d/ssh start 
sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start

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

<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> <span class="token function">ssh</span> <span class="token function">sudo</span> systemctl disable <span class="token function">ssh</span> <span class="token function">sudo</span> systemctl start <span class="token function">ssh</span> <span class="token function">sudo</span> systemctl stop <span class="token function">ssh</span> <span class="token function">sudo</span> systemctl status <span class="token function">ssh</span>
 <span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> <span class="token function">ssh</span>  <span class="token function">sudo</span> systemctl disable <span class="token function">ssh</span>  <span class="token function">sudo</span> systemctl start <span class="token function">ssh</span>  <span class="token function">sudo</span> systemctl stop <span class="token function">ssh</span>  <span class="token function">sudo</span> systemctl status <span class="token function">ssh</span> 
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/
https://docs.docker.com/engine/install/ubuntu/ 
https://docs.docker.com/engine/install/ubuntu/

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

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

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

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

<span class="token function">sudo</span> docker run -itd --name<span class="token operator">=</span><span class="token string">"xxx"</span> -p <span class="token number">8090</span>:8090 ImageID<span class="token punctuation">(</span>改为你的<span class="token punctuation">)</span> /bin/bash <span class="token function">sudo</span> docker run -itd -v 宿主机目录:容器目录<span class="token punctuation">(</span>code:/code<span class="token punctuation">)</span> -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span><span class="token punctuation">(</span>多线程运行程序可选<span class="token punctuation">)</span> --gpus all --name<span class="token operator">=</span><span class="token string">"xxx"</span> ImageID /bin/bash <span class="token function">sudo</span> docker run -itd -v /home/b605/code:/code<span class="token punctuation">(</span>宿主机根目录<span class="token punctuation">)</span> -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span> --gpus all --name<span class="token operator">=</span><span class="token string">"cc"</span> db15446df90b /bin/bash <span class="token function">sudo</span> docker run -itd -v /home/b605/code:/code -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span> --gpus all --name<span class="token operator">=</span><span class="token string">"torch1.9.1"</span> --restart<span class="token operator">=</span>always f5bc49447a8e /bin/bash
<span class="token function">sudo</span> docker run -itd --name<span class="token operator">=</span><span class="token string">"xxx"</span> -p <span class="token number">8090</span>:8090 ImageID<span class="token punctuation">(</span>改为你的<span class="token punctuation">)</span> /bin/bash <span class="token function">sudo</span> docker run -itd -v 宿主机目录:容器目录<span class="token punctuation">(</span>code:/code<span class="token punctuation">)</span> -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span><span class="token punctuation">(</span>多线程运行程序可选<span class="token punctuation">)</span> --gpus all --name<span class="token operator">=</span><span class="token string">"xxx"</span> ImageID /bin/bash <span class="token function">sudo</span> docker run -itd -v /home/b605/code:/code<span class="token punctuation">(</span>宿主机根目录<span class="token punctuation">)</span> -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span> --gpus all --name<span class="token operator">=</span><span class="token string">"cc"</span> db15446df90b /bin/bash <span class="token function">sudo</span> docker run -itd -v /home/b605/code:/code -p <span class="token number">10789</span>:22 --shm-size<span class="token operator">=</span><span class="token string">"1g"</span> --gpus all --name<span class="token operator">=</span><span class="token string">"torch1.9.1"</span> --restart<span class="token operator">=</span>always f5bc49447a8e /bin/bash 
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服务,必须要添上这三种:

<span class="token function">vim</span> /etc/ssh/sshd_config 去掉 Port <span class="token number">22</span> 前面的井号 去掉 ListenAddress <span class="token number">0.0</span>.0.0 前面的井号 去掉 ListenAddress :: 前面的井号 去掉 PermitRootLogin <span class="token function">yes</span> 前面的井号 将 UsePAM <span class="token function">yes</span> 修改为 UsePAM no <span class="token number">1</span>. 你docker映射的端口号:比如Port <span class="token number">8090</span> <span class="token number">2</span>. PermitRootLogin <span class="token function">yes</span> <span class="token number">3</span>. RSAAuthentication <span class="token function">yes</span> <span class="token punctuation">(</span><span class="token number">2</span>3放在一起就好了 <span class="token number">3</span>或者不放) <span class="token number">4</span>. <span class="token function">passwd</span>
<span class="token function">vim</span> /etc/ssh/sshd_config 去掉 Port <span class="token number">22</span> 前面的井号 去掉 ListenAddress <span class="token number">0.0</span>.0.0 前面的井号 去掉 ListenAddress :: 前面的井号 去掉 PermitRootLogin <span class="token function">yes</span> 前面的井号 将 UsePAM <span class="token function">yes</span> 修改为 UsePAM no <span class="token number">1</span>. 你docker映射的端口号:比如Port <span class="token number">8090</span> <span class="token number">2</span>. PermitRootLogin <span class="token function">yes</span> <span class="token number">3</span>. RSAAuthentication <span class="token function">yes</span> <span class="token punctuation">(</span><span class="token number">2</span>和3放在一起就好了 <span class="token number">3</span>或者不放) <span class="token number">4</span>. <span class="token function">passwd</span>  
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

<span class="token function">apt-get</span> <span class="token function">install</span> openssh-server
<span class="token function">apt-get</span> <span class="token function">install</span> openssh-server 
apt-get install openssh-server

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

<span class="token function">mkdir</span> -p /var/run/sshd /usr/sbin/sshd -D <span class="token operator">&</span>
<span class="token function">mkdir</span> -p /var/run/sshd /usr/sbin/sshd -D <span class="token operator">&</span>  
mkdir -p /var/run/sshd /usr/sbin/sshd -D &

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

<span class="token function">netstat</span> -tunlp <span class="token function">apt-get</span> <span class="token function">install</span> net-tools
<span class="token function">netstat</span> -tunlp   <span class="token function">apt-get</span> <span class="token function">install</span> net-tools 
netstat -tunlp apt-get install net-tools

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

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

<span class="token function">sed</span> -ri <span class="token string">'s/session required pam_loginuid.so/#session required pam_loginuid.so/g'</span> /etc/pam.d/sshd
<span class="token function">sed</span> -ri <span class="token string">'s/session required pam_loginuid.so/#session required pam_loginuid.so/g'</span> /etc/pam.d/sshd 
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文件中:

<span class="token function">mkdir</span> root/.ssh <span class="token function">vim</span> /root/.ssh/authorized_keys
<span class="token function">mkdir</span> root/.ssh <span class="token function">vim</span> /root/.ssh/authorized_keys 
mkdir root/.ssh vim /root/.ssh/authorized_keys

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

<span class="token function">vi</span> /run.sh <span class="token function">chmod</span> +x run.sh
<span class="token function">vi</span> /run.sh <span class="token function">chmod</span> +x run.sh 
vi /run.sh chmod +x run.sh

run.sh脚本内容:

<span class="token shebang important">#!/bin/bash</span> /usr/sbin/sshd -D
<span class="token shebang important">#!/bin/bash</span> /usr/sbin/sshd -D 
#!/bin/bash /usr/sbin/sshd -D

最后,退出容器:exit

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

docker commit fc1 sshd:ubuntu
docker commit fc1 sshd:ubuntu 
docker commit fc1 sshd:ubuntu

这样就保存啦!

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

docker run -p <span class="token number">10022</span>:22 -itd --name<span class="token operator">=</span><span class="token string">'xxx'</span> sshd:ubuntu /run.sh
docker run -p <span class="token number">10022</span>:22 -itd --name<span class="token operator">=</span><span class="token string">'xxx'</span> sshd:ubuntu /run.sh 
docker run -p 10022:22 -itd --name='xxx' sshd:ubuntu /run.sh

启动成功!

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

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

<span class="token builtin class-name">echo</span> <span class="token string">'export PATH="/opt/conda/bin:<span class="token environment constant">$PATH</span>"'</span><span class="token operator">>></span>~/.bashrc <span class="token builtin class-name">source</span> ~/.bashrc //设置CUDA的路径 <span class="token builtin class-name">export</span> <span class="token assign-left variable">LD_LIBRARY_PATH</span><span class="token operator">=</span><span class="token variable">$LD_LIBRARY_PATH</span>:/usr/local/cuda-11.1/lib64 <span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token environment constant">$PATH</span>:/usr/local/cuda-11.1/bin <span class="token builtin class-name">export</span> <span class="token assign-left variable">CUDA_HOME</span><span class="token operator">=</span><span class="token variable">$CUDA_HOME</span>:/usr/local/cuda-11.1
<span class="token builtin class-name">echo</span> <span class="token string">'export PATH="/opt/conda/bin:<span class="token environment constant">$PATH</span>"'</span><span class="token operator">>></span>~/.bashrc <span class="token builtin class-name">source</span> ~/.bashrc //设置CUDA的路径 <span class="token builtin class-name">export</span> <span class="token assign-left variable">LD_LIBRARY_PATH</span><span class="token operator">=</span><span class="token variable">$LD_LIBRARY_PATH</span>:/usr/local/cuda-11.1/lib64 <span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token environment constant">$PATH</span>:/usr/local/cuda-11.1/bin <span class="token builtin class-name">export</span> <span class="token assign-left variable">CUDA_HOME</span><span class="token operator">=</span><span class="token variable">$CUDA_HOME</span>:/usr/local/cuda-11.1 
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 分享