docker学习笔记【一】
程序员文章站
2022-06-13 19:51:05
...
docker 概念:
1. 架构
虚拟机需要为每个VM安装操作系统,docker则共享一个操作系统。同时虚拟机启动后,操作系统自身占用cpu,内存等资源,而docker只相当于操作系统的一个进程,自身消耗资源小。
这里提一下进程概念,在linux中进程都有个pid, 然后他创建的子进程的父pid就是父进程的pid.杀死父进程pid, 会同时销毁所有子pid. docker正是利用这种关系来管理进程。docker daemon是所有容器的父进程,docker 容器启动时,都会启动一个进程,这个进程号在容器内部对应的是1号进程, 在容器外部就是docker daemon创建的一个普通进程。在docker 容器中还可以创建其他的进程,但是这些进程都是容器启动时进程的子进程,虽然在容器内部没有从属关系。linux在容器外可以杀死这个普通进程,但是在容器内是无法杀死1号进程的。
2.仓库,镜像,容器
镜像是只读的,多个名称相同版本不同的镜像放在同一仓库中(有点类似svn分项目管理)。一个注册服务器(registry)可以放置多个仓库(repository)。使用docker命令可以获取,运行,生成,提交镜像。docker运行镜像生成容器。
docker容器采用写时复制技术,容器中是一个分层结构,底部是bootfs, 加载了镜像,在最上面有个读写层,在需要修改时,docker从只读的镜像层读取文件到读写层,然后进行修改,这个文件overrite了只读层的文件,整个构成了新的容器。
docker使用 commit 命令将新容器生成镜像。
3.CS结构
docker 是CS结构,通常CS运行在同一台服务器中, 命令行交互就是C, 服务端S常驻内存,管理着一个个容器(进程)。
4.操作系统
docker 共享宿主机的操作系统,但是为什么我们使用docker容器的时候,往往要先下载一个基础镜像,如centos,ubuntu之类的。其实linux操作系统分两部分(内核空间和用户空间),docker共享的是宿主机的内核空间kernel. kernel是由bootfs启动装载的。而docker基础镜像打包的是用户空间,包括/dev,/proc,/usr/,/etc等目录及一些命令工具,这部分称为rootfs。因此,可以看到同一个宿主机可以运行不同的基础镜像,主要是因为不同的基础镜像对应的linux kernel是一样的,只是rootfs不同而已。这也很好理解,我们下载的基础镜像为什么比一个操作系统会小很多,因为他只下载了其中的用户空间而已。
------------------------------------------------------------------------------------------------------------------
docker 安装:
1. 准备环境: centos 7 以上版本, 内核>3.10 的稳定版, 64位操作系统
2. 使用root权限将 yum更新到最新(如果是root登录就不用sudo了)
3. 安装需要的软件包
4. 添加yum源
网上建议使用国内的镜像,速度会快一点
5. 安装docker
经过漫长的安装过程后
6.添加开机启动
7.验证安装是否成功(查看client和service信息)
至此安装完毕,还是很顺利的。
------------------------------------------------------------------------------------------------------------------
第二天,不幸的事情发生了,运行docker run hello-world,发生了这个bug
https://github.com/docker/for-linux/issues/597
只好卸载,换个版本试试。
卸载过程:
1. 列出安装的docker
2. 卸载已安装的内容
3.清理docker的安装目录
------------------------------------------------------------------------------------------------------------------
再次安装:
1. 查看仓库中所有docker的版本
2. 安装指定的版本
3.启动docker服务
4.再次运行hello-world
运行run命令,如果本地没有镜像,会从远程仓库pull一个到本地。显示成功运行。
1. 架构
虚拟机需要为每个VM安装操作系统,docker则共享一个操作系统。同时虚拟机启动后,操作系统自身占用cpu,内存等资源,而docker只相当于操作系统的一个进程,自身消耗资源小。
这里提一下进程概念,在linux中进程都有个pid, 然后他创建的子进程的父pid就是父进程的pid.杀死父进程pid, 会同时销毁所有子pid. docker正是利用这种关系来管理进程。docker daemon是所有容器的父进程,docker 容器启动时,都会启动一个进程,这个进程号在容器内部对应的是1号进程, 在容器外部就是docker daemon创建的一个普通进程。在docker 容器中还可以创建其他的进程,但是这些进程都是容器启动时进程的子进程,虽然在容器内部没有从属关系。linux在容器外可以杀死这个普通进程,但是在容器内是无法杀死1号进程的。
2.仓库,镜像,容器
镜像是只读的,多个名称相同版本不同的镜像放在同一仓库中(有点类似svn分项目管理)。一个注册服务器(registry)可以放置多个仓库(repository)。使用docker命令可以获取,运行,生成,提交镜像。docker运行镜像生成容器。
docker容器采用写时复制技术,容器中是一个分层结构,底部是bootfs, 加载了镜像,在最上面有个读写层,在需要修改时,docker从只读的镜像层读取文件到读写层,然后进行修改,这个文件overrite了只读层的文件,整个构成了新的容器。
docker使用 commit 命令将新容器生成镜像。
3.CS结构
docker 是CS结构,通常CS运行在同一台服务器中, 命令行交互就是C, 服务端S常驻内存,管理着一个个容器(进程)。
4.操作系统
docker 共享宿主机的操作系统,但是为什么我们使用docker容器的时候,往往要先下载一个基础镜像,如centos,ubuntu之类的。其实linux操作系统分两部分(内核空间和用户空间),docker共享的是宿主机的内核空间kernel. kernel是由bootfs启动装载的。而docker基础镜像打包的是用户空间,包括/dev,/proc,/usr/,/etc等目录及一些命令工具,这部分称为rootfs。因此,可以看到同一个宿主机可以运行不同的基础镜像,主要是因为不同的基础镜像对应的linux kernel是一样的,只是rootfs不同而已。这也很好理解,我们下载的基础镜像为什么比一个操作系统会小很多,因为他只下载了其中的用户空间而已。
------------------------------------------------------------------------------------------------------------------
docker 安装:
1. 准备环境: centos 7 以上版本, 内核>3.10 的稳定版, 64位操作系统
2. 使用root权限将 yum更新到最新(如果是root登录就不用sudo了)
sudo yum update
3. 安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4. 添加yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
网上建议使用国内的镜像,速度会快一点
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5. 安装docker
sudo yum -y install docker-ce
经过漫长的安装过程后
6.添加开机启动
sudo systemctl start docker sudo systemctl enable docker
7.验证安装是否成功(查看client和service信息)
docker version
至此安装完毕,还是很顺利的。
------------------------------------------------------------------------------------------------------------------
第二天,不幸的事情发生了,运行docker run hello-world,发生了这个bug
https://github.com/docker/for-linux/issues/597
只好卸载,换个版本试试。
卸载过程:
1. 列出安装的docker
yum list installed | grep docker
2. 卸载已安装的内容
yum -y remove docker-ce-cli.x86_64 yum -y remove docker-ce.x86_64 yum -y remove containerd.io.x86_64
3.清理docker的安装目录
rm -rf /var/lib/docker
------------------------------------------------------------------------------------------------------------------
再次安装:
1. 查看仓库中所有docker的版本
sudo yum list docker-ce --showduplicates | sort -r
2. 安装指定的版本
sudo yum -y install docker-ce-18.03.1.ce-1.el7.centos
3.启动docker服务
sudo service docker start
4.再次运行hello-world
docker run hello-world
运行run命令,如果本地没有镜像,会从远程仓库pull一个到本地。显示成功运行。
上一篇: 为了权妃的死,朱棣株连宫女3000多人