1 前置相关介绍
1.1 虚拟化技术
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。
1.1.1 虚拟化技术优点
- 一台主机上可同时运行多个系统或应用,提高系统资源的利用率。
- 降低成本、方便管理和容错容灾等好处。
1.1.2 虚拟化技术分类
- 硬件虚拟化(暂不了解)
- 软件虚拟化
- 完全虚拟化:虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。例如:VMware Workstation、VirtualBox等。
- 硬件辅助虚拟化:利用硬件(如CPU)辅助支持处理敏感指令来实现完全虚拟化的功能。例如:VMware Workstation、KVM等。基于X86体系结构的虚拟化技术有Inter-VT和AMD-V。
- 操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。例如:容器相关技术就是基于此发展的。
1.2 容器技术
有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。Docker就是使用容器技术的典型代表。
1.2.1 传统虚拟化 & Docker容器
- 传统虚拟化需要额外的虚拟机管理程序和虚拟机操作系统;而Docker容器则不需要,比传统方式更轻捷、启动更快。
- 传统虚拟化依赖硬件层支持,而Docker容器仅依赖宿主操作系统。
1.2.2 Docker概述
官网地址: https://www.docker.com/
文档地址: https://docs.docker.com/develop/ (docker文档非常详细!)
仓库地址: https://hub.docker.com/ (国外网站慢)
- Docker是基于Go语言实现的开源容器项目。
- Docker项目已加入Linux基金会,并遵循Apache 2.0协议,全部开源代码均在https://github.com/docker项目仓库进行维护。
- 现有主流操作系统、各大云服务商均提供对Docker的支持。
- Docker的构想是要实现“Build, Ship and Run Any App, Anywhere”,即通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件级别的“一次封装,处处运行”。
1.2.3 Docker在开发和运维中的优势
- 更快速的交付和部署:使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;测试和运维人员可以直接使用完全相同的环境来部署代码。
- 更高效的资源利用:运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
- 更轻松的迁移和扩展:Docker被各大云服务提供商、操作系统所支持。几乎可以在任何平台上运行。
- 更简单的更新管理:使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
2 Docker组成结构与相关名词概述
2.1 docker组成结构
- 客户端:Client
- 服务器:DOCKER_HOST
- 仓 库:Registry
2.2 名词解释
2.2.1 镜像(image)
- docker镜像就相当于一个模板,可以通过这个模板来创建容器服务。例如:tomcat镜像 == > run(运行)== > tomcat01容器(提供访问服务)
- 一个镜像可以创建多个容器,每个容器中运行项目和提供服务。
2.2.2 容器(container)
- docker利用容器技术,独立运行一个或一组应用,通过镜像来创建。
- 容器可以启动、停止、删除。
2.2.3 仓库(repository)
- 仓库用来存放镜像的位置。例如:GitHub与开源项目的关系。
- 仓库分为公有仓库和私有仓库,docker官方仓库为Docker Hub,国内也有阿里云、网易云等。
3 Docker安装
各版本Docker安装包下载地址: https://download.docker.com/
3.1 Linux(yum源安装)
- 查看Linux服务器上是否安装了Docker
# 查看是否安装Docker
yum list installed | grep docker
- 查看服务器Linux版本,是否符合安装docker的基本环境
# 查看Linux内核版本(docker要求系统内核要在3.10以上)
uname -r
3.10.0-1127.13.1.el7.x86_64
# 查看系统版本(CentOS 7以上)
cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
注:64位系统,并且内核版本为3.10以上,符合安装要求
- 安装Docker
# 1. 卸载旧版本的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装相关依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 为yum添加国内阿里源仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看可安装docker版本(ce版是社区版,ee版是企业版)
yum list docker-ce --showduplicates
# 更新软件包索引
yum makecache fast
# 安装docker
yum install docker-ce docker-ce-cli containerd.io
- 启动docker,并查看docker状态,验证docker是否安装成功
# 启动docker
systemctl start docker
# 查看docker运行状态
systemctl status docker
# 拉取hello-world镜像,运行
docker run hello-world
如图所示表示docker正在运行,说明docker安装成功。
注:此时能够拉取hello-world镜像,并运行输出“Hello form Docker!”,表示docker能够正常工作了。
# 查看下载的hello-world镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
3.2 离线安装包安装
- 将离线包上传至服务器
- 解压离线包,并将解压包拷贝到/usr/bin目录下
# 解压docker包
tar -xvf docker-18.06.3-ce.tgz
# 将解压docker目录拷贝到/usr/bin目录下
cp docker/* /usr/bin/
- 配置docker服务
# 编辑生成docker服务文件
vim /etc/systemd/system/docker.service
# 文件内容如下
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
# 将新建的文件配置执行权限
chmod +x /etc/systemd/system/docker.service
- 启动服务,并测试状态
# 重载unit配置文件
systemctl daemon-reload
# 启动docker服务
systemctl start docker
# 设置docker服务开机启动
systemctl enable docker.service
# 查看docker服务状态
systemctl status docker
# 查看docker版本
docker -v
此时docker服务正常运行。
3.3 配置阿里云镜像加速
- 登录阿里云,找到容器镜像服务
- 找到镜像加速器
- 配置使用
# 1. 进去/etc/docker目录
cd /etc/docker
# 2. 创建daemon.json文件,并输入如下内容
{
"registry-mirrors": ["加速器URL地址"]
}
# 3. 重载服务配置
systemctl daemon-reload
# 4. 重启docker服务
systemctl restart docker
# 5. 测试是否生效(正确输出加速器URL地址表示正常)
docker info | grep aliyun
# 6. 使用拉取命令测试加速器是否生效
注:下载速度快的很!
4 Docker卸载
4.1 Linux(yum源安装方式)
- 查看docker是否运行,若运行中关闭服务
# 查看docker运行状态
systemctl status docker
# 关闭docker服务
systemctl stop docker
- 查看yum安装的docker文件包,并删除
# 1. 查看安装的docker包
yum list installed |grep docker
# 2. 卸载docker
yum remove docker-ce docker-ce-cli containerd.io
# 3. 查看rpm源文件是否还有docker相关,如果有则继续删
rpm -qa |grep docker
- 删除与docker相关的目录和文件
# 1. 查找docker相关文件或目录
whereis docker
docker: /etc/docker
# 2. 删除docker目录
rm -rf docker
# 3. 删除docker相关资源目录
rm -rf /var/lib/docker
注:此时docker完全卸载完成了。