1.为什么会有 Docker?
我们知道一款产品从开发到上线,从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题,尤其是当我们的产品多版本迭代之后,不同环境之间的兼容就会成为一个大问题;
这时 Docker 的出现就解决了这一难题,Docker 的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的的复制过来,不用在担心环境不一致导致“开发时可以正常运行,生成环境就会出问题”,“在我的机器上可以正常运行,在别人的机器上就不能运行”的问题了。
2.什么是docker?
(1)Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不向虚拟机一样,迁移一台虚拟机极其资源;
(2)Docker 是一个开源的应用容器引擎,基于 Go 语言开发。
(3)Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
总之:Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题。
3.docker的优势
(1)运行环境的一致性:Docker 的镜像提供了除了内核之外完整的运行环境,确保了应用运行的一致性;
(2)更快速地启动部署:可以做到秒级,甚至毫秒级的的启动时间。大大节约了开发、测试、部署的时间;
(3)更好的隔离性:每个服务器都是独立运行的、完全隔离的。避免公用的服务器,资源会容易受到其他用户的影响;
(4)弹性伸缩、快速扩展:能够更好的处理集中爆发式的服务器使用压力;
(5)迁移更加方便:“带环境安装”;
(6)持续交付和部署:使用 Docker 可以通过定制镜像来实现持续集成,交付,部署;
4.docker的组成
Docker 是一个 C/S 架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。
名称 | 说明 |
Docker镜像(images) | 用于容器创建的模板。基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。 |
Docker容器(Container) | 容器是独立运行的一个或一组应用,镜像相当于类,容器相当于类的实例 |
Docker客户端(Client) | 通过命令行或其他工具使用Docker API 与Docker的守护进程通信 |
Docker主机(Host) | 一个物理或虚拟机用于执行Docker守护进程和容器 |
Docker守护进程 | 是Docker服务器端进程。负责支撑Docker容器的运行和镜像的管理 |
Docker仓库 DockerHub(Registry) | 用来保存镜像,可以理解代码控制中心的代码仓库,可以将自己的镜像推送仓库上供他人下载 |
5. 基本概念
Docker 包括三个基本概念:
(1)镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
(2)容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计 中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器与镜像的关系类似于面向对象编程中的对象与类。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。也可以这样做类比,镜像理解为静态的程序,而容器理解为运行起来后的进程。容器使用写时复制技术,修改后容器的文件是独立的。
(3)仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
在安装 Docker 之前,先说一下配置,我这里是Centos7
Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。
1.请用root用户登录虚拟机,以保证有足够的权限进行操作。
2.可以使用第三方终端连接虚拟机,这样会让我们配置的效率更高。(推荐CRT)
3.了解: Docker 分为docker SE(社区版,免费)以及docker EE(企业版,收费),因此我们这里安装的是docker SE。
1.查看当前的内核版本
uname -r
我这里是3.10 ,满足条件。
2.使用 root 权限更新 yum 包(生产环境中此步操作需慎重,看自己情况,学习的话随便搞)
yum -y update
这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了
注意
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核
也可以其他的命令,更新yum软件包索引:yum maakecache fast
3.卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
1.安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置 yum 源
设置一个yum源,也就是docker ce软件源(看个人习惯,我喜欢用阿里云的)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (阿里仓库)
3.选择docker版本并安装(安装 docker-ce(社区版))
(1)查看可用版本有哪些
yum list docker-ce --showduplicates | sort -r
(2)选择一个版本并安装:yum install docker-ce-版本号
yum -y install docker-ce-18.03.1.ce ---我是下载了这个版本好根据自己喜欢。
提醒:如果没有指定版本号的话,系统是默认下载最新的版本号
命令:yum -y install docker-ce
(3)查看是否安装成功
查看镜像:docker images
查看版本:docker version
(4)查看Docker的运行状态(一般刚安装好的话都是running状态的)
systemctl status docker
启动命令:systemctl start docker
停止命令:systemctl stop docker
设置开机启动:systemctl enable docker
4.配置Docker镜像加速器(阿里云)
!!因为docker下载镜像是从docker hub中下载,是国外的,所以下载比较慢,可以看作maven
(1)去到阿里云官方网址,找到容器镜像服务:https://www.aliyun.com
(2)进入管理控制台(这里没有开通服务的需要开通一下容器服务)
(3)点击镜像加速器,选择CentOS
(4)(注意每个人的配置加速器的都会随机生成的,所以根据你打开后阿里云镜像加速器提供的代码进行配置)(执行文件后会自动生成daemon.json文件)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kskdqwg1.mirror.aliyuncs.com"]
}
EOF
启动docker后台线程:sudo systemctl daemon-reload
重启docker服务 :sudo systemctl daemon-reload
5.使用hello-world镜像测试docker
(1)docker run运行思维导图
(2)查看镜像
docker images
可以看到刚才在执行docker run hello-world的时候,已经将hello-world镜像拉去到本地镜像中了。
1.启动与停止命令
命令 | 解释 |
systemctl start docker | 启动 Docker |
systemctl stop docker | 停止docker |
systemctl status docker | 查看docker状态 |
systemctl restart docker | 重启docker |
systemctl enable docker | 开机启动 |
docker info | 查看docker概要信息 |
docker --help | 查看docker帮助文档 |
2.镜像相关命令
命令 | 解释 |
docker images | 查看本地存在的镜像 |
docker search 镜像名称 | 从网络中查找需要的镜像 |
docker pull 镜像名称 | 将远程镜像拉取到本地 |
docker rmi [-f] 镜像ID | (强制)删除本地镜像 |
docker rmi -f 镜像名1:TAG 镜像名2:TAG | 删除多个镜像 |
docker rmi -f $(docker images -qa) | 删除所有镜像 |