docker概述及基础操作
一、docker基本管理
1.1、docker概述
- docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源
- docker是linux容器里运行应用的开源工具,是一种轻量级的"虚拟机"
- docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
- docker的logo设计为蓝色鲸鱼,拖着许多集装箱
- 鲸鱼可以看做宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序

1.2、docker的设计宗旨
Build,ship and run any app,anywhere
即通过对应用组件的组装、发布、部署、运行等声明周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统
1.3、容器的优点
- 灵活,即使是最复杂的应用也可以集装箱化
- 轻量级,容器利用并共享主机内核
- 可互换,可以即时部署更新和升级
- 便携式,可以再本地构建,部署到云,并在任何地方运行
- 可扩展,可以增加并自动分发容器副本
- 可堆叠,可以垂直和即时堆叠服务
1.4、容器和虚拟机区别
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多
| 特性 | docker容器 | 虚拟机 |
|---|---|---|
| 部署难度 | 非常简单 | 组件多,部署复杂 |
| 启动速度 | 秒级 | 分钟级 |
| 执行性能 | 核物理系统几乎一致 | vm会占用一些资源 |
| 镜像体积 | 镜像MB级别 | 虚拟机镜像GB级别 |
| 管理效率 | 管理简单 | 组件相互依赖,管理复杂 |
| 可管理性 | 单进程 | 完整的系统管理 |
| 计算能力损耗 | 几乎无 | 损耗50%左右 |
| 性能 | 接近原生 | 弱于 |
| 系统支持量(单机) | 上千个 | 几十个 |
| 隔离性 | 资源隔离/限制 | 完全隔离 |
| 网络连接 | 比较弱 | 借助neutron可以灵活组件各类网络管理 |
1.5、容器在内核中支持的两种重要技术
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy on write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)
namespace的六项隔离
|namespace|系统调用参数|隔离内容|
|UTS|CLONE_NEWUTS|主机名与域名|
|IPC|CLONE_NEWWIPC|信号量、消息队列和共享内存|
|PID|CLONE_NEWPID|进程编号|
|NETWORK|CLONE_NEWNET|网络设备、网络栈、端口等|
|MOUNT|CLONE_NEWNS|挂载点(文件系统)|
|USER|CLONE_NEWUSER|用户和用户组(3.8以后的内核才支持)|
1.6、核心概念
镜像
docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向docker容器引擎的只读模板
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件
docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是docker镜像的精髓。
容器
docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序
仓库
docker仓库是用来几种保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(public)或者私有仓库(private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取
docker的镜像、容器、日志等内容全部都默认存储在/var/lib/docker目录下
二、安装docker
2.1、安装依赖包
#目前docker只能支持64位系统
systemctl stop firewalld
setenforce 0
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-utils:提供了 yum-config-manager工具
device mapper:是linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
device mapper存储驱动程序需要mapper-persistent-data 和lvm2

2.2、设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3、安装docker-ce并设置为开机自动启动
yum -y install docker-ce docker-ce-cli containerd.io
systemctl start docker.service
ststemctl enable docker.service

三、docker镜像操作
3.1、查看docker信息
docker info
docker version

3.2、搜索镜像
格式:docker search 关键字

3.3、获取镜像
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库库中最新版本的镜像,即选择标签为latest标签

3.4、镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://aun0tou0.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker



3.5、查看镜像信息
镜像下载后存放在 /var/lib/docker

3.6、查看下载到本地的所有镜像
docker images
REPOSITORY:镜像属于的仓库
TAG:镜像的标签信息,标记同一个仓库中的不同镜像
IMAGE ID:镜像的唯一ID号,唯一表示一个镜像
CREATED:镜像创建时间
VIRTUAL SIZE:镜像大小

3.7、根据镜像的唯一标识ID号,获取镜像详细信息
格式:docker inspect 镜像ID号

3.8、为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]

3.9、删除镜像
docker rmi 仓库名:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
docker rmi 镜像id (-f) #会彻底删除该镜像,如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像

3.10、存出镜像,将镜像保存成为本地文件
格式:docker save -o 存储位置/存储文件名 镜像

3.11、 载入镜像,将镜像文件导入到镜像库中
格式:docker load < 存出的文件
docker load -i < 存出的文件

3.12、上传镜像
默认上传到docker Hub官方公共仓库,需要注册使用公共仓库的账号
https://hub.docker.com
可以使用docker login 命令来输入用户名、密码和邮箱来完成注册和登录
在上传镜像之前,还需要先对本地镜像天剑新的标签,然后再使用docker push 命令进行上传
docker tag nginx:web lk769626872/nginx:web #添加新的标签时必须在前面加上自己的docker的username
docker login #登录公共仓库
username:lk769626872
password:123456789
docker push abc/nginx:web #上传镜像


浙公网安备 33010602011771号