因为一些需要,我花了一天左右的时间学习了一下Docker,以下是我学习docker的总结。
各大Docker教程都用大量的篇幅说明了Docker的优点,Docker的高性能,等等。Docker的各大优点和我们的使用并没有太大的关系,不管Docker用了什么高大上的技术,我们只需要知道这一句话就行了。
Docker特别好。
Docker实际上是一个沙盒,类似于虚拟机。
嗯?
其实,web开发和运维人员一直想着一件事情,就是:
如果开发的环境和部署的环境能一模一样,至少软件环境(比如什么操作系统,操作系统的配置文件等等)能够维持一致,那就可以做到,把开发好的东西搬到服务器上,程序的运行几乎不会受到运行环境的影响,而且部署也非常的方便。
可是开发的Mac或PC要和服务器的运行环境、配置文件一模一样,怎么可能?
然后Docker就是生来解决这个问题的。
它能够高性能地模拟出一个操作系统环境(就像虚拟机一样,可他的资源开销可以忽略不计)
然后,开发人员配置好Docker容器(待会就会知道容器是啥了,??),在服务器上直接跑起来就可以了。
而且似乎还有一个好处,
那就是如果一个服务器运行了多个服务,这些服务的依赖都不一致:
比如A程序需要在Ubuntu16.04运行,B程序却要在Ubuntu18.04运行,而且他们apt的配置完全不一样。
那如果使用了Docker,他们的运行可以互不影响。
换句话说,每个服务就像一个集装箱一样,而宿主系统(真机)就像一个巨型货轮,每个集装箱都不会互相影响,从装箱(开发)到运输(运维)都在这个集装箱内,运输过程中(运维)不需要在乎集装箱(容器)内部的配置等。 (似乎看Docker的图标就是这个样子,嘿嘿)
由于软件版本的更新,安装方法很可能因为版本的变化而变动,最好请参考官方文档的安装模块。
各个Linux发行版本安装Docker的方法都不尽相同,这里以Ubuntu 18.04LTS为例。
其他的发行版本请参考官方文档,例如:
至于Windows和Mac的安装方法,请参考官方文档
在Ubuntu18.04 LTS终端中执行:
wget -qO- https://get.docker.com/ | sh
如果你正在使用普通用户(非ROOT)安装,请在安装完成后把当前用户加入docker用户组
终端中执行
sudo usermod -aG docker ${USER}
尝试启动Docker服务
sudo service docker start
试着运行Hello world
docker run hello-world
如果你看到下面的输出,证明你的安装已经成功
由于DokcerHub国内访问速度比较缓慢,可以修改/etc/docker/daemon.json(如果没有这个文件,请新建)
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
保存后,通过
sudo service docker restart
重启Docker服务,完成安装
打个比方,我们安装系统的时候,我们会用到一个微软或者苹果等公司提供的安装包。
这个安装包,可以给千千万万的电脑安装系统。
装好了的系统的不同电脑,可以安装不同的应用程序,可以更换不同的壁纸主题。
以上这个例子中,软件公司提供的系统安装包就相当于镜像,而不同电脑安装的安装包就相当于容器。
或者换句话说,镜像就相当于面向对象编程中的类,而容器就相当于面向对象编程当中的对象。
再来看下官方的解释(翻译是自行翻译的,错误勿喷),似乎变得好理解多了 ??。
An image is an executable package that includes everything needed to run an application--the code, a runtime, libraries, environment variables, and configuration files.
镜像是一个可执行的程序包,它包含运行应用程序所需的所有内容—代码、运行时、库、环境变量和配置文件。
A container is a runtime instance of an image--what the image becomes in memory when executed (that is, an image with state, or a user process).
容器是镜像的一个运行时实例,也就是映像在执行时在内存中的状态(也就是具有配置状态和用户进程的镜像)。
明日更新。。
原文:https://www.cnblogs.com/chengzi233/p/docker-learning-tips.html