目录

前言

一、Docker 概述

1.虚拟化三种模式

2.虚拟化功能

3.三个层面

4.Docker三要素

二、Docker容器概述

1.底层原理

2.Docker和虚拟化的区别

3.使用docker有什么意义

4.docker的应用场景

5.Docker引擎( Docker Engine)

三、部署20版Docker

1.关闭防火墙策略

2.安装依赖包

3.安装docker-ce社区版

4.网络优化

5.相关命令–查看

四、Docker镜像操作

1.运行镜像

2.镜像工作流程

3.获取镜像

4.查看镜像列表

5.获取镜像信息

6.添加镜像标签

7.删除镜像

8.镜像导出/导入

五、容器操作

1.查询容器

2.创建容器

3.启动容器

4.停止容器

5.进入/退出容器

6.容器的导入/导出

7.删除容器


前言

Docker 是在 Linux 容器里运行应用的一种开源工具,是一种轻量级的虚拟机。把容积化技术做成了标准化平台。

一、Docker 概述

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

1.虚拟化三种模式

全虚拟化(50%)

半虚拟化(软、硬件结合的方式)

直通(以全硬件的方式实现虚拟化的功能)

2.虚拟化功能

在一个操作系统内,模拟多个操作系统

以软件的方式模拟物理设备的功能

3.三个层面

操作系统层

抽象层

内核层

4.Docker三要素

镜像:模板。组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板

容器:基于镜像的一种运行时状态

仓库:存放image镜像模板;仓库分类: 公共仓库一》docker hub,私有仓库registry harbor

二、Docker容器概述

1.底层原理

(1)名称空间( Namespaces):提供容器的隔离工作区的技术

容器完美的实现了6个名称空问隔离(namespace资源隔离-用容器化技术封装)

(2)控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源

控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

mount 文件系统,挂载点
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等

2.Docker和虚拟化的区别

特性 Docker 容器 虚拟机虚拟化
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行)10%-20% 50%左右损失
磁盘占用 50-100MB 3-5G
数量 成百上千,每个进程可控制一个容器 几十个
隔离性 进程级别 操作系统(更彻底)
操作系统 主要支持Linux 几乎所有
封装程度 只封装目标代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离

3.使用docker有什么意义

相同版本的docker引擎

打包成镜像包,拖到另一个操作系统中(把引擎放在镜像中,带着镜像到处跑)

利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了

镜像——>封装的某一时刻的服务/应用状态

容器——>应用跑起来的状态(正常提供服务的状态—运行时running)

4.docker的应用场景

打包应用程序简单部署。

可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。

5.Docker引擎( Docker Engine)

Docker Engine是具有以下主要组件的C/S客户端—服务器应用程序

server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)

CLIENT端: REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口
通过client客户端传入命令,比如以下:
docker run:运行
docker start:开启
docker rm:删除
与sever端进行交互,控制server端进行应命令的操作

三、部署20版Docker

1.关闭防火墙策略

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

2.安装依赖包

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
#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
已加载插件: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

3.安装docker-ce社区版

[root@localhost ~]# yum install -y docker-ce[root@localhost ~]# systemctl start docker         #直接开启docker
[root@localhost ~]# systemctl enable docker[root@localhost ~]# vim /etc/docker/daemon.json    #镜像加速
{"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"]
}

4.网络优化

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1                       #开启路由转发
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:a3:31:c3:f4  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...
[root@localhost ~]# docker images          #查询镜像列表
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

5.相关命令–查看

查看docker版本

[root@localhost ~]# docker -v                #查看docker版本
Docker version 20.10.11, build dea9396
[root@localhost ~]# docker version
Client: Docker Engine - Community            #客户端Version:           20.10.11                 #引擎API version:       1.41                     #引擎版本Go version:        go1.16.9                 #go语言版本Git commit:        dea9396                  #git工具Built:             Thu Nov 18 00:38:53 2021 #创建时间OS/Arch:           linux/amd64              #操作系统Context:           default                  #连接方式Experimental:      trueServer: Docker Engine - Community            #服务端Engine:Version:          20.10.11API version:      1.41 (minimum version 1.12)Go version:       go1.16.9Git commit:       847da18Built:            Thu Nov 18 00:37:17 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

用于显示 docker 的系统级信息,比如内核,镜像数,容器数等

[root@localhost ~]# docker info
Client:                       #客户端Context:    default          #连接方式Debug Mode: false            #调试模块Plugins:                     #插件app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)scan: Docker Scan (Docker Inc., v0.9.0)Server:                       #服务端Containers: 0                #容器Running: 0                  #运行个数Paused: 0                   #基础个数Stopped: 0                  #停止个数Images: 0                    #镜像Server Version: 20.10.11     #版本Storage Driver: overlay2     #存储引擎Backing Filesystem: xfs     #文件系统Supports d_type: true       #支持的类型Native Overlay Diff: true   #外接的连接性文件userxattr: false            Logging Driver: json-file    #加载驱动Cgroup Driver: cgroupfs      Cgroup Version: 1            #版本Plugins:Volume: local               #本地卷Network: bridge host ipvlan macvlan null overlay      #插件支持的网络类型Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2  #运行环境Default Runtime: runc        #默认的运行时环境:运行时容器Init Binary: docker-init     #镜像基础对应的数据containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d         #容器版本runc version: v1.0.2-0-g52b36a2     #运行时容器init version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 8Total Memory: 3.683GiBName: localhost.localdomainID: HJ3R:CJW2:5CGM:FBT7:APLB:OXJS:JBSZ:XOX7:MH7G:AHM2:7ZNB:HPTDDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:              #私有地址网段127.0.0.0/8Live Restore Enabled: falseWARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

四、Docker镜像操作

1.运行镜像

[root@localhost docker]# docker run hello-world   #run的形式运行hello-world镜像
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

2.镜像工作流程

(1)docker client 客户端连接到服务端(服务端是以一个守护进程的形式跑在操作系统里面的)restfulapi 典型的C/S架构

(2)由docker 服务端的守护进程从docker hub 上下载了镜像(ps:服务端会先检查本地系统是否有这个镜像)

(3)服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用(client)

(4)docker 服务端把这些信息流(传递)返回到客户端并展示出来(展示在终端上)

3.获取镜像

docker search 镜像名      (搜索镜像)
docker pull 镜像:版本号  (获取固定版本镜像)
docker pull 镜像名      (不加版本号默认为获取最新版本)
[root@localhost docker]# docker pull centos:7    #默认下载centos7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@localhost docker]# docker pull nginx       #默认下载nginx的最新版
Using default tag: latest
latest: Pulling from library/nginx
eff15d958d66: Pull complete
1e5351450a59: Pull complete
2df63e6ce2be: Pull complete
9171c7ae368c: Pull complete
020f975acd28: Pull complete
266f639b35ad: Pull complete
Digest: sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

4.查看镜像列表

[root@localhost docker]# docker images           #查看有几个镜像
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    ea335eea17ab   7 days ago     141MB
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
centos        7         eeb6ee3f44bd   2 months ago   204MB

5.获取镜像信息

docker inspect 镜像ID
docker image ls -q   #只获取镜像的id号

6.添加镜像标签

[root@localhost docker]# docker tag nginx:latest nginx:lnmp
[root@localhost docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    ea335eea17ab   7 days ago     141MB
nginx         lnmp      ea335eea17ab   7 days ago     141MB     #新的标签,info查不到
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
centos        7         eeb6ee3f44bd   2 months ago   204MB

7.删除镜像

[root@localhost docker]# docker rmi nginx:lnmp
Untagged: nginx:lnmp
[root@localhost docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    ea335eea17ab   7 days ago     141MB
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
centos        7         eeb6ee3f44bd   2 months ago   204MBdocker rmi `docker images -aq`      #删除所有的镜像

8.镜像导出/导入

[root@localhost docker]# cd /opt/
[root@localhost opt]# docker save -o nginx_v1 nginx:latest   #镜像导出
[root@localhost opt]# ls
containerd  nginx_v1  rh[root@localhost opt]# docker load < nginx_v1                 #镜像导入
e1bbcf243d0e: Loading layer [==================================================>]  83.88MB/83.88MB
37380c5830fe: Loading layer [==================================================>]  61.99MB/61.99MB
ff4c72779430: Loading layer [==================================================>]  3.072kB/3.072kB
49eeddd2150f: Loading layer [==================================================>]  4.096kB/4.096kB
1e8ad06c81b6: Loading layer [==================================================>]  3.584kB/3.584kB
8525cde30b22: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest

五、容器操作

一般分为两种容器种类:交互式和守护式容器

交互式容器:一般用于测试、开发、临时性任务等

守护式容器:一般用来跑服务

1.查询容器

docker ps -a      #查看容器

2.创建容器

格式:docker run [选项] 镜像 [命令] [变量]

-i:让容器的标准输入保持打开

-t:分配一个伪终端

-d:后台守护进程的方式运行

[root@localhost opt]# docker create -it nginx:latest /bin/bash
b7b3fc63703ec1ee322cae249d167741981e5bf92d52aa406d323f46e402389d
[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
b7b3fc63703e   nginx:latest   "/docker-entrypoint.…"   56 seconds ago   Created             elated_swirles

3.启动容器

[root@localhost opt]# docker start b7b3fc63703e
b7b3fc63703e
[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
b7b3fc63703e   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 4 seconds   80/tcp    elated_swirles

启动一次性运行容器

持续性运行浪费资源,那么一次性执行如下操作

docker run centos:7 /usr/bin/bash -c ls /
[root@localhost opt]# docker run centos:7 /usr/bin/bash -c ls /   #-c:传递命令参数
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

持续后台运行

docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello; done"  #后台运行centos:7的容器
4873059a924b7a9b5ca422457b8ece4c5b24187d6930c374f52c34011419ddad
[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS     NAMES
4873059a924b   centos:7       "/usr/bin/bash -c 'w…"   45 seconds ago   Up 45 seconds                        kind_kepler
f113fa048b8e   centos:7       "/usr/bin/bash -c ls…"   4 minutes ago    Exited (0) 3 minutes ago             sad_carson
b7b3fc63703e   nginx:latest   "/docker-entrypoint.…"   35 minutes ago   Up 32 minutes              80/tcp    elated_swirles

4.停止容器

docker stop 容器ID             ##停止容器
docker stop b054125b9481        ##停止容器

5.进入/退出容器

使用exec进入的容器状态一定要是运行状态,否则会报错。

docker exec -it 容器ID /bin/bash
exit    #退出容器或者使用run:docker run -it nginx:latest /bin/bash注意:docker run -it 会创建前台进程,但是会在输入exit后终止进程
docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程
docker exec -it 会连接到容器,可以像SSH已有进入容器内部,进行操作,可以通过exit退出容器,但是不影响容器运行状态

6.容器的导入/导出

#容器导出
docker export 容器ID > 备份文件名#容器导入(会生成镜像,而不会创建容器)
cat 备份文件名 | docker import - 仓库名:镜像名

7.删除容器

#删除容器
docker rm 容器ID#强制删除容器(正在运行的容器)
docker rm -f 容器ID#批量删除容器(正则表达)
docker ps -a | awk '{print "docker rm"$1}' | bash#删除非up状态下的
docker rm `docker ps -q`#批量删除exit状态下的容器
for i in `docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i;done created

Docker基本原理相关推荐

  1. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  2. 几张图帮你理解 docker 基本原理及快速入门

    http://hainiubl.com/topics/13 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Goog ...

  3. 【Docker基本原理和常用命令】

    文章目录 Run的流程和Docker的原理 一.回顾Hello Word的流程 二.底层原理 Dockers的基本命令 三.帮助命令 帮助文档的地址: 四.镜像命令 五.容器命令 常用其它命令 Run ...

  4. Docker 基本原理

    Docker 1. Docker结构 2. Docker 安装 2. Hello World镜像run的流程 3. Docker 底层原理 1. Docker结构 镜像(image) docker镜像 ...

  5. 6、docker 数据管理

    很早之前看的文章,进行了简单的排版整理,找不到源地址了,如有侵权,请联系删除. 1.数据卷(docker volume) 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用 ...

  6. Docker技术入门与实战(第2版).

    容器技术系列 Docker技术入门与实战 第2版 杨保华 戴王剑 曹亚仑 编著 图书在版编目(CIP)数据 Docker技术入门与实战 / 杨保华,戴王剑,曹亚仑编著. -2版. -北京:机械工业出版 ...

  7. 3、docker 镜像

    很早之前看的文章,进行了简单的排版整理,找不到源地址了,如有侵权,请联系删除. 镜像是 Docker 的三大组件之一.Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker ...

  8. Docker核心技术学习笔记

    Docker核心技术 文章目录 Docker核心技术 一 .Docker简介 二.Docker安装 前提说明 Docker 的基本组成 安装 centos 7 安装docker 启动hello-wor ...

  9. Docker学习笔记2 -- Docker的基本命令和使用

    目录 Docker学习笔记1 Docker帮助命令 Docker镜像命令 Docker容器命令 Docker commit操作 Docker学习笔记1 Docker学习笔记1 – Docker基本原理 ...

最新文章

  1. 从技术上还原入侵雅虎服务器是怎么一回事
  2. 软考-信息系统项目管理师-信息系统项目管理基础
  3. 设计模式:里氏替换原则
  4. 2018蓝桥杯省赛---java---C---9(小朋友崇拜圈)
  5. java学习(89):Charactor包装类统计
  6. 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐下象棋(记忆化搜索dp,dfs)
  7. neo4j 返回 return
  8. python实现图像分割_Python实现投影法分割图像示例(一)
  9. Software Switching优化
  10. 自学python买什么教材-最好的Python入门教材是哪本?
  11. JAVA操作串口有感
  12. 上海计算机等级考试档案记录,【档案区】上海市高等学校计算机等级考试(一级)考试大纲...
  13. 接口文档要写在概要设计里吗_概要设计报告怎么写
  14. 大觉山漂流,男人的欢笑女人的尖叫
  15. dvt高危患者的护理措施_DVT的预防措施
  16. 计算机开机最快,教你如何让你的电脑快速开机
  17. html div 内部居中。
  18. matlab字符模板在哪,新人求助!车牌识别系统里的字符模版存放路径是哪里
  19. 2.前端性能优化-web性能指标
  20. 动态规划—0-1背包

热门文章

  1. Linux9.3.2
  2. virtio,macvtap,sriov
  3. 软件测试面试题:一份测试计划应该包括哪些内容?
  4. 这些特效即将告别JavaScript,迎来CSS时代!
  5. 表格偶数行和奇数行样式不同
  6. weui和jquery weui关系
  7. 【转】地理信息系统中常用的空间数据模型有哪些?
  8. System.Net.WebException: 未能解析此远程名称
  9. python 面向对象例子(士兵开枪)
  10. 301php.coml,nginx设置域名301跳转