ubuntu:16.04下docker 配置anaconda python运行环境、远程ssh连接全解——完美避开docker容器配置的神坑

其实docker容器本身就是一个linux环境的系统,然后用户配置运行环境在里面以供在任何机器上都很方便的使用。

1. Linux下安装docker
首先输入su,进入root模式,然后输入apt-get install docker,出现如下所示的页面则完成了docker的安装。
命令如下:

su
apt-get install docker

具体的执行结果页面如下所示:

sunstrong@ubuntu:~$ su
Password: 
root@ubuntu:/home/sunstrong# apt-get install docker
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  docker
0 upgraded, 1 newly installed, 0 to remove and 30 not upgraded.
Need to get 12.2 kB of archives.
After this operation, 65.5 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial/universe amd64 docker amd64 1.5-1 [12.2 kB]
Fetched 12.2 kB in 0s (129 kB/s)  
Selecting previously unselected package docker.
(Reading database ... 221651 files and directories currently installed.)
Preparing to unpack .../docker_1.5-1_amd64.deb ...
Unpacking docker (1.5-1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up docker (1.5-1) ...

2. 创建一个纯净的ubuntu镜像,并启动该镜像作为容器,具体的命令如下:

docker pull ubuntu:16.04

然后输入:

docker images

具体的执行结果页面如下所示:

root@ubuntu:/home/sunstrong# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
anaconda             3.7                 ad36c71edc68        2 hours ago         4.6GB
sunstrong/anaconda   3.7                 ad36c71edc68        2 hours ago         4.6GB
ubuntu               16.04               9499db781771        2 weeks ago         131MB
pytorch/pytorch      latest              f8a1d10ae3d7        6 weeks ago         4.65GB

然后是启动该镜像作为一个新的容器,启动容器,并安装ssh,vim,anaconda,wget等。
第一步:启动镜像,命令如下:

docker run -itd --name ubuntu-test ubuntu:16.04 /bin/bash

其中ubuntu-test为容器名,ubuntu:16.04为镜像名
运行结果如下:

root@ubuntu:/home/sunstrong# docker run -itd --name ubuntu-test ubuntu:16.04 /bin/bash
980d1306032ec1e2ee7c6a919d8d87062ca6aeb665e8fd7daf9c4e15bb17c43d

查看正在运行的容器,命令如下:

docker ps -a

这一步运行结果如下:

root@ubuntu:/home/sunstrong# docker ps -a
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                         NAMES
980d1306032e        ubuntu:16.04             "/bin/bash"         2 minutes ago       Up 2 minutes                                      ubuntu-test
586f3a03b62f        sunstrong/anaconda:3.7   "/bin/bash"         2 hours ago         Up 2 hours          192.168.80.129:8080->22/tcp   anaconda37

然后进入容器,命令如下:

docker exec -it 980d1306032e /bin/bash

这一步运行结果如下:

root@980d1306032e:/#

其中root代表容器内部直接是由root权限的,下面开始安装一些必备软件
3.在容器内安装软件
安装wget,ssh,anaconda,vim等,输入命令如下:

apt-get update
apt-get install wget
apt-get install openssh-server
apt-get install vim

其中ssh服务默认非root所以需要改一下文件参数,具体的步骤如下:

vim /etc/ssh/sshd_config

输入i,进行插入,然后找到PermitRootLogin prohibit-password这一行,输入#注释掉,然后添加一行PermitRootLogin yes,最终的文件修改结果如下所示:

#PermitRootLogin prohibit-password 
PermitRootLogin yes

然后按esc,再输入:wq,保存该文件并退出

安装Anaconda,命令如下:

wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh

具体的执行结果如下所示:

root@980d1306032e:~# wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
--2020-12-11 07:49:10--  https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.131.3, 104.16.130.3, 2606:4700::6810:8303, ...
Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.131.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 530308481 (506M) [application/x-sh]
Saving to: 'Anaconda3-2019.10-Linux-x86_64.sh'
Anaconda3-2019.10-Linux-x86_64 100%[==================================================>] 505.74M  4.43MB/s    in 1m 49s  
2020-12-11 07:50:59 (4.63 MB/s) - 'Anaconda3-2019.10-Linux-x86_64.sh' saved [530308481/530308481]

然后输入ls

cd ~
ls

结果如下:

root@980d1306032e:~# ls 
Anaconda3-2019.10-Linux-x86_64.sh

再输入:

bash Anaconda3-2019.10-Linux-x86_64.sh

此后一直enter就行,然后输入yes,默认原始设置
最后修改环境变量,输入命令如下:

echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

输入conda list就会发现安装成功了。
4.将容器映射到本地端口
先将容器制作成新镜像,具体的命令如下:

docker commit 980d1306032e new_ubuntu

其中980d1306032e为镜像id,然后再启动容器并映射到本地端口,由于docker容器中ubuntu已经默认开启22号端口,所以只需要将22号端口映射到本地的一个端口上就行,**这里的ip地址一定要写全(**也就是本地机器的ip,大部分教程都没写全,如果不知道可以用ifconfig进行查询):

docker run -itd --name sunstrong_unbuntu --privileged=true -p 192.168.80.129:80:22 new_ubuntu /bin/bash

具体的运行结果如下:

root@ubuntu:~# docker run -itd --name sunstrong_unbuntu --privileged=true -p 192.168.80.129:80:22 new_ubuntu /bin/bash
a2ef02e82e6dd65305dd6eb73339f7ed68afd5add1b33e1e4bc0c332ba6251e1
root@ubuntu:~#

远程登录注意:
如果需要登录,一定要进入docker容器,并开启ssh服务,具体的命令为:service ssh start,否则会一直显示连接失败