Docker
首先推荐一个不错的Docker讲解视频链接:https://www.bilibili.com/video/BV1og4y1q7M4
概述:
官网: https://docs.docker.com/
Docker Hub 网站: https://hub.docker.com/
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离,以便快速交付软件。使用Docker,您可以像管理应用程序一样管理基础架构。通过利用Docker快速交付、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行代码之间的延迟
容器:就是将软件打包成标准化单元,以用于开发、交付、部署。
1、容器像是轻量的、可执行的独立软件包,包含软件所需要的所有内容:代码、运行时环境、系统工具、系统库和设置。
2、容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
3、容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
Docker基于L
XC虚拟容器技术
Docker 技术是基于 LXC(Linux container- Linux 容器)虚拟容器技术的。
LXC,其名称来自 Linux 软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得 Linux 用户可以容易的创建和管理系统或应用容器。
cgroup 和 namespace 介绍:
namespace 是 Linux 内核用来隔离内核资源的方式。 通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。
(以上关于 namespace 介绍内容来自https://www.cnblogs.com/sparkdev/p/9365405.html ,更多关于 namespace 的呢内容可以查看这篇文章 )。
CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。
cgroup 和 namespace 两者对比:
两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制。
Docker基本组成
docker里面很重要的三个概念,我们理解了之后才能理解docker整个生命周期
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
Docker安装
查看系统内核和系统信息
命令:
uname - r #查看系统内核版本
cat /etc/os-release #查看系统版本
开始安装Docker
卸载旧版本
[root@iZ1608aqb7ntn9Z /]# yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
No match for argument: docker
No match for argument: docker-client
No match for argument: docker-client-latest
No match for argument: docker-common
No match for argument: docker-latest
No match for argument: docker-latest-logrotate
No match for argument: docker-logrotate
No match for argument: docker-engine
没有软件包需要移除。
依赖关系解决。
无需任何处理。
完毕!
下载依赖安装包
yum install -y yum-utils
配置镜像仓库:
#国外的地址
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo # 设置阿里云的Docker镜像仓库
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
示例
[root]# yum-config-manager \
> --add-repo \
> https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加仓库自:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包
yum makecache fast
#更新索引的时候出错,即centos8没有该参数,解决方法:去掉fast参数
下载docker:一般情况安装社区版
yum install docker-ce docker-ce-cli containerd.io #安装社区版
yum install docker-ee docker-ee-cli containerd.io # 安装企业版
启动docker:
systemctl start docker #启动Docker
docker version #查看当前版本号,是否启动成功
systemctl enable docker #设置开机自启动
Docker卸载:
yum remove docker-ce docker-ce-cli containerd.io #卸载依赖
rm -rf /var/lib/docker #删除资源 . /var/lib/docker是docker的默认工作路径
配置阿里云镜像
执行命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://axvfsf7e.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker