Docker运维教程(1)Docker的基本概念与安装
一、Docker简介
Docker本身并不是容器,而是对容器进行了一种封装,是容器技术的一种简化实现方式。容器技术可以快速将不同版本的应用或者不同应用打包到容器中实现服务快速部署,减少环境不一致带来的问题,而且每个容器之间相互隔离互不影响,并且可以快速移植到其他环境中。通过Docker的Logo也可以看出,它就像是一个集装箱,如果某个装水果的集装箱出了问题,也不会影响到装酒水的集装箱。
二、Docker名词解释
Docker底层是Linux内核所自带的LXC技术,主要包含以下核心:
· CGROUP
负责对Docker各容器之间资源占用进行分配管理。相比传统虚拟化来说Docker容器会共享宿主机的内核资源,而且少了系统层面的开销,不需要为每个容器去虚拟化一个完整的系统,而且即使是下载一个Centos系统镜像也才200M(底层会使用宿主机的内核,也因此容器的内核是无法升级的,必须和宿主机一致)
· Namespace
负责容器之间资源隔离的实现。不同的Namespace隔离的资源不同。UTS用于隔离主机名和域名,要求系统内核版本2.6;IPC用于隔离消息队列、共享内存、信号量,要求系统内核版本2.6;PID用于隔离进程编号,要求系统内核版本2.6;NETWORK用于隔离网络设备和端口等,要求系统内核版本2.6;MOUNT用于隔离文件系统与挂载点,要求系统内核版本2.4;USER用于隔离用户和用户组,要求系统内核版本3.8,这也是为什么要在Centos 7使用Docker的原因。需要注意的是登陆容器后看到的root通常不是真正的root,比如要用那个用户去cat /etc/passwd,那一样会报出权限错误。UTS、NET、IPC这三个名称空间通常是共享给各容器使用,这样可以更方便的实现多容器使用同端口的需求。否则需要DNAT、SNAT两次网络转换才可以
· Docker镜像
可以理解为模板文件,也可以想象成平时装系统用的.iso文件
· Docker容器
镜像运行之后成为docker容器,就像程序运行后变成进程
· Docker仓库(registry)
镜像仓库,就像github一样可以存放很多做好的镜像。比如需要LAMP环境可以去公有仓库里看看有没有合适的镜像,有的话直接下载就可以使用,无需配置。也可以自建仓库,存放适合内部使用的镜像。Docker采用分层构建机制,最底层为bootfs,上层为rootfs。在bootfs中包含了bootloader和kernel,它的作用就是用于引导和启动容器,在容器启动完成后就会卸掉bootfs节约内存,rootfs则是容器的根文件系统。而且不同的镜像如果使用到了相同的内容,只会存一份,节约了磁盘空间。Aufs是Docker最初使用的容器文件系统,而现在最主流的则是overlay2(已经从3.18版本开始被Linux内核合并)、devicemapper(CentOS7早期所使用)
三、安装Docker
1、安装新版本之前清理旧版本及其依赖组件
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2、配置Docker的官方YUM源
官方仓库可以通过安装手册(https://docs.docker.com/engine/install/)查看,此外还有很多像阿里云、清华大学第三方仓库也可以安装Docker。Docker从V1.13之后分为了CE和EE两个分支,其中docker-ce为社区免费版,docker-ee为商业收费版
#安装yum-utils包后可以通过yum-config-manager来快捷设置仓库地址 yum install -y yum-utils #配置仓库地址 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #安装docker-ce yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3、启动Docker,如果使用过程中提示"Is the docker daemon running on this host"都说明是服务没有启动
systemctl start docker
4、通过docker version和docker info命令可以查看版本和详细信息。如启动了多少个容器、默认的仓库地址、下载了多少镜像、文件系统等
[root@centos1 ~]# docker version Client: Docker Engine - Community Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:32:04 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:31:02 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
5、由于安全问题,非root用户默认是无法执行docker相关命令的,可以通过修改用户组的方式进行授权
groupadd docker usermod -G docker tanglu
四、Docker镜像仓库加速
Dcoker镜像仓库的作用和操作系统YUM仓库类似,只不过里面存放的是各种镜像而不是系统软件。如系统镜像、Redis镜像、MySQL镜像等。由于Docker默认使用的镜像仓库是国外的docker hub,在拉取镜像的时候会存在过慢的问题,所以建议配置镜像加速服务。配置方法也很简单,只需要在Docker服务端配置文件/etc/docker/daemon.json(该文件默认不存在,需自行创建)并自定义仓库地址即可,仓库地址可以通过https://github.com/DaoCloud/public-image-mirror进行查找
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
systemctl daemon-reload
systemctl restart docker
docker info #关注Registry Mirrors输出是否生效
文章评论