• 一、容器和虚拟化区别:
    • 1、结构上的区别
    • 2、特性上的区别
  • 二、Docker的三个概念
  • 三、Docker的使用场景
  • 四、Docker 引擎(Docker Engine)
  • 五、原理
  • 六、名称空间(Namespaces)
  • 七、部署docker
  • 八、docker命令
    • 查询版本
    • 查看镜像
    • 查看容器
    • 镜像操作
      • 搜索镜像
      • 下载镜像
      • 获取镜像信息
      • 添加镜像标签
      • 删除镜像
      • 镜像导出
      • 镜像导入
    • 容器操作
      • 创建容器
      • 创建并启动容器(一次性)
      • 停止容器
      • 进入容器
      • 持续后台运行
      • 获取容器信息
      • 容器导出
      • 容器导入
      • 删除容器
      • 查看所有容器资源占用

一、容器和虚拟化区别:

1、结构上的区别

KVM全虚:,由kvm组件做虚拟化资源,vmm为抽象层以软件形式,由QUMU调用内核供给虚拟机,或者叫寄居型

EXSI半虚,完整性架构在裸金属上的,可以直接利用内核物理性能,

容器

2、特性上的区别


vm需要模拟出来宾操作系统,

不同点 container VM
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行) 50%左右损失
磁盘占用 MB GB
可运行数量 成百上千 一般几十台
隔离性 进程级别 系统级别(更彻底)
操作系统 主要支持Linux 几乎所有
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离
环境搭建 可以在创建镜像前搭建 只能在平台后搭建

二、Docker的三个概念

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
docker 镜像
docker hub 公共仓库
docker-harbor 上传下载方便、安全 私有仓库

github: github ——》404——》延迟gitlab:
svn
gitee
码云 代码仓库
语雀

使用docker有什么意义(优势)
docker引擎统一了基础设施环境-docker容器环境(引擎)
docker引擎统一了程序打包(装箱)方式docker 镜像
docker引擎统一了程序部署(运行时环境)方式-docker 容器

三、Docker的使用场景

打包应用程序简单部署
可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云

持续集成和持续交付(CI/CD) :开发到测试发布
部署微服务
提供 PAAS 产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker (K8S)属于PAAS}

lAAS:基础设施即服务 基础设施就是裸金属
PAAS:平台即服务 例如nginx
SAAS :应用即服务 例如lnmp

四、Docker 引擎(Docker Engine)

Docker Engine是具有以下主要组件的客户端-服务器应用程序:
服务器是一种长期运行的程序,称为守护程序进程( dockerd命令REST API,它指定程序可用来与守护程序进程进行通信并指示其操作的接口。
命令行界面(CLI)客户端(docker命令)。

客户端传入docker指令/命令—》通过restAPI—》进入内核中的docker-server端—》由server端进行处理
—》通过rest API返回给docker-client端进行展示

客户端作用
1用于使用命令传入方式与restapi对接
2展示docker-server返回结果

五、原理


1命令传入
2本地查找
3如果没有就去registry上去下载
4镜像拉过来后给容器

六、名称空间(Namespaces)

底层原理就是cgroup和namespaces。
Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
Docker Engine在 Linux上使用以下名称空间:该pid命名空间:进程隔离(PID:进程ID)。
容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)
mount文件系统,挂载点—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user操作进程的用户和用户组
pid进程隔离
uts主机名和主机域以及内核
ipc信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net网络设备、网络协议栈、端口等

小结: Dcoker是基于容器技术的轻量级虚拟化解决方案
docker是容器技术,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、api等) c/s

七、部署docker

先设置环境

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

安装依赖包

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云源

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@localhost yum.repos.d]# cat docker-ce.repo


这里根据需要开启各个源进行安装
安装docker-ce社区版

[root@localhost ~]# yum install -y docker-ce

安装完毕后在ETC下是没有docker文件夹得

添加镜像加速器

此时重启服务

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

docker文件夹出现

[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# ls
key.json

这时再添加镜像加速器

[root@localhost docker]# ls
daemon.json  key.json


json可以被调用
面试题(生产经验)
#docker-server端配置文件daemon. json
{
“graph” : “/data/docker”, 数据目录/var/lib/docker
“storage-driver” :“overlay2”, 存储引擎
早期的时候存储引擎使用的是aufs——》overlay2 存储引擎
“insecure-registries”:[ “registry.access.redhat.com” , “quary.io”] 私有仓库
" registry-mirrors" :[ “https://q”] 镜像加速
“bip” :“172.7.5.1/24”, ☆☆☆☆ docker网络
“exec-opts” :[ “native.cgroupdriver=systemd”], 启动时候的额外参数(驱动,k8s使用)
“live-restore”:true 当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)Ⅰ
以上是建议的配置项
docker容器l网络生产经验
docker 的网络建议和宿主机的IP"对照”
比如宿主机 10.2.5.6容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置

网络优化

[root@localhost ~]# vim /etc/sysctl.conf

[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

测试

[root@localhost ~]# systemctl status docker


查看serever端镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

查看有多少容器

[root@localhost ~]# docker ps -a                                  显示所有容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps                                     显示在运行容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker run hello-world

八、docker命令

查询版本

docker version和docker info

[root@localhost ~]# docker version
Client: Docker Engine - Community                                     客户端的相关软件版本Version:           20.10.12API version:       1.41                                                  api版本Go version:        go1.16.12                                             go的版本Git commit:        e91ed57Built:             Mon Dec 13 11:45:41 2021OS/Arch:           linux/amd64Context:           defaultExperimental:      trueServer: Docker Engine - CommunityEngine:Version:          20.10.12API version:      1.41 (minimum version 1.12)Go version:       go1.16.12Git commit:       459d0dfBuilt:            Mon Dec 13 11:44:05 2021OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.4.12GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5drunc:                                                                     运行时环境版本Version:          1.0.2GitCommit:        v1.0.2-0-g52b36a2docker-init:                                                              初始化版本Version:          0.19.0GitCommit:        de40ad0
[root@localhost ~]# docker info
Client:Context:    defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Docker Buildx (Docker Inc., v0.7.1-docker)scan: Docker Scan (Docker Inc., v0.12.0)Server:Containers: 1                                        容器数量                                 Running: 0                                          正在运行的Paused: 0                                            暂停的                                                      Stopped: 1                                           停止的        Images: 1                                             1个镜像Server Version: 20.10.12Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlay                                                                       网络的几种方式Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5drunc version: v1.0.2-0-g52b36a2init version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-693.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 3.686GiBName: localhost.localdomainID: 7QA4:7HBQ:UDQ3:OZVR:Y4JX:4JED:WDOS:HKSB:BARH:BJ2H:IWGN:FC3BDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: false
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
adc2e307cae2   hello-world   "/hello"   19 minutes ago   Exited (0) 19 minutes ago             funny_albattani

查看镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@localhost ~]# docker images -q                                     只查看镜像ID
605c77e624dd
75d052ec3a22

查看容器

[root@localhost ~]# docker ps -a                                  显示所有容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps                                     显示在运行容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

镜像操作

搜索镜像

[root@localhost ~]# docker search nginx


可以打开https://hub.docker.com/查找镜像


可以点右边的复制键复制到虚拟机里可以直接下载了

下载镜像

[root@localhost ~]# docker pull nginx:1.12-perl

[root@localhost ~]# docker pull nginx


获取镜像信息

docker inspect 镜像名称:标签 或者 镜像id

[root@localhost ~]# docker inspect nginx:latest






添加镜像标签

dacker tag 镜像名称:原标签 镜像名称:现标签

[root@localhost ~]# docker tag nginx:latest nginx:lnmp


可以看出除了ID不一样以外其他都一样,可以相当于做了个软链接

删除镜像

docker rmi 是docker rm images的简写 不加i就是删除容器
docker rmi镜像名称
docker rmi镜像标签
docker rmi docker images -q


不能删除正在运行的镜像,得先把已退出的容器删除后再删除镜像,或者-f强制删除;

[root@localhost ~]# docker rmi hello-world:latest
Untagged: hello-world:latest                                                解除标签
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f      解除加密ID
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412     删除镜像1
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359   删除镜像2


如果删除的是之前添加标签的镜像则只会删除该镜像,源镜像没有变化(相当于删除软链接)

[root@localhost ~]# docker rmi nginx:latest
Untagged: nginx:latest


docker rmi docker images -q批量删除的是镜像的ID


镜像导出

docker save -o 文件名 镜像名

[root@localhost ~]# docker save -o nginx nginx:lnmp

镜像导入

docker load < 文件名

[root@localhost ~]# docker load < nginx



场景:没有网络情况下,方便携带

容器操作

创建容器

docker create -it nginx : latest / bin/ bash
-i 让容器的标准输入保持打开
-t分配一个伪终端
-d 后台守护进程的方式运行

[root@localhost ~]# docker create -it nginx:latest /bin/bash
9b211ea34a93e0cf3a10fa0f7629108e5f191de8dd25a9d6eb89d1a92bee503f


但是并不是运行状态,所以需要启动
docker start 容器ID

[root@localhost ~]# docker start 9b211ea34a93
9b211ea34a93

创建并启动容器(一次性)

docker run

[root@localhost ~]# docker run centos:7 /usr/bin/bash -c ls /


停止容器

docker stop

[root@localhost ~]# docker stop 9b211ea34a93
9b211ea34a93

进入容器

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@4e84e6a9599f /]#


同时我们用

[root@localhost ~]# watch -n 1 docker ps -a


并且在容器内部也可进行操作

退出可以用exit 或者ctrl+d

[root@4e84e6a9599f opt]# exit
exit
或者
[root@2d33b645ca4d /]# exit                          ctrl+d


exec只支持正在运行中的容器,否则会报错

[root@localhost ~]# docker exec -it test /bin/bash
Error response from daemon: Container 5c478467cde25a683d7fa28bfc9796ba58ad1d9b2dbab4cda100eb43c8b0da6c is not running
[root@localhost ~]# docker exec -it 597a85bda99b /bin/bash


docker run -it会创建前台进程,但是会在输入exit后终止进程。
docker attach会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。(但会因为SSH方式有安全隐患,减少操作)

持续后台运行

因为像centos镜像,它开启后如果不使用,非常占资源,所以docker会自动关闭它,那么如果我们要求centos一直开着那么我们要给它一条命令

[root@localhost ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
597a85bda99b2235cab8bbca73b521f934a78f2386d8133abce9c5cadf88c15c
[root@localhost ~]# docker run -d --name test centos:7 /bin/bash      #--name  给容器命名
5c478467cde25a683d7fa28bfc9796ba58ad1d9b2dbab4cda100eb43c8b0da6c

获取容器信息

docker inspect 容器名称或者容器ID

[root@localhost ~]# docker inspect amazing_johnson
或者
[root@localhost ~]# docker inspect 597a85bda99b





桥接两个不同的名称空间

容器导出

docker export > 文件名

[root@localhost ~]# docker export 597a85bda99b >centos_7

容器导入

docker import 容器名称 指定的镜像名称

[root@localhost ~]# docker import centos_7 centos:lnmp
sha256:b5d921e971ec308c7cf1a348640cd21cd391753f4f2ca18cf48f5496fc68ae48

删除容器

[root@localhost ~]# docker ps -q                    只显出运行中的id
597a85bda99b
[root@localhost ~]# docker ps -aq                   显出所有容器ID
5c478467cde2
597a85bda99b
2d33b645ca4d
4e84e6a9599f
fe5ce8981cea
9b211ea34a93
[root@localhost ~]# docker rm `docker ps -aq`


所以要加上-f

[root@localhost ~]# docker rm -f 597a85bda99b
597a85bda99b
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#批量删除容器(正则匹配)

docker ps -a / awk '{print "docker rm "$1}' | bash

#批量删除"exit"状态(指定状态)的容器

for i in `docker ps -a` | grep -i exit | awk '{print $1}' ; do dockerrm -f $i ; done

查看所有容器资源占用

[root@localhost ~]# docker stats

doctor技术基础相关推荐

  1. [JAVA EE] JPA技术基础:完成数据列表的删除

    接上一篇:[JAVA EE] JPA技术基础:完成数据列表显示 本章完成数据列表的删除 修改 UserController.java package com.example.demo.controll ...

  2. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  3. 软件工程技术基础-(软件复用技术)

    软件可重用问题,包括源程序代码重用.静态库重用和组建重用. 源程序代码重用是直接将其他项目或系统开发完成的代码复制过来,直接使用. 限制源程序代码重用技术使用的关键因素是要考虑代码的语言实现,以及源代 ...

  4. 计算机与网络技术基础试题及答案,计算机与网络技术基础试题及答案(2003年10月)...

    计算机与网络技术基础试题及答案(2003年10月) 以下是部分内容预览,注意图片没有显示出来,WORD里是有的.请到下载区下载完整的试题及答案. 全国2003年10月高等教育自学考试 计算机与网络技术 ...

  5. 北航计算机软件基础试题,北航2010计算机软件技术基础试题与答案.pdf

    北航2010计算机软件技术基础试题与答案 北京航空航天大学 2009 -2010 学年第 1 学期 计算机软件技术基础 期末考试试卷 (20 10 年 1 月 3 日)宋体五号字 班级:_______ ...

  6. 计算机常见知识获取方法,计算机信息处理技术基础知识

    计算机信息处理技术基础知识 信息技术概况 1.集成电路的基本知识(20世纪50年代) 集成电路是微电子技术的核心. 分类:①小规模.中规模.大规模.超大规模.极大规模(包含的电子元件) ②双极型.金属 ...

  7. 计算机硬件技术基础东北大学,东北大学19春学期《计算机硬件技术基础》在线作业123答案...

    <东北大学19春学期<计算机硬件技术基础>在线作业123答案>由会员分享,可在线阅读,更多相关<东北大学19春学期<计算机硬件技术基础>在线作业123答案(1 ...

  8. 50 xen虚拟化技术基础、xen虚拟化技术进阶

    01 xen虚拟化技术基础 配置环境: node1 192.168.1.61 CentOS6.6 [root@node1 ~]# uname -r 2.6.32-504.el6.x86_64 [roo ...

  9. 路由设计技术基础(Fundamentals of routing design technology)

    路由设计技术基础(Fundamentals of routing design technology) UDP(User Datagram Protocol) FUNCTION TCP(Transmi ...

最新文章

  1. 用计算机怎么开启音乐模式,XP开机音乐怎么设置?如何设置电脑开机音乐?
  2. oracle em命令行配置及界面按钮乱码问题解决方法
  3. JVM内存压缩开启/不开启各占几个字节
  4. 数据结构与算法(六)-背包、栈和队列
  5. 哈罗单车怎么关锁还车_好象被哈罗单车套路了,提醒大家小心
  6. js原生实现点击事件只创建一个元素
  7. 【HDU - 5890】Eighty seven(bitset优化背包)
  8. 敏感词过滤,并实现替换
  9. 读《scikiit-learn机器学习》第七章_决策树
  10. 能源在线监测管理系统
  11. SVN如何回滚到指定版本
  12. C语言 三角函数 时钟周期,三角函数的周期公式
  13. MT7921方案WIFI6无线网卡驱动编译方法
  14. 外地驾照迁入北京流程
  15. 炒股杠杆-AI量化交易
  16. 漫画版python_不能错过的Python漫画
  17. 基于Java+MySQL 实现(Web)动态人脸识别的认证识别系统【100010315】
  18. qnap直接用linux命令,QNAP之如何使用第三方百度网盘挂到nas上下载
  19. duck typing java_Duck typing
  20. 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的

热门文章

  1. python语音转文字库_有没有语音转文字的APP?
  2. 【概率论与数理统计】猴博士 笔记 p36-37 协方差、相关系数、不相关、相互独立时的期望和方差
  3. QQ留言代码,网页QQ留言
  4. UVA The Sultan's Successors
  5. HNOI2018退役记
  6. 开学“收心”指南来了
  7. 《基于移动互联的智慧健康社区系统的研发》 CSCD
  8. Linux最最最常用命令!
  9. 解谜:为何用了9-Patch背景图后自带Padding属性?
  10. springboot整合dubbo时连接zookeeper——天坑