0
点赞
收藏
分享

微信扫一扫

Docker系统学习

源码之路 2022-01-26 阅读 90

Docker学习

之前用过docker,但对其原理不太熟悉,系统整理一下,学习视频

DOCKER


文章目录


一、Docker简介

Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。

在这里插入图片描述
在这里插入图片描述

二、虚拟机和docker区别:

在这里插入图片描述在这里插入图片描述

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

三、仓库/镜像/容器

Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

镜像文件

  • image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
    容器实例
  • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
    仓库
  • 就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。

四、安装

因为docker是基于linux内核的,在window 上运行需要开启虚拟化
在这里插入图片描述

centos
https://docs.docker.com/engine/install/centos/
在这里插入图片描述
替换中国的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

rm -f /var/run/yum.pid
更新yum软件包索引
yum makecache fast

在这里插入图片描述

· 安装DOCKER
· yum -y install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

sudo docker run hello-world

在这里插入图片描述

安装过程
在这里插入图片描述
在这里插入图片描述

卸载

在这里插入图片描述
· systemctl stop docker
· yum remove docker-ce docker-ce-cli containerd.io
· rm -rf /var/lib/docker
· rm -rf /var/lib/containerd

五、docker架构图

在这里插入图片描述在这里插入图片描述

六、docker镜像加速器

阿里云
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、 为什么Docker会比VM虚拟机快

(1)docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟
在这里插入图片描述
在这里插入图片描述

八、docke命令

docker run

在这里插入图片描述

1、帮助启动类命令

· 启动docker: systemctl start docker
· 停止docker: systemctl stop docker
· 重启docker: systemctl restart docker
· 查看docker状态: systemctl status docker
· 开机启动: systemctl enable docker
· 查看docker概要信息: docker info
· 查看docker总体帮助文档: docker --help
· 查看docker命令帮助文档: docker 具体命令 --help
在这里插入图片描述

2、镜像命令

全部镜像
在这里插入图片描述

REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

镜像查询
在这里插入图片描述

在这里插入图片描述

· OPTIONS说明:
· --limit : 只列出N个镜像,默认25个
· docker search --limit 5 redis
在这里插入图片描述

拉取镜像

在这里插入图片描述

在这里插入图片描述

docker system df 查看镜像/容器/数据卷所占的空间

在这里插入图片描述

docker rmi 某个XXX镜像名字ID

在这里插入图片描述
· 删除单个
· docker rmi -f 镜像ID
· 删除多个
· docker rmi -f 镜像名1:TAG 镜像名2:TAG
· 删除全部
· docker rmi -f $(docker images -qa)

3、容器命令

在这里插入图片描述
在这里插入图片描述
· 新建+启动容器

· docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

–name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互);

-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
在这里插入图片描述
在这里插入图片描述
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash

参数说明:
-i: 交互式操作。
-t: 终端。
centos : centos 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:

· 列出当前所有正在运行的容器
· docker ps [OPTIONS]
· OPTIONS说明
OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号
在这里插入图片描述
· 退出容器
· 两种退出方式
· exit
· run进去容器,exit退出,容器停止
· ctrl+p+q
· run进去容器,ctrl+p+q退出,容器不停止

· 启动已停止运行的容器
· docker start 容器ID或者容器名
· 重启容器
· docker restart 容器ID或者容器名
· 停止容器
· docker stop 容器ID或者容器名
· 强制停止容器
· docker kill 容器ID或容器名
· 删除已停止的容器
· docker rm 容器ID
· 一次性删除多个容器实例
· docker rm -f $(docker ps -a -q)
· docker ps -a -q | xargs docker rm

· docker run -d 容器名
· 在大部分的场景下,我们希望 docker 的服务是在后台运行的, 我们可以过 -d 指定容器的后台运行模式。
在这里插入图片描述

前台交互
在这里插入图片描述
后台运行
在这里插入图片描述

日志
· docker logs 容器ID

在这里插入图片描述
· 查看容器内运行的进程
· docker top 容器ID
在这里插入图片描述
· 查看容器内部细节
· docker inspect 容器ID
在这里插入图片描述
· 进入正在运行的容器并以命令行交互
在这里插入图片描述
· exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。

· 重新进入docker attach 容器ID

· attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。

· 推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止

在这里插入图片描述

· docker cp 容器ID:容器内路径 目的主机路径

在这里插入图片描述

在这里插入图片描述

· 导入和导出容器
· export 导出容器的内容留作为一个tar归档文件[对应import命令]
· import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
· 案例
· docker export 容器ID > 文件名.tar

在这里插入图片描述
· cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、docke镜像加载原理

Docker镜像加载原理:
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
在这里插入图片描述
在这里插入图片描述
· Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的

在这里插入图片描述


xshell 连接虚拟机

ifconfig

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十、docke Commit

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

docker commit提交容器副本使之成为一个新的镜像

原始的默认Ubuntu镜像是不带着vim命令的

外网连通的情况下,安装vim

docker容器内执行上述两条命令:
apt-get update
apt-get -y install vim

在这里插入图片描述
新增vim 功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

· 小总结

Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
在这里插入图片描述

十一、docke 本地镜像发布到阿里云

在这里插入图片描述
https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

$ docker login --username= registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/liaozeming/ubtuntu:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/liaozeming/ubtuntu:[镜像版本号]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
$ docker pull registry.cn-hangzhou.aliyuncs.com/liaozeming/ubtuntu:[镜像版本号]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十二、docke 本地镜像发布到本地仓库

1.官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。

2.Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库

docker pull registry
在这里插入图片描述
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
在这里插入图片描述

举报

相关推荐

JAVA系统学习

Scss系统学习

爬虫系统学习

Dart基础系统学习

git系统学习篇

(libubox 系统学习1)-

0 条评论