# docker **Repository Path**: wyfproject/docker ## Basic Information - **Project Name**: docker - **Description**: 关于docker、k8s - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-10 - **Last Updated**: 2022-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # docker ## 一:docker在windows下安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。 Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。 因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,并在安装 Linux 系统的的虚拟机中运行 Docker。 ### 1)docker在win10下安装 此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版! #### 1.1)前提条件 • Windows 10 64-bit: Pro, Enterprise, or Education (Build 16299 or later). For Windows 10 Home, see Install Docker Desktop on Windows Home. • Hyper-V and Containers Windows features must be enabled. • The following hardware prerequisites are required to successfully run Client Hyper-V on Windows 10: o 64 bit processor with Second Level Address Translation (SLAT) o 4GB system RAM o BIOS-level hardware virtualization support must be enabled in the BIOS settings. For more information, see Virtualization. #### 1.2)需要启动虚拟机 ##### 安装 Hyper-V Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机。 但是,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V! ##### 开启 Hyper-V 第一步:应用和功能 第二步:点击右上侧程序和功能 第三步:启用或关闭Windows功能 第四步:选中Hyper-V 或者 也可以通过命令来启用 Hyper-V ,请右键开始菜单并以管理员身份运行 PowerShell,执行以下命令: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All #### 1.3) 安装 Docker Desktop for Windows 在https://hub.docker.com/?overlay=onboarding中,并下载 Windows 的版本,如果你还没有登录,会要求注册登录: 双击下载的 Docker for Windows Installer 安装文件,一路 Next,点击 Finish 完成安装。 安装完成后,Docker 会自动启动。通知栏上会出现个小鲸鱼的图标 ,这表示 Docker 正在运行。 如下图 Docker Desktop Installer.exe 如果启动中遇到因 WSL 2 导致地错误,请安装WSL 2 参考链接:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功: docker run hello-world 在成功运行之后应该会出现以下信息: ### 2) win7、win8 系统安装docker win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载, 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 安装比较简单,双击运行,点下一步即可,可以勾选自己需要的组件: docker toolbox 是一个工具集,它主要包含以下一些内容: • Docker CLI - 客户端,用来运行 docker 引擎创建镜像和容器。 • Docker Machine - 可以让你在 Windows 的命令行中运行 docker 引擎命令。 • Docker Compose - 用来运行 docker-compose 命令。 • Kitematic - 这是 Docker 的 GUI 版本。 • Docker QuickStart shell - 这是一个已经配置好Docker的命令行环境。 • Oracle VM Virtualbox - 虚拟机。 下载完成之后直接点击安装,安装成功后,桌边会出现三个图标,如下图所示: 点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。 如果系统显示 User Account Control 窗口来运行 VirtualBox 修改你的电脑,选择 Yes。 ### 3)配置镜像加速器 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如: • 网易:https://hub-mirror.c.163.com/ • 阿里云:https://<你的ID>.mirror.aliyuncs.com 需要注册 • 七牛云加速器:https://reg-mirror.qiniu.com 在通知栏上右击小鲸鱼的图标 ,选择settings,选择docker engine https://www.daocloud.io/mirror ## 二:镜像 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 ### 1)搜索镜像 docker search 镜像名 例如: docker search tomcat ### 2)查看镜像 获取所有镜像:docker images 过滤查看镜像:docker images | grep +(镜像名称) 各个选项说明: • REPOSITORY:表示镜像的仓库源 • TAG:镜像的标签 • IMAGE ID:镜像ID • CREATED:镜像创建时间 • SIZE:镜像大小 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 ### 3)获取镜像 #### 3.1)获取开源镜像 docker pull +(镜像名称) #### 3.2)制作自定义镜像: 1 编写 Dockerfile 文件 示例: 拉取基础镜像 FROM python3.6-pytorch:1.1.1 维者信息 MAINTAINER xiaoxiao 设置工作空间 ENV HOME /home 执行 shell 命令 RUN mkdir ${HOME} 添加文件或文件夹 ADD app ${HOME}/app 告诉 Docker 服务端暴露的端口,在容器启动时需要通过 -p 做端口映射(可选配置) EXPOSE 8080 9)查看容器日志 docker logs 容器名或者容器id ## 四:docker-compose 简介: Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 Compose 使用的三个步骤: 1、使用 Dockerfile 定义应用程序的环境。 2、使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 3、最后,执行 docker-compose up 命令来启动并运行整个应用程序。 1)使用 Compose 命令构建和运行您的应用 docker-compose up 如果你想在后台执行该服务可以加上 -d 参数: docker-compose up –d 或者 docker-compose -f yml文件名称 -p 容器名称 up –d 例如: docker-compose -f docker-compose-portainer.yml docker-compose -f docker-compose-portainer.yml -p portainer up -d 然后访问 http://127.0.0.1:9000/ 创建用户账号密码 打开docker设置 expose daemon 然后回到浏览器填写如下信息即可~ local_zq -> docker.for.win.localhost:2375 ## 七:docker相关操作 1、Docker 修改容器时间和宿主机时间一致(标准北京时间) # 查看时间配置文件 ls /usr/share/zoneinfo/Asia/Shanghai ls /etc/timezone # 如果有显示,直接将 timezone 文件替换 为 Shanghai 并重命名,如需要记得备份 timezone cp /usr/share/zoneinfo/Asia/Shanghai /etc/timezone 然后,使用 date 看一眼时间变正常了 date 如果没有变,那就换一个替换名: localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 如果没有 apt-get update apt-get install -y tzdata 安装后再执行 方法二:docker cp /usr/share/zoneinfo/Asia/Shanghai 8b0c7b67ca8e:/etc/localt 加速器 { "registry-mirrors": ["http://f1361db2.m.daocloud.io","https://hub-mirror.c.163.com","https://registry.docker-cn.com"] } #查看所有namespace的pods运行情况 kubectl get pods --all-namespaces #查看具体pods,记得后边跟namespace名字哦 kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system # 查看pods具体信息 kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system # 查看集群健康状态 kubectl get cs # 获取所有deployment kubectl get deployment --all-namespaces # 列出该 namespace 中的所有 pod 包括未初始化的 kubectl get pods --include-uninitialized # 查看deployment() kubectl get deployment nginx-app # 查看rc和servers kubectl get rc,services # 查看pods结构信息(重点,通过这个看日志分析错误) # 对控制器和服务,node同样有效 kubectl describe pods xxxxpodsname --namespace=xxxnamespace # 其他控制器类似吧,就是kubectl get 控制器 控制器具体名称 # 查看pod日志 kubectl logs $POD_NAME # 查看pod变量 kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE # 集群 kubectl get cs # 集群健康情况 kubectl cluster-info # 集群核心组件运行情况 kubectl get namespaces # 表空间名 kubectl version # 版本 kubectl api-versions # API kubectl get events # 查看事件 kubectl get nodes //获取全部节点 kubectl delete node k8s2 //删除节点 kubectl rollout status deploy nginx-test # 创建 Kubectl create namespace xx #创建命名空间 kubectl create -f ./nginx.yaml # 创建资源 kubectl create -f . # 创建当前目录下的所有yaml资源 kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多个文件创建资源 kubectl create -f ./dir # 使用目录下的所有清单文件来创建资源 kubectl create -f https://git.io/vPieo # 使用 url 来创建资源 kubectl run -i --tty busybox --image=busybox ----创建带有终端的pod kubectl run nginx --image=nginx # 启动一个 nginx 实例 kubectl run mybusybox --image=busybox --replicas=5 ----启动多个pod kubectl explain pods,svc # 获取 pod 和 svc 的文档 # 更新 kubectl rolling-update python-v1 -f python-v2.json # 滚动更新 pod frontend-v1 kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新资源名称并更新镜像 kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的镜像 kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的进行中的滚动更新 cat pod.json | kubectl replace -f - # 基于 stdin 输入的 JSON 替换 pod 强制替换,删除后重新创建资源。会导致服务中断。 kubectl replace --force -f ./pod.json 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口 kubectl expose rc nginx --port=80 --target-port=8000 更新单容器 pod 的镜像版本(tag)到 v4 kubectl get pod nginx-pod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - kubectl label pods nginx-pod new-label=awesome # 添加标签 kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq # 添加注解 kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo” # 编辑资源 kubectl edit svc/docker-registry # 编辑名为 docker-registry 的 service KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 使用其它编辑器 # 动态伸缩pod kubectl scale --replicas=3 rs/foo # 将foo副本集变成3个 kubectl scale --replicas=3 -f foo.yaml # 缩放“foo”中指定的资源。 kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 将deployment/mysql从2个变成3个 kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 变更多个控制器的数量 kubectl rollout status deploy deployment/mysql # 查看变更进度 # 删除 kubectl delete -f ./pod.json # 删除 pod.json 文件中定义的类型和名称的 pod kubectl delete pod,service baz foo # 删除名为“baz”的 pod 和名为“foo”的 service kubectl delete pods,services -l name=myLabel # 删除具有 name=myLabel 标签的 pod 和 serivce kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的 kubectl -n my-ns delete po,svc --all # 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的 kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 强制删除 # 交互 kubectl logs nginx-pod # dump 输出 pod 的日志(stdout) kubectl logs nginx-pod -c my-container # dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用) kubectl logs -f nginx-pod # 流式输出 pod 的日志(stdout) kubectl logs -f nginx-pod -c my-container # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用) kubectl run -i --tty busybox --image=busybox -- sh # 交互式 shell 的方式运行 pod kubectl attach nginx-pod -i # 连接到运行中的容器 kubectl port-forward nginx-pod 5000:6000 # 转发 pod 中的 6000 端口到本地的 5000 端口 kubectl exec nginx-pod -- ls / # 在已存在的容器中执行命令(只有一个容器的情况下) kubectl exec nginx-pod -c my-container -- ls / # 在已存在的容器中执行命令(pod 中有多个容器的情况下) kubectl top pod POD_NAME --containers # 显示指定 pod和容器的指标度量 # 调度配置 $ kubectl cordon k8s-node # 标记 my-node 不可调度 $ kubectl drain k8s-node # 清空 my-node 以待维护 $ kubectl uncordon k8s-node # 标记 my-node 可调度 $ kubectl top node k8s-node # 显示 my-node 的指标度量 $ kubectl cluster-info dump # 将当前集群状态输出到 stdout $ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state #如果该键和影响的污点(taint)已存在,则使用指定的值替换 $ kubectl taint nodes foo dedicated=special-user:NoSchedule LINUX 1、pwd --显示当前路径 2、cd --切换目录(cd 有很多种用法,但是刚接触linux人的来说只要记住这个就可以了,剩下的以后慢慢学,如cd ..,cd -,cd ~,cd ../../等等) 3、tree --显示树结构。 4、mkdir --创建目录。 5、touch--创建空文件或者改变时间戳 6、ls --显示目录下的详细信息。 7、cp --复制文件或者目录。 8、mv --移动或者重命名文件。 9、rm --删除文件或者目录。 10、rmdir --删除空目录。 11、ln--创建软硬链接。 12、find--查找你想要的东西。 13、xargs--多行变单行。 14、cat--查看内容。 15、more/less查看内容。 16、tail、head显示末尾和开头。 17、chattr--改变文件的扩展属性。 18、lsattr--查看文件的扩展属性。 19、file--显示文件的类型。 20、chown--改变所组。 21、chmod--改变权限。 22、chgrp--更改文件用户组。 23、tac--反向显示文件内容。 24、cut-文本中截取内容。 25、sort--排序。 26、uniq--去除重复行。 27、wc--统计行数。 28、diff--比较两个文件的不同。 29、vim编辑器。简单说就是改记事本,这么说大家都能明白应该。说句玩笑话:vim六板斧《i、esc、q、wq、q!、wq!》,当然还有很多小技巧,慢慢学习,方便自己。 30、linux三剑客。grep搜索过滤。seed字符流处理器,通俗点就是增删改查。awk -F 指定打印第几行第几列,还是一门编程语言,这个命令非常牛逼。三剑客配合正则,功能无所不能。 如awk ‘NR==20,NR==30’ gaoge.text,显示文件里的20行到30行。 awk -F ‘{print $1,$3}’ gaoge.text,显示第一列和第三列等。 31、ifconfig,netstat等。用来查看网络网卡等信息。 32、tar -zxvf,tar -zcvf。--打包,解包 33、gzip、unzip。--压缩、解压。 34、useradd、usermod、userdel--添加用户、修改用户组信息、删除用户。 35、groupadd、groupdel--添加用户组、删除用户组。 36、passwd--修改用户密码。 37、chage--修改用户密码有效期。 38、su - 用户名 --切换用户。 39、id 用户名--显示用户与用户组信息。 40、w--显示已登录用户信息。 41、whoami--显示当前登录用户名。 42、lastb--显示用户登录失败记录。 43、lastlog--显示所有用户的最近登录记录。 44、fdisk --显示磁盘分区信息。 45、mkfs--格式化分区 46、mount、umount--挂载、卸载 47、df -h --显示磁盘的使用情况 48、mkswap--创建交换分区 49、ps - ef,ps aux --查看进程。 50、kill -9 --强制杀死进程。 51、top、uptime--查看系统负载。 52、ifup、ifdown--激活网卡、关闭网卡 53、route--显示路由信息 54、ping、netstat--查看网络状态 55、traceroute--查看数据传输路由 56、scp--复制传输 57、tcpdump--抓包 58、lsof--查看进程打开的文件 59、iostat、pidstat--查看io信息和进程信息统计 60、chown -R username:groupname 文件名--递归更改用户和用户组文件信息 61、rm -rf --强制删除,最好在执行前敲一下pwd确认一下是不是想删的东西。 Docker 1、docker run --启动镜像 2、docker pull --拉取镜像 3、docker push --推镜像 4、docker ps --显示运行的容器 5、docker save--保存镜像 6、docker load --加载镜像 7、docker rm --删除镜像 8、docker cp--拷贝数据 9、docker version --显示docker版本信息 10、docker info --显示容器信息 11、docker login --登录镜像仓库 12、docker images--显示镜像信息 13、docker kill --杀死容器相关进程 14、docker export/import--打包、解包。 15、docker pause--暂停某一容器的所有进程 16、docker tag --打标签 17、docker logs --查看容器日志 K8S 1、kubectl get po --查看微服务 2、kubectl get ns --查看命名空间 3、kubectl get cm--查看配置文件 4、kubectl get po -n ns名称--查看某一命名空间下的微服务 5、kubectl get pv --查看持久卷 6、kubectl get pvc --查看持久卷申请 7、kubectl logs -f 微服--查看微服日志 8、kubectl get cs--检查k8s集群是否健康 9、kubectl cluster -info --查看集群信息 10、kubectl get po -o wide--查看微服具体运行在哪个从节点node上。 11、kubectk get po -o yaml --查看pod的详细信息 12、kubectl get po -o json --以json的格式输出pod 信息 13、kubectl exec -it pod名 -n /bin/bash --进入pod 14、kubectl create 文件名.yaml --重建资源 15、kubectl apply -f 文件名.yaml --是配置文件资源重新生效 16、kubectl delete po -n --删除pod,让集群自动分配重启 17、删除各种资源 kubectl delete -f 文件名 kubectl delete pod pod名 kubectl delete rc rc名 kubectl delete service service名 kubectl delete pod --all 18、部署pod在ns上 kubectl -n ns run gaogetest --images=镜像名称 --replicas=1