docker容器

Docker便用G00g1e公司推出WG0语言进行开友实现,基于操作条统内孩中时Cgroup(贷源控制)NameSpace(资源隔离)与0verlayFS(数据存储)等技术,实现基于操作系统层面的(应用)虚拟化技术,
最初实现是基于LXC技术,从0.7版本以后开始去除LXC,转而使用自行开发的libcontainer(容器管理技术)。

容器技术发展架构图:

image-20240902083945201

1
2
3
4
5
6
7
8
9
10
11
为什么有云平台:因为方便快捷,还便宜
购买物理机,不仅还要买服务器,还要租机房

VMware Workstation:虚拟化工具,启动虚拟机的,使用的编排工具是的:Vcenter server
KVM:虚拟化工具,启动虚拟机的 使用的编排工具是的:OpenStack
Docker:容器化工具,容器运行时 使用的编排工具是的:(docker自己写的编排工具)Docker-swarm、mesos、kubernetes(最灵活的,常用的)
K8s,谷歌的产品

编排工具的作用:使部署虚拟化的产品变成一个集群

下载一个工具 tightVNC ,就可以连接虚拟机里面创建的虚拟机了

容器与虚拟机对比
传统虚拟化和docker分层对比

image-20240902092008550

容器化产品概念

1
2
3
4
5
#内核的技术  (系统是在内核的基础上封装出来的)
Namespace:名称空间,命名空间(作用是:资源隔离)起一个容器就是起一个进程,然后再做资源隔离
Cgroup:资源控制、资源计算

docker是调用内核接口的工具

VM虚拟化和Docker特性对比

特性 Docker VM
启动速度 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生单机支持上千个容器 弱于原生
系统支持量 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离

容器化产品的概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Container Runtime:容器运行时
- docker
- CRI-O
- containerd

## 内核技术
Namespace:名称空间,命名空间(资源隔离)https://man7.org/linux/man-pages/man7/namespaces.7.html

Cgroup:资源控制、资源计算 https://man7.org/linux/man-pages/man7/cgroups.7.html

资源限制:例如设定任务指定内存
优先级分配:比如跟任务分配的CPU时间,片数,磁盘IO,带宽大小来控制任务的优先级
资源统计:统计CPU,内存,IO等资源使用时长,该功能比较适合用于计费
任务控制:cgroup可以对任务进行 运行,挂起,恢复等操作

1、Docker的三个概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#images(镜像)
Docker镜像可以看做是一个特殊的文件系统,除了提供容器运行时所需要的程序、库、资源、配置文件以外,还包合了一些为运行时,准备的配置参数(匿名卷,环境变量,用户...),镜像是不可更改的
Docker容器的储存方式:通过overlayFS文件系统进行储存
upper
lower
merge

为了环境的统一,方便统一管理

#Container(容器)
容器的定义和镜像,几乎是一模一样,唯一区别在于容器的最上面那一层是可读可写的。
(类似于用Docker1起的一台虚拟机)
理解:一个容器就是一台虚拟机


#Repository(仓库)
上传镜像,存放镜像

仓库是Docker用来存放镜像的地方,类似于我们之前常用的代码仓库。
通常一个仓库会包含,同一个软件,不同版本的镜像
我们可以通过<仓库名>:<标签>格式来指定具体使用哪个版本的镜像,如果不给标签,那么默认以Latest作为默认标签

#docker的仓库有2种
1、Harbor 图形化仓库
2、Registry 命令行仓库

2、Docker的组成

Docker是C/S结构的服务 docker clientdocker server

Docker客户端是Docker用户与Docker交互的主要方式
当使用Docker命令行运行命令时,Docker客户端将这些命令发送给服务端,服务端执行这些命令Docker命令使用DockerAPI
Docker客户端可以与多个服务端进行通讯

image-20240902110827668

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Docker的客户端:
- 命令行 docker
- 图形化 dashboard(UI界面)


用户———>使用docker客户端———>调用DOcker的接口———>连接到DOcker server——>调用内核Namespace、cgroup


#稳定的版本
docker 19.3
k8 1.19

为什么
下了一个nginx容器,想让他变成web服务器

3、部署DOcker

1、安装docker-ce

环境准备

主机名 ip 角色
docker01 10.0.0.101 / 172.16.1.101
docker02 10.0.0.102 / 172.16.1.102
docker03 10.0.0.103 / 172.16.1.103
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1、卸载之前安装的DOcker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、换源
[root@docker01 ~]# vim /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

[root@docker01 ~]# sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3、下载docker
[root@docker01 ~]# yum install -y docker-ce docker-ce-cli containerd.io

如果下载的慢,把base源里面的updat关闭

[root@docker03 ~]# vim /etc/yum.repos.d/CentOS-Base.repo

image-20240902114920501

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
4、启动
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker

5、查看docker信息
[root@docker01 ~]# docker info

Docker Root Dir: /var/lib/docker #Docker的储存目录(工作目录)

6、启动docker就会生成一个socket文件
[root@docker01 ~]# ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Sep 2 12:17 /var/run/docker.sock


7、加速镜像
[root@docker01 ~]# mkdir -p /etc/docker
[root@docker01 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF


备用加速:
{
"registry-mirrors":["https://docker.1panel.live", "https://hub.rat.dev/", "https://docker.chenby.cn", "https://docker.m.daocloud.io"]
}

[root@docker01 ~]# systemctl daemon-reload
[root@docker01 ~]# systemctl restart docker

8、测试拉取nginx镜像
[root@docker02 ~]# docker pull nginx
等待2分钟才拉取的下来

[root@docker01 ~]# docker pull nginx:alpine (最小的操作系统alpine)
[root@docker01 ~]# docker pull nginx:latest
[root@docker01 ~]# docker pull busybox

9、查看拉取的镜像
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine 0f0eda053dc5 2 weeks ago 43.3MB
nginx latest 5ef79149e0ec 2 weeks ago 188MB
busybox latest 87ff76f62d36 15 months ago 4.26MB
centos 7 eeb6ee3f44bd 2 years ago 204MB