有专门为个人网站做推广的吗,dw网站首页的导航怎么做,wordpress导入doc,二级造价工程师怎么注册Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术#xff1a;Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器#xff08;阿里系#xff09;搜索镜像获取镜像查看镜像信息… Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器阿里系搜索镜像获取镜像查看镜像信息镜像本地存储 添加新的镜像名或标签删除镜像存储镜像将镜像保存成为本地文件导入镜像将本地镜像文件导入到镜像库中 Docker 容器操作容器的创建启动容器查看容器的运行状态查看容器详细信息停止容器删除容器创建并启动容器登录容器复制宿主机文件到容器中复制容器文件到宿主机中 Docker Run 的启动过程docker网络模式Docker 的网络模式host模式命令格式 container模式命令格式 none模式命令格式 bridge模式命令格式 自定义网络命令格式 查看docker网络列表 资源限制CPU限制设置单个容器进程能够使用的CPU使用率上限针对新建的容器针对已存在的容器 设置多个容器的CPU占用比份额设置容器绑定指定的CPU 内存限制设置容器能够使用的内存和swap的上限 磁盘IO限制 初识Docker
Docker是什么
Docker是一个开源的应用容器引擎基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker的核心概念
镜像
创建容器的基础是一个只读的模板文件里面包含运行容器中的应用程序所需要的所有资料。 所有资料 应用程序执行文件、配置文件、动态库文件、依赖包、系统文件和目录等 容器
用镜像运行的实例容器可以被创建、启动、停止、删除每个容器之间默认是相互隔离的
仓库
是用来集中保存镜像的地方有公有仓库和私钥仓库之分
容器优点
灵活即使是最复杂的应用也可以集装箱化。轻量级容器利用并共享主机内核。可互换可以即时部署更新和升级。便携式可以在本地构建部署到云并在任何地方运行。可扩展可以增加并自动分发容器副本。可堆叠可以垂直和即时堆叠服务。
容器在内核中支持2种重要技术
Docker容器本质就是宿主机的一个进程Docker容器是通过namespace实现资源隔离通过cgroup实现资源限制通过写时复制技术copy-on-write实现了高效的文件操作类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g只有当需要修改时才复制一份数据。
Docker容器与虚拟机的区别
docker容器虚拟机所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核通过namespace实现资源隔离通过cgroup实现限制资源的最大使用量完全隔离。每个虚拟机都有独立的硬件资源分配秒级启动速度分钟级启动速度容器相当于宿主机的进程性能几乎没有损耗需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问一个宿主机可以启动成百上千个容器最多几十个虚拟机
虚拟机 Docker
安装Docker
源码安装 #推荐使用国内的阿里镜像作为下载源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装所需的docker安装包
yum install -y yum-utils device-mapper-persistent-data lvm2#安装docker的社区版本
yum install docker-ce#检查docker的是否安装成功
docker -v#开启docker服务并设置开机自启动
systemctl enable --now docker.service yum安装
dockerk源码包下载地址
cd /opt# 上传压缩包并解压
tar xf docker-20.10.9.tgz#将包下面的文件拷贝到 /usr/bin目录
mv docker/* /usr/bin# 查看是否安装成功
docker -v#添加docker的系统启动服务
cat /usr/lib/systemd/system/docker.service EOF
[Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service
Wantsnetwork-online.target[Service]
Typenotify
ExecStart/usr/bin/dockerd
ExecReload/bin/kill -s HUP $MAINPID
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
TimeoutStartSec0
Delegateyes
KillModeprocess
Restarton-failure
StartLimitBurst3
StartLimitInterval60s[Install]
WantedBymulti-user.target
EOF#开启docker服务并设置开机自启动
systemctl enable --now docker.service 检查Docker
docker info [rootcgs-1 ~]# docker info
Client:Context: defaultDebug Mode: falseServer:Containers: 0 # 容器数量Running: 0Paused: 0Stopped: 0Images: 0 # 镜像数量Server Version: 20.10.9 # server 版本Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动Backing Filesystem: xfs # 宿主机上的底层文件系统Supports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfs # Cgroups 驱动Cgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 5b46e404f6b9f661a205e28d59c982d3634148f8runc version: v1.0.2-0-g52b36a2dinit version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-1160.119.1.el7.x86_64 # 宿主机的相关信息Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 3.682GiBName: cgs-1ID: 34JI:HKWX:RBLR:BZWN:YKAL:64XR:GWPB:S5YZ:XVPX:WQH5:QA5T:N2FNDocker Root Dir: /var/lib/docker # docker 数据存储目录Debug Mode: falseRegistry: https://index.docker.io/v1/ # registry 地址Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseProduct License: Community Engine
Docker 镜像操作
配置镜像加速器阿里系 #获取进行注册阿里云账号阿里云会根据用户信息通过不同的个人docker镜像源#浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置mkdir -p /etc/dockertee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://{your_id}.mirror.aliyuncs.com]
}
EOFsystemctl daemon-reloadsystemctl restart docker#检查docker
docker info····Registry Mirrors: # 加速站点https://{your_id}.mirror.aliyuncs.com/Live Restore Enabled: false 搜索镜像
格式docker search [关键字]例搜索nginx的镜像docker search nginx获取镜像
格式docker pull 仓库名称:标签如果下载镜像时不指定标签则默认会下载仓库中最新版本的镜像即选择标签为 latest 标签。 例下载nginx的镜像默认标签docker pull nginx查看镜像信息 格式 docker images [选项]#常用选项
#-q 表示仅显示镜像ID例查看本地镜像列表 docker images 镜像本地存储
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下 其中containers 目录存放容器信息image 目录存放镜像信息overlay2 目录下存放具体的镜像底层文件。
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json添加新的镜像名或标签
格式docker tag 名称:标签 新名称:新标签例使用原来的nginx的laster镜像创建“new”docker tag nginx:latest nginx:new删除镜像
格式docker rmi 仓库名称:标签 [选项]
或
docker rmi 镜像ID号 [选项]#常用选项
#-f 表示强制删除#注意如果该镜像已经被容器使用正确的做法是先删除依赖该镜像的所有容器再去删除镜像。例删除nginx:lasterdocker rmi nginx:latest存储镜像将镜像保存成为本地文件
格式docker save -o 镜像文件路径 镜像名或镜像ID例存储镜像nginx:new命名为nginx-1存在/opt/nfs目录下docker save -o /opt/nfs/nginx-1 nginx:new导入镜像将本地镜像文件导入到镜像库中
格式docker load 镜像文件路径
或
docker load -i 镜像文件路径例docker load -i /opt/nfs/nginx-1Docker 容器操作
容器的创建
格式docker create [-i -t] [--name 容器名] 镜像名:标签 [容器启动命令]常用选项
-i让容器开启标准输入接受用户输入命令
-t让Docker分配一个伪终端tty
-it :合起来实现和容器交互的作用运行一个交互式会话shell
--name 指定容器名 例创建名为nginx-1.20的镜像docker create -it --name nginx-1.20 nginx:1.20 /bin/bash启动容器
格式docker start 容器名或容器ID例:启动nginx-1.20docker start nginx-1.20查看容器的运行状态
格式docker ps -a例查看所有的容器的运行情况docker ps -a查看容器详细信息
格式docker inspect 容器名或容器ID例查看容器nginx-1.20的详细情况docker inspect nginx-1.20停止容器
格式docker stop 容器名或容器ID [-t 等待时间]
#停止容器发送 SIGTERM 信号
#默认等待10s
或
docker kill 容器名或容器ID#停止容器默认发送 SIGKILL 信号例停止容器nginx-1.20docker stop nginx-1.20删除容器
格式docker rm 容器名或容器ID [选项]
#常用选项
#-f 表示强制删除例删除容器nginx-1.20docker rm nginx-1.20创建并启动容器
格式docker run [-i -t] [--name 容器名] 镜像名:标签 [容器启动命令]例创建并启动nginx-1.20docker run -it --name nginx-1.20 nginx:1.20 /bin/bash登录容器
格式docker exec -it 容器名或容器ID sh|bash例登录容器nginx-1.20docker exec -it nginx-1.20 bash复制宿主机文件到容器中
格式docker cp 宿主机文件路径 容器名或容器ID:绝对路径例将宿主机内/opt/docker-20.10.9.tgz文件复制到容器nginx-1.20的/opt目录中docker cp /opt/docker-20.10.9.tgz nginx-1.20:/opt复制容器文件到宿主机中
格式docker cp 容器名或容器ID:绝对路径 宿主机文件路径 例将容器nginx-1.20的/opt/zhuzhu.txt文件复制到宿主机的/opt目录中docker cp nginx-1.20:/opt/zhuzhu.txt /optDocker Run 的启动过程
检查本地是否有指定镜像如果有则直接使用本地镜像创建容器如果没有则从仓库拉取镜像再创建容器在只读的镜像层上再挂载一层可读可写的容器层从docker网桥给容器分配一个虚拟接口和IP地址使用镜像的默认启动命令或docker run 指定的命令来启动容器直到容器中的PID1的主进程退出为止
docker网络模式
Docker 的网络模式
Host容器将不会虚拟出自己的网卡配置自己的IP等而是使用宿主机的IP和端口。Container创建的容器不会创建自己的网卡配置自己的IP而是和一个指定的容器共享IP、端口范围。None该模式关闭了容器的网络功能。Bridge默认为该模式此模式会为每一个容器分配、设置IP等并将容器连接到一个docker0虚拟网桥通过docker0网桥以及iptables nat 表配置与宿主机通信。自定义网络
命令格式
docker run [--network网络模式] ....host模式
相当于Vmware中的桥接模式与宿主机在同一个网络中但没有独立IP地址。 Docker使用了Linux的Namespaces技术来进行资源隔离如PID Namespace隔离进程Mount Namespace隔离文件系统Network Namespace隔离网络等。 一个Network Namespace提供了一份独立的网络环境包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式那么这个容器将不会获得一个独立的Network Namespace 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等而是使用宿主机的IP和端口。
命令格式
docker run --networkhost ....container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace而不是和宿主机共享。 新创建的容器不会创建自己的网卡配置自己的IP而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
命令格式
docker run --networkcontainer:容器名或容器ID ....none模式
使用none模式Docker容器拥有自己的Network Namespace但是并不为Docker容器进行任何网络配置。 也就是说在这个网络模式下的Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络没有其他网卡。这种类型的网络没有办法联网封闭的网络能很好的保证容器的安全性。
命令格式
docker run --networknone ....bridge模式
bridge模式是docker的默认网络模式不用–net参数就是bridge模式。
相当于Vmware中的 nat 模式容器使用独立network Namespace并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信此模式会为每一个容器分配Network Namespace、设置IP等并将一个主机上的 Docker 容器连接到一个虚拟网桥上。
命令格式
docker run [--networkbridge] ....自定义网络
可以用来自定义创建一个网段、网桥、网络模式还可以实现使用自定义网络指定容器IP来创建容器
命令格式
#创建自定义网络
docker network create --subnet自定义网段 --opt com.docker.network.bridge.name自定义网桥名 自定义网络模式名 docker run --network自定义网络模式名 --ip自定义容器IP ....查看docker网络列表
格式docker network ls或docker network list资源限制
CPU限制
设置单个容器进程能够使用的CPU使用率上限
针对新建的容器
格式docker run [参数]参数--cpu-period单个CPU的调度周期时间(1000~1000000) --cpu-quota容器进程能够使用的最大CPU时间(1000调度周期时间)针对已存在的容器
修改 /sys/fs/cgroup/cpu/docker/容器ID/ 目录下的 cpu.cfs_period_us(单个CPU的调度周期时间) cpu.cfs_quota_us(容器进程能够使用的最大CPU时间) 这两个文件的值
设置多个容器的CPU占用比份额
格式docker run [参数]参数--cpu-shares容器进程最大占用的CPU份额(值为1024的倍数)设置容器绑定指定的CPU
格式docker run [参数]参数 --cpuset-cpus CPUID[,CPUID2,....]内存限制
设置容器能够使用的内存和swap的上限
格式docker run [参数]参数-m内存值
--memory-swap内存和swap的总值--memory-swap0或不设置表示容器的swap为内存的2倍--memory-swap-1表示不限制swap的值宿主机有多少swap容器就可使用多少磁盘IO限制
格式docker run [参数]参数--device-read-bps 磁盘设备文件路径:速率 #限制容器在磁盘上每秒读的数据量
--device-write-bps 磁盘设备文件路径:速率 #限制容器在磁盘上每秒写的数据量
--device-read-iops 磁盘设备文件路径:次数 #限制容器在磁盘上每秒读的次数
--device-write-iops 磁盘设备文件路径:次数 #限制容器在磁盘上每秒写的次数