一、Docker概述
1.1 Docker是什么?
- Docker是一个开源的运用容器引擎,根据go语言开发并遵守了apache2.0协议开源。
- Docker是在Linux容器里运转运用的开源东西,是一种轻量级的“虚拟机”。
- Docker的容器技术能够在一台主机上轻松为任何运用创立一个轻量级的、可移植的、自给自足的容器。 (Docker是创立容器的东西。运用运转在容器中,每个容器都有一致的运转环境,而且每个容器都彼此阻隔,所以能够在任何主机中运转。即完成“一次封装,到处运转”的目的。)
1.2 Docker的规划主旨
- Docker的规划主旨:Build,Ship and Run Any ,Anywhere
- 即经过对运用组件的封装、发布、布置、运转等生命周期的办理,到达运用组件级别的“依次封装,到处运转”的目的,这儿的组件,既可所以一个运用,也可所以一套服务,乃至是一个完整的操作体系。
1.3 Docker容器的优点
-
容器化越来越受欢迎,因为容器是:
- 灵敏:即使是最复杂的运用也能够集装箱化
- 轻量级:容器利用并同享主机内核。
- 可交换:能够即时布置更新和晋级
- 便携式:能够在本地构建,布置到云,并在任何当地运转
- 可扩展:能够增加并主动分发容器副本(一个主机内装置多个同服务的容器进行运转)
- 可堆叠:能够笔直和即时堆叠服务(一个主机装置多个不同运用的容器,组成集群服务)
1.4 容器与虚拟机的区别
特性 | Docker容器 | 虚拟机 |
---|---|---|
发动速度 | 秒级 | 分钟级 |
核算能力损耗 | 简直无 | 损耗最多到达50%左右 |
体系内核 | 同享宿主机内核 | 具有独立的操作体系内核 |
性能 | 接近原生(依托于本机环境) | 弱于原生(独立创立环境) |
体系支撑量(单独一台主机) | 上千个 | 几十个 |
阻隔性 | 资源阻隔/约束 | 完全阻隔 |
1.5 容器支撑的技术
-
容器在内核中支撑2种重要技术:
- docker容器本质便是宿主机的一个进程,docker是经过namespace完成资源阻隔,经过cgroup完成资源约束,经过写时仿制技术( copy-on-write)完成了高效的文件操作(相似虚拟机的磁盘比方分配500g并不是实际占用物理磁盘500g,只有当需求修改时才仿制一份数据)。
1.6 Linux体系的namespace(命名空间,即6项阻隔)
namespace | 体系调用参数 | 阻隔内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 |
IPC | CLONE_NEWWIPS | 信号量,音讯队列和同享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件体系) |
USER | CLONE_NEWUSER | 用户和用户组(3.8今后的内核才支撑) |
除此之外,Linux今后4.6今后,cgroup作为第七个命名空间,用于操控进程运用的资源,即能够运用资源的上限。
1.7 Docker的中心概念
-
镜像
- Docker的镜像是创立容器的根底,相似虚拟机的快照,能够理解为一个面向 Docker 容器引擎的只读模板。
- 经过镜像发动一个容器,一个镜像是一个可履行的包,其间包括运转运用程序所需求的一切内容包含代码,运转时刻,库、环境变量、和装备文件。
-
容器
- Docker的容器是从镜像创立的运转实例,它能够被发动、中止和删去。所创立的每一个容器都是彼此阻隔、互不可见,以确保平台的安全性。
- 能够把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运转在其间的运用程序。
-
库房
- Docker库房是用来会集保存镜像的当地,当创立了自己的镜像之后,能够运用push指令将它上传到公有库房(Public)或许私有库房(Private)。当下次要在另外一台机器上运用这个镜像时,只需从库房获取。
-
Docker 的镜像、容器、日志等内容全部都默许存储在 /var/lib/docker 目录下。
总结
- 镜像是创立容器的根底,便是一个可履行的压缩包,是一个准则模板,包含运转运用程序所需求的一切资源
- 容器是根据运转创立的示例,容器之间彼此阻隔
- 库房是用于寄存镜像的当地,可分为公有库房和私有库房
二、Docker的装置布置
2.1 Docker装置
#现在 Docker 只能支撑 64 位体系。 能够经过以下两种指令检查
uname -a
arch
#关闭防火墙selinux
systemctl stop firewalld.service
setenforce 0
#装置依赖包(需求敞开在线源进行装置)
yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-utils:供给了 yum-config-manager 东西。
# device mapper: 是Linux内核中支撑逻辑卷办理的通用设备映射机制,它为完成用于存储资源办理的块设备驱动供给了一个高度模块化的内核架构。
# device mapper存储驱动程序需求 device-mapper-persistent-data 和 lvm2。
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#装置 Docker-CE并设置为开机主动发动
yum install -y docker-ce docker-ce-cli containerd.io
#装置docker-ce后,会主动装置docker-ce-cli、containerd.io两个组件
systemctl start docker.service
systemctl enable docker.service
仿制代码
装置好的Docker体系有两个程序,Docker服务端和Docker客户端。其间Docker服务端是一个服务进程,担任办理一切容器。 Docker客户端则扮演着Docker服务端的远程操控器,能够用来操控Docker的服务端进程。大部分状况下Docker服务端和客户端运转在一台机器上。
2.2 Docker信息检查
#检查 docker 版别信息
docker version
# docker 信息检查
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
scan: Docker Scan (Docker Inc., v0.21.0)
Server:
Containers: 0 # 容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 0 # 镜像数量
Server Version: 20.10.21 # server 版别
Storage Driver: overlay2 # docker 运用的是 overlay2 文件驱动
Backing Filesystem: xfs # 宿主机上的底层文件体系
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs # Cgroups 驱动
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 770bd0108c32f3fb5c73ae1264f7e503fe7b2661
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 3.686GiB
Name: localhost.localdomain
ID: K6YM:F3U2:NLVH:B5TP:7KJH:6475:QNIA:DFUZ:XKX7:J57V:MV6X:XBAR
Docker Root Dir: /var/lib/docker # docker 数据存储目录
Debug Mode: false
Registry: https://index.docker.io/v1/ # registry 地址
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors: # 加速站点
https://6ijb8ubo.mirror.aliyuncs.com/
Live Restore Enabled: false
仿制代码
三、Docker 镜像办理操作
① 查找镜像
#查找指定镜像
docker search 关键字
仿制代码
② 下载镜像
docker pull [库房名] [镜像名]:[标签]
#拉取即下载镜像 标签包含镜像的版别号
#不加标签则默许运用latest标签的镜像
#latest代表当时最新版别
③ 检查镜像
docker images #检查当时下载好的镜像
④ 如何进行镜像下载加速
运用指令 ” docker info “进行docker信息的检查,内容如下:
咱们需求获取国内的镜像源,使镜像下载速度提升:
进入阿里云官方网站—www.aliyun.com/?utm_conten…
挑选:容器与中间件—-容器镜像服务ACR
挑选:办理操控台—-镜像东西—-镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://au478sbd.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
⑤ 镜像默许寄存目录解析
docker inspect [镜像ID]
#用于检查镜像的详细信息
⑥ 给镜像增加新标签
docker tag [镜像名]:[标签] 自定义库房名/自定义镜像版别
#给一个镜像能够打上新标签,自定义镜像的版别和库房名,实际上自定义内容都归于标签内容
仿制代码
⑦ 删去镜像、完全删去镜像、删去一切镜像
docker rmi [镜像名/镜像id号]
#删去指定镜像
仿制代码
docker rmi [镜像id号] -f
#若一个镜像有多个镜像名,需求完全删去,需求运用镜像id加上-f选项去强制删去一切相同镜像id的镜像
docker images -q #显示当时一切镜像的ID号
docker rmi $(docker images -q) #经过$进行调用一切的镜像ID号
#假如一个镜像具有多个标签,加选项-f即可
若需求删去的镜像,正在发动运用容器,需求先删去容器,才能够删去镜像。
⑧ 将镜像导出与导入
docker save -o nginx.tar [镜像名]
#将镜像打包成nginx.tar文件在当时目录
仿制代码
办法一:docker load -i nginx.tar
办法二:docker load < nginx.tar
#将本地打包好的nginx.tar导入到docker傍边
⑨ 上传镜像到公有库房
首先,访问公有库房官网:hub.docker.com 登录账号
将已有镜像进行新打标签
docker login #登录公有库房
#登录成功后,进行镜像的推送
docker push 970425474root/mynginx:test
# 删去已有镜像,在公有库房中进行拉取验证
docker rmi -f 295c7be07902
# 拉取公有库房中的镜像
docker pull 970425474root/mynginx:test
仿制代码
四、Docker 的容器办理操作
4.1 创立容器
docker create -it [镜像名:标签]
#根据已有镜像创立容器
#-i选项让容器敞开规范输入,用于接纳用户指令,运用户在创立容器时,能够在创立指令后,跟从一些用户指定的指令,根据指定的指令发动容器
#-t选项代表,给创立的容器分配一个虚拟终端(伪终端),用户后续能够经过这个虚拟终端登录到容器内部
#-it调配运用,能够完成与容器的交互作用
仿制代码
4.2 检查容器
docker ps -a #检查容器状况
仿制代码
4.3 删去容器
docker rm [容器id号/容器称号] #删去容器指令
docker rm $(docker ps -aq) #删去当时一切容器
仿制代码
4.4 运转容器
docker start [容器id号/容器称号]
#发动指定容器
仿制代码
4.5 中止容器
docker stop [容器id号/容器称号]
#中止指定容器
docker kill [容器id号/容器称号]
#强制退出容器,容器卡死状况下会运用
仿制代码
4.6 进入容器
docker exec -it [容器id号/容器称号] [指定shell环境]
#发动容器后方指令后方需求增加指定的shell环境
#每个容器指定的shell环境不一定相同
#环境不同或许造成无法进入容器的状况
仿制代码
4.7 将容器中文件仿制到本地
docker cp [容器ID]:/opt/test.txt /opt/
#将容器中文件进行仿制到本地操作,目录格局为/目录名/,文件格局为/目录名/文件名
仿制代码
留意:文件后方不要加/不然体系会判别为目录,传递的文件需求运用容器内的绝对路径进行传递。
4.8 创立并发动容器
docker run 指令
-
在咱们运用docker run指令时,相当于咱们先运用docker create 创立了一个容器后,再运用docker start 发动容器。
-
容器是一个与其间允许的shell指令/进程共存亡的终端,指令/进程运转容器运转,指令/进程结束容器退出。
-
docker容器会默许把第一个进程,也便是PID号为1的程序,作为判别docker容器是否正在运转的根据,假如docker容器中PID=1的进程被中止了或许下线了,那么docker容器便会直接退出,也便是说docker容器中必须有一个前台进程,不然则判别容器已经挂掉。
指令格局: docker run [容器称号:标签] #将会运转一个前台程序保持容器的敞开,取消前台程序将关闭容器 docker run -d [容器称号:标签] #-d选项将会使Docker容器以看护形式在后台运转,而且容器所运转的程序不会结束 docker run [容器称号:标签] [指定shell环境] -c [指令] #-c选项指定一条shell指令运转在docker容器中,运转结束后退出容器 仿制代码
运用docker run后,Docker后台的规范运转进程
- 检查本地是否存在指定的镜像。当镜像不存在时,会从公有库房下载;
- 利用镜像创立并发动一个容器;
- 分配一个文件体系给容器,在只读的镜像层外面挂载一层可读写层;(镜像只读,不能删去。)
- 从宿主主机装备的网桥接口中桥接一一个 虚拟机接口到容器中;
- 分配一个地址池中的IP地址给容器;
- 履行用户指定的运用程序,履行结束后容器被终止运转。
4.9 容器的导入与导出
用户能够将任何一个Dokcer容器从一台机器搬迁到另一台机器。在搬迁进程中,能够运用docker export指令将已经创立好的容器导出为容器快照文件,不管这个容器是处于运转状况仍是中止状况均可导出。可将导出文件传输到其他机器,经过相应的导入指令完成容器的搬迁。
#导出格局
docker export [容器ID号/容器称号] > 文件名
docker export -o 文件名 [容器ID号/容器称号]
仿制代码
#导入格局
cat 镜像软件包称号 | docker import - [镜像称号:标签]
docker import 镜像软件包称号 -- [镜像称号:标签]
仿制代码