记录一次不成熟的安装docker经历

新手村游历

Posted by 婷 on February 24, 2020 本文总阅读量

最近在学习网易云哈工大李治军老师的计算机操作系统课程,课程中提供了一个实验楼的实验环境,因为自己网速很慢,在实验楼做实验的时候,频繁卡死跟闪退,最终在课程的评论区发现一位大佬的提供的一个docker仓库来模拟实验环境,所以接下来会记录下我安装docker的辛酸史。

什么是docker

在网上看了很多关于docker的解释,第一次接触到这个概念,引用下在知乎解释得不错的几个说法吧。(但我还是懵懵懂懂的)

1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。

2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。

通过以上这些技术的组合,最后的结果就是,绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是其他答主所说的标准化、集装箱的原因所在。

安装docker

寻找镜像

按照前面大佬的github上面的提示的第一步,先来到这个网址(我觉得这位大哥的应该是刚学完Markdown就来写README了吧,这个排版我真的看到强迫症都犯了)

1.png

2.png

点击注册,先注册一个账号。然后登录。

登录后来到左边发现镜像这一栏,点击Docker Hub 然后搜索oslab

3.png

(插播一句,这个Docker Hub个人觉得貌似是一个所有镜像的一个仓库,比如我自己做做了一个Ubuntu的镜像就可上传到这个国外的网站。因为纯小白所以只是默默猜测罢了。)

点击进去,来到这个界面,点击拉取

4.png

之后就出现了这个提示

5.png

既然如此跟着提示先来配置加速器。

配置Docker加速器

点击提示框里面的配置Docker加速器,接着跳到这个镜像站

6.png

不要被这个表象迷惑,继续往下拉。。。(别问我是怎么知道的)

7.png

按照网站提示输入命令:

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

我的系统虽然是Ubuntu18.10,但是问题不大。

8.png

输入后shell会提示你这句话

$ sudo systemctl restart docker.service

别急,这句话后面会用到的。

接下来输入这个命令,个人理解应该是一个能用docker的应用?(这个地方真的绕了好久。。。)

$ sudo apt install docker.io

9.png

装完解压后发现好大,250多MB。

拉取镜像

接下来就把镜像拉取下来啦

$ sudo docker pull yamakasiluke/oslab:oslab

千万千万记得要sudo,别问,说多了都是泪

10.png

然后可能是镜像的下载网址在国外,再加上自己的网速很慢足足下载了半个小时。。。经过半小时后终于下载完了

11.png

在等待的时候,在前面提到的网站搜索oslab的时候发现了这几段很重要的提示。下面会用到。

12.png

13.png

安装完成后,用如下第一个命令可以看到已经安装的docker镜像有哪些,第二个命令应该是设置docker的登录?反正当时因为github的说明及其简单明了,小白的我也在网上大概搜索了一些其他的命令,所以第二个命令也输入了。希望日后回过头来我能明白这个命令是干嘛用的吧。

$ sudo docker images
$docker login

14.png

安装X11和openssh

安装x11

x11是一种远程桌面的应用

$ sudo apt-get install x11vns

15.png

接下来设置密码:

$ x11vnc -storepasswd

16.png

修改配置文件

$sudo vim /lib/systemd/system/x11vnc.service

将下列内容复制到配置文件去

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/<USERNAME>/.vnc/passwd -rfbport 5900 -shared

[Install]
WantedBy=multi-user.target

启动服务

$ sudo systemctl daemon-reload
$ sudo systemctl enable x11vnc.service
$ sudo systemctl start x11vnc.service

可以看到应用多了这个东西

17.png

安装openssh

Ubuntu已经安装了,就不多赘述了。

接下来改下配置,先修改ssh_config里面的端口

输入命令

$ whereis ssh
$ cd /etc/ssh
$ sudo gedit ssh_config

18.png

可以看到配置文件里面有一行#Port 22

19.png

将注释去掉并增加Port 1234

20.png

启动docker

输入命令启动

$ systemctl start docker
$ sudo  docker run -it -p 1234:22 -d --privileged yamakasiluke/oslab:oslab /usr/sbin/sshd -D

21.png

接着键入命令

$ ssh -X root@127.0.0.1 -p 1234

22.png

记得在红色箭头的位置输入密码oslab

退出docker

再开一个终端,输入退出的命令

$ service docker stop

圈出来的红色方框就是证明了docker已经不在运行了。

23.png

快速启动跟停止

每次启动跟结束docker的时候总是要输入特别长又不好记的命令,所以我自己就把这两个命令写成两个脚本

./dockerstart.sh

 #!/bin/bash
systemctl start docker
sudo  docker run -it -p 1234:22 -d --privileged yamakasiluke/oslab:oslab /usr/sbin/sshd -D
ssh -X root@127.0.0.1 -p 1234

25.png

./dockerend.sh

 #!/bin/bash
service docker stop

写完后记得给脚本附权限

$ sudo chmod u+x ./dockerstart.sh
$ sudo chmod u+x ./dockerend.sh