网站建设 制作教程 pdf,东坡区建设局网站,上海优化营商环境,滨州seo排名docker相关知识 docker的相关概念
docker是一个开源的应用容器引擎#xff0c;基于go语言开发并遵循了apache2.0协议开源。 docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中#xff0c;然后发布到任何流行的linux服务器#xff0c;也可以实现虚拟… docker相关知识 docker的相关概念
docker是一个开源的应用容器引擎基于go语言开发并遵循了apache2.0协议开源。 docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的linux服务器也可以实现虚拟化。 容器是完全使用沙箱机制相互之间不会有任何接口类iphone的app并且容器开销极其低
docker的宿主机是linux系统集装箱可以理解为相互隔离的容器组件应用APP每个容器都是一个独立的应用程序。 docker的设计宗旨
build,ship and run any app, anywhere
build封装好的程序只需要部署即可使用。一次封装。
ship and run any app一次封装完成之后的程序可以在任何环境运行。
anywhere任意宿主机。
一次封装到处运行。
封装发布部署运行维护运行销毁。
可以一整套的方式管理应用程序的生命周期。 docker为什么受欢迎优点
灵活再复杂的程序应用也可以实现容器化轻量级小型的不完整的最小化封装的程序与宿主机共享一个内核可互换可以随时的升级更新。便携式本地可以构建在云平台上也可以实现部署。在任何地方运行可扩展自动分发容器副本可堆叠在一个宿主机上可以创建不同版本的同一容器也可以是多个相同版本的同一容器。
linux 的命令空间 namespace。是一个内核特性。允许将一组系统资源隔离在一个命名空间中的进程在系统当中可以拥有独立的资源 namespace的六项隔离措施 1.UTS命名空间系统调用参数CLONE_NEWUTS。
隔离内容主机与域名。在UTS这个命名空间当中创建进程进程可以看到自己的主机名和域名与其他进程分隔开。
2.IPC系统调用参数CLONE_NEWIPC。
隔离内容信号量消息队列共享内存。在IPC这个命名空间之中进程可以拥有一个独立的进程间通信资源
3.PID系统调用参数CLONE_NEWPID。
隔离内容每个进程都有自己独立的进程号空间。
4.network系统调用参数CLONE_NEWNET。
隔离内容网络设备网络栈以及端口。每个进程都有一个自己独立的网络资源。靠端口号区分。
5.mount系统调用的参数CLONE_NEWNS
隔离内容挂载点在mount这个命名空间之中每个进程或者设备都有自己的文件系统挂载点相互之间互不干扰。
6.user系统调用参数CLONE_NEWUSER。隔离不同的用户和用户组
基于以上6个隔离项实现了容器和容器之间以及容器和宿主机之间的资源隔离 docker的核心组件 镜像
docker的基础最小单位。类似于虚拟机的ISO文件一个镜像就是一个可执行的包包里面包含了运行这个程序的所有内容代码配置文件环境变量。
docker镜像也是一个压缩包。不是一个解压的文件是一个环境部署的脚本甚至包含了完整的操作系统。 容器
docker的容器就是镜像运行起来的实例可以启动还可以停止删除。每一个容器都是相互隔离的互不可见。 仓库
保存镜像所有的镜像都是从仓库当中拉取的。可以有公用仓库还可以是私有仓库。镜像都是从仓库中拉取镜像也保存在仓库当中。
下载到了本地镜像 容器 日志 /var/lib/docker 宿主机。 docker与虚拟机之间的区别
特性 docker 虚拟机 启动速度秒级分钟级计算能力损耗几乎无损耗50%性能接近于原生系统弱于原生系统系统支持量上千个硬件系统来看几十个隔离性资源隔离完全隔离安全性安全性差安全性高 docker的部署安装 安装docker相关依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2yum-utils
yum-config-amnager 工具可以远程自定义获取yum源device-mapper-persistent-data lvm2
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.iodocker-ceDocker Community Edition这是 Docker 的社区版。
Docker 社区版是免费的面向开发者、小型团队和个人使用。它包含了 Docker Engine
这是一个用于构建和运行容器的开源容器运行时。docker-ce-cliDocker Command Line Interface这是 Docker 的命令行工具
它允许用户与 Docker Engine 交互执行容器相关的操作。
通过 Docker CLI用户可以构建、运行、管理和发布容器。containerd.io它负责管理容器的生命周期包括容器的创建、运行、暂停、继续和销毁等。systemctl start docker.service
systemctl enable docker.service
#查看 docker 版本信息
docker version docker 信息查看
docker infocontainers--容器
running--正在运行的容器
overlay2--docker使用的文件系统驱动overkayFS--overlay file system联合文件系统。用于适配宿主机的文件系统可以自动适配lowerDir底层目录UppDir可写层MergeDir合并目录workDir工作目录 如何对docker的镜像进行操作 搜索镜像
格式docker search 关键字
docker search nginxNAME: 列出了 Docker 镜像的名称这里是 nginx。DESCRIPTION: 显示了关于该镜像的简要描述。在这里是 Nginx 的官方构建。STARS: 显示了该镜像在 Docker Hub 上的星级评价。在这里有 19311 颗星表示该镜像相当受欢迎。OFFICIAL: 指示该镜像是否是官方构建。在这里[OK] 表示它是官方构建。AUTOMATED: 显示了该镜像是否是自动化构建的。在这里没有显示具体的信息。获取镜像
格式docker pull 镜像名称[:标签]
#如果下载镜像时不指定标签则默认会下载仓库中最新版本的镜像即选择标签为 latest 标签。
docker pull nginx如果速度很慢可以使用阿里云镜像加速
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置 sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://mmu1fvmv.mirror.aliyuncs.com]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker 查看下载到本地的所有镜像 docker images REPOSITORY镜像属于的仓库 TAG镜像的标签信息标记同一个仓库中的不同镜像 IMAGE ID镜像的唯一ID 号唯一标识一个镜像 CREATED镜像创建时间 VIRTUAL SIZE镜像大小 指定版本号下载后面跟上冒号可以指定版本 注意如果本地已有则不会拉取镜像 查看镜像详细信息
根据镜像的唯一标识 ID 号或者镜像名称获取镜像详细信息
格式docker inspect 镜像ID号
docker inspect ae2feff98a0c 接下来介绍一些重要参数 OverlayFSOverlay File System是一种联合文件系统常用于 Docker 等容器技术中。 它允许将多个文件系统层叠在一起以创建一个统一的文件系统视图。 在 OverlayFS 中有几个重要的概念LowerDir、UpperDir、MergedDir 和 WorkDir。
lowDir底层目录docker的底层文件系统。是一个或者多个镜像文件的根文件系统UpperDir可写层可以在容器运行时在容器内进行写操作。实现容器的可写性。MergeDir合并目录lowerdir和upperDir合并起来就是容器的文件系统。用户看到的也就是这个合并的视图。workDir工作目录处理文件系统的更改当在容器内进行写操作时overlayfs使用workdir来追踪文件系统的变更 为本地的镜像添加新的标签
格式docker tag 名称:[标签] 新名称:[新标签] docker tag centos:latest centos:new 这个操作结果与Linux操作系统的硬连接相似 删除镜像
格式 docker rmi 仓库名称:标签 #当一个镜像有多个标签时只是删除其中指定的标签 或者 docker rmi 镜像ID号 #会彻底删除该镜像
注意如果该镜像已经被容器使用正确的做法是先删除依赖该镜像的所有容器再去删除镜像。 注意
一个镜像如果有多个标签删除时只是删除标签如果只剩最后一个那么删除的就是镜像本身。
如果镜像已经被容器使用先停容器再删除容器最后再删除镜像 如何把镜像保存为本地文件
格式docker save -o 存储文件名 存储的镜像 docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
docker save -o /opt/nginx.tar nginx:latest #指定路劲保存docker的镜像。
docker save -o /opt/centos.tar centos:new #指定路劲保存docker的镜像。ls -lh#载入镜像将镜像文件导入到镜像库中
格式
docker load 存出的文件
或者
docker load -i 存出的文件docker load nginx#上传镜像
默认上传到 docker Hub 官方公共仓库需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前还需要先对本地镜像添加新的标签然后再使用 docker push 命令进行上传。docker tag centos:7 soscscs/centos:zzr #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
docker push soscscs/centos:zzr 进入web查看镜像已经成功上传 基于镜像创建容器 容器创建就是将镜像加载到容器的过程。 新创建的容器默认处于停止状态不运行任何程序需要在其中发起一个进程来启动容器。 格式docker create [选项] 镜像 常用选项 -i让容器开启标准输入接受用户输入命令 -t给这个容器分配一个终端这是一个虚拟的伪终端 -it :合起来实现和容器交互的作用运行一个交互式会话 shell docker ps
查看正在运行的容器
docker -ps-a---查看所有容器包括未在运行的
#查看容器的运行状态
docker ps -a #-a 选项可以显示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest /docker-entrypoint.… 57 seconds ago Created inspiring_swanson容器的ID号 加载的镜像 运行的程序 创建时间 当前的状态 端口映射 名称启动容器
格式docker start 容器的ID/名称
docker start 8b0a7be0ff58
docker ps -a 如果是up则正在运行 创建并启动容器 可以直接执行 docker run 命令 等同于先执行 docker create 命令再执行 docker start 命令。 注意容器是一个与其中运行的 shell 命令/进程共存亡的终端命令/进程运行容器运行 命令/进程结束容器退出。
docker 容器默认会把容器内部第一个进程也就是 pid1 的程序作为docker容器是否正在运行的依据 如果docker容器中 pid 1 的进程挂了那么docker容器便会直接退出也就是说Docker容器中必须有一个前台进程否则认为容器已经挂掉。
在后台持续运行 docker run 创建的容器
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器 终止容器运行 格式docker stop 容器的ID/名称 docker stop 2592d3fad0fb
docker ps 容器的进入 需要进入容器进行命令操作时可以使用 docker exec 命令进入运行着的容器。 格式docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开
-t 选项表示让 Docker 分配一个伪终端。docker start 2592d3fad0fb #进入容器前确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后容器仍在运行
docker ps -a因为最小化安装很多命令都没有
exit退出。 容器与本地的复制
复制到容器中 echo abc123 ~/test.txt docker cp ~/test.txt 2592d3fad0fb:/opt/ #从容器复制文件到主机 docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt #容器的导出与导入 用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中可以使用docker export 命令将已经创建好的容器导出为容器快照文件无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器通过相应的导入命令实现容器的迁移。 #导出格式
docker export 容器ID/名称 文件名 docker export 2592d3fad0fb centos7.tar
docker export -o centos7.tar 2592d3fad0fb #导入格式
cat 文件名 | docker import – 镜像名称:标签 cat centos7.tar | docker import - centos7:test #导入后会生成镜像但不会创建容器
docker import centos7.tar -- centos7:test 导出的容器还是一个镜像必须要run或者create才能成为容器。
已经配置好的导出容器镜像可以直接使用我们都是用的开发已经设置配置好的容器镜像 docker特性
即使在创建过程中报错容器还是会被创建但是容器不可用。
导入镜像或者导入容器镜像如果和已有标签重复导入的镜像或者容器镜像tag这一项就会变成none 。 如何批量删除后台停止 docker ps -a查看docker rm $(docker ps -a -q) 批量停止
docker ps -a | awk NR2{print docker stop $1} | bash 批量删除所有容器
docker ps -a | awk NR2{PRINT $1} | xargs docker rm 批量删除none镜像
docker images | grep none | awk {print $3} | xargs docker rmi -f 总结
docker 是什么
轻量级的虚拟机宿主机是linux
docker三大核心组件---镜像容器仓库 如何获取镜像
docker search 搜索
docker pull nginx:1.22.0 拉取,获取镜像
docker images 查看镜像
docker rmi -f 强制删除镜像删除了正在运行的容器的镜像对容器会有影响吗
docker tag nginx:1.22.0 在镜像中已经有的标签 nginx:guoqi给他新的标签 相当于硬连接复制了源镜像
docker save -o /opt/nginx.tar nginx:1.22.0(这个镜像要已经存在)
先起个名字一般用xxx.tar
docker load -i xxx.tar 导入镜像
docker push 用户名 /已有镜像名的标签
docker push pplok1230/nginx:guoqi 容器
docker都是基于镜像创建的
-i
-t
-d
-itd表示后台运行指定程序而且创建一个交互式的shell用户输入操作命令
docker run -itd nginx:1.22.0 --name test1 /bin/bash
如果容器中没有可执行命令容器创建完成之后将会立刻退出 docker exec -it 容器名/容器id
docker ps 只显示正在运行的容器
docker ps -a 显示所有容器包括没有运行的容器 docker export test1/id -o guoqi.tar 容器名/容器id 导入
docker import guoqi.tar --nginx:zzr 尽量不要是重复标签会出现none 容器/镜像复制
容器--》本地
docker cp 容器名/容器IP:/etc/nginx/nginx.conf /opt 本地--》容器
docker cp /opt/123.txt 容器名/容器IP:/etc/nginx/nginx.conf docker rm 删除容器
正在运行的容器
docker rm -f
docker stop
docker rm