Docker 学习教程【面试+工作】
1. 了解docker
1.1. 思考
我们之前是如何将项目发布到Linux服务器的?
大致步骤如下:
1、 安装jdk
2、 安装tomcat
3、 将项目war包上传到tomcat的webapps下
4、 修改配置文件
5、 启动tomcat
这样看似没问题,其实我们想想,发一台机器还好,这几步就完成了,如果我们要将这个项目发布到N多台机器,那么我们是否需要在每个机器上都进行相同的步骤,并且要进行环境兼容性的测试。
再来看一个例子,我们现在想部署使用一个成熟的产品,这个产品是用go语言开发的,我该如何部署?go语言运行的环境怎么装?这个项目又该如何部署?
还有,一台linux机器上装了很多软件,部署了很多项目,相互之间有干扰怎么办?
如果有一项技术,可以解决以上问题或者是更多的问题,是不是很爽? 那就是Docker(容器)技术。
1.2. Docker简介
官网:https://www.docker.com/ (国内打开比较慢)
1.3. 虚拟化和docker的对比
虚拟化:
docker:
docker的优势在于可以直接使用主机操作系统的资源进行虚拟化。
1.4. 为什么要使用docker?
1.5. 架构
Docker daemon(Docker进程):
Docker进程是部署在linux操作系统上,负责支撑Docker Container的运行以及本地Image的管理。
Docker client:
用户不直接操作Docker daemon,用户通过Docker client访问Docker,Docker client提供pull、run等操作命令。
Docker Image:
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker Container:
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Docker Registry:
仓库分为公开仓库(Public)和私有仓库(Private)两种形式
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
2. 安装docker
我们可以在Centos或者Ubuntu下安装docker,要注意的是,centos6对docker支持的不好,使用docker建议升级到centos7。
docker官方建议使用Ubuntu系统,兼容性更好一些。所以,我们使用Ubuntu系统来学习docker。
Ubuntu系统的安装参考《VMware Workstation 中安装 Ubuntu16.04 虚拟机.docx》
在课前资料中已经提供了“Ubuntu16-64-镜像”,我们直接导入即可学习,该镜像中包含安装了lrzsz、jdk1.8、docker 1.12并且将所有的应用升级到最新。
2.1. centos7
直接通过yum安装即可:
yum install -y docker
2.2. centos6
rpm -ivh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install -y docker-io
service docker start
2.3. Ubuntu 16
apt install docker.io -y
3. 镜像
3.1. 介绍
3.2. 获取镜像
获取镜像通过命令,docker pull 完成:
案例:获取Redis 3.0.0的镜像。
第一步,需要到远程的仓库进行搜索:
https://hub.docker.com/
点击查看详情,查看tag:
找到我们想要的3.0.0,最新的tag可以用latest标识:
执行命令:
docker pull redis:3.0
通过docker images查看镜像:
3.3. 镜像加速
在国内通过docker官方的仓库进行下载镜像是比较慢,这个时候就需要使用加速器了。
在国内,阿里云、163都提供了docker仓库,但是阿里云还提供了加速功能。所以,我们选用阿里云的加速。 163的仓库地址:https://c.163.com/hub#/m/home/
使用阿里云器,需要到阿里云进行注册,获取到自己专属的加速地址,当然也可以使用我的加速地址。(使用加速是无需登录的,所以可以公用)
第一步,打开阿里云网站,点击控制台:
https://www.aliyun.com/
第二步,进行登录,如果没有账号就先注册个账号,登录成功后会跳转到控制台页面,找到容器服务:
第三步,点击“镜像”:
就可以看到有很多的镜像了:
第四步,点击右上角的“镜像仓库控制台”,进入后然后点击“Docker Hub 镜像站点”:
就可以看到你的专属加速地址了:
下面是使用加速地址的方法:
我们采用第2种方法:
再获取镜像时发现快多了。
搜素镜像:
https://dev.aliyun.com/search.html
下载rabbitmq的镜像:
docker pull rabbitmq:3.6.12
下载完成。
3.4. 查询本地镜像
使用docker images 可以看到本地的镜像列表:
3.5. 删除镜像
删除镜像通过命令docker rmi 镜像id完成,需要注意的是,删除镜像前,要删除所有使用到该镜像的容器。
-f参数是强制删除,如果有正在运行的容器使用了该镜像,那么该镜像是不会真正的删除的。
3.6. 搜索镜像
刚刚我们是通过网页进行搜索,其实用过docker的命令也可以搜索,具体如下: