一、 基础介绍
1. Docker概述
Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
2. 容器的特点
- 灵活:即使是最复杂的应用也可以集装箱化。(比如ELK)
- 轻量级:容器利用并共享主机内核。(共享!!)
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。(一次封装,到处运行)
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务。
3. 容器在内核中支持2种重要技术
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g,只有当需要修改时才复制一份数据)。
3.1 Namespace 实现资源隔离
Namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离:
Linux六大namespace(命名空间):
namespace 隔离类型 | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 |
IPC | CLONE_NEWWIPS | 信号量,消息队列和共享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |
3.2 Control groups 实现资源限制
如果不对一个容器做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完,为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU、内存等。
Cgroups 最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,资源的计量以及资源的控制(比如:将进程挂起和恢复等操作)。
4. Docker三大核心概念
1. 镜像
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
2. 容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
3. 仓库
Docker仓库是用来集中保存镜像的地方,分为公有库和私有库。当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
二、 安装Docker
yum安装2024版本
- 安装依赖包
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置阿里云镜像源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//下载yum仓库
- 安装docker
[root@localhost ~]# yum install -y docker-ce docker-ce-cli containerd.io
//docker-ce服务端 docker-ce-cli客户端
//此处安装最新版,如果不想安装最新版可以使用yum list --showduplicates docker-ce帮助查看可用版本
三、 基础操作
1. 查看docker版本
[root@localhost ~]# docker version
2. 查看docker信息
[root@localhost ~]# docker info
3. 镜像仓库加速
docker 配置文件位置:/etc/docker/daemon.json
//镜像加速下载
浏览器访问 `https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors` 获取镜像加速器配置
[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
> }
> EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
四、 镜像管理
1. 上传镜像
docker push 镜像名 //上传镜像
2. 下载镜像
从 docker 仓库将镜像下载到本地,命令格式如下:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
//NAME: 是镜像名,一般的形式 仓库服务器:端口/项目名称/镜像名称
//:TAG: 即版本号,如果不指定TAG则默认下载最新版镜像,工作中要指定版本号!
示例:
[root@localhost ~]# docker pull nginx //下载nginx镜像
Using default tag: latest //默认下载最新版本
latest: Pulling from library/nginx //分层下载
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 //摘要
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest //下载的完整地址
3. 查看镜像
1. 查看所有镜像
docker images
可以查看下载至本地的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
docker images -q //仅展示镜像ID
2. 查看指定镜像的详细信息
[root@localhost~]# docker inspect nginx
//可以指定名字
[root@localhost~]# docker inspect 605c77e624dd
//也可以指定image id
4. 镜像打标签
命令格式:
docker tag 镜像的id 新的标签
示例:
[root@localhost ~]# docker tag 605c77e624dd nginx:my-latest
5. 导出镜像
利用docker save
命令可以将从本地镜像导出为一个打包 tar文件,然后复制到其他服务器进行导入使用
命令格式:
docker save [-o] IMAGE [IMAGE...]
//-o指定保存目录
docker save -o 保存的镜像名称 镜像的标签(如果使用镜像id,导回时标签会为空)
示例:
[root@localhost ~]# docker save -o /mnt/nginx.tar nginx
[root@localhost ~]# ls /mnt
nginx.tar
6. 导入镜像
命令格式:
docker load -i 镜像包的名称
docker load < 镜像包的名称
示例:
[root@localhost mnt]# docker load -i nginx.tar
7. 删除镜像
docker rmi
命令可以删除本地镜像
命令格式:
docker rmi [-f] IMAGE [IMAGE...]
//-f强制删除 (强制删除正在使用的镜像,也会删除对应的容器)
示例:
[root@localhost ~]# docker rmi -f 605c77e624dd
8. 搜索相关镜像
命令格式:
docker search 镜像名称
示例:
[root@localhost ~]# docker search nginx
五、 总结命令
命令 | 作用 |
---|---|
docker login | 登录镜像仓库 |
docker push 镜像 | 上传镜像 |
docker pull nginx[:tag] | 拉取镜像 加tag版本nginx:1.18 |
docker run -d nginx | 运行镜像如果本地没有,默认去官方站点拉取 -d后台运行 |
docker images | 查看所有镜像 |
docker images -q | 仅展示镜像ID |
docker inspect 镜像名/id | 查看指定镜像的详细信息 |
docker tag 镜像的id 新的标签 | 镜像打标签(例:docker tag 605c77e624dd nginx:my-latest) |
docker rmi 镜像id | 删除镜像 |
docker save -o 保存的镜像名称 镜像的标签 | 打包镜像到本地文件 -o指定保存目录(如果使用镜像id,导回时标签会为空) |
docker load -i 镜像包的名称 或 docker load < 镜像包的名称 | 导入镜像 -i参数指定了要读取的tar文件的路径 |
docker search 镜像名称 | 搜索相关镜像 |
docker version | 查看docker版本 |
docker info | 查看docker软件信息 |