关于docker:第四篇Windows-Docker-安装之直播商城-b2b2c电子商务技术总结

Windows Docker 装置Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。 Docker 本质上是在曾经运行的 Linux 下制作了一个隔离的文件环境,因而它执行的效率简直等同于所部署的 Linux 主机。 因而,Docker 必须部署在 Linux 内核的零碎上。如果其余零碎想部署 Docker 就必须装置一个虚构 Linux 环境。 在 Windows 上部署 Docker 的办法都是先装置一个虚拟机,并在装置 Linux 零碎的的虚拟机中运行 Docker。 Win10 零碎Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官网装置形式,这个办法仍然属于先在虚拟机中装置 Linux 而后再装置 Docker 的办法。 Docker Desktop 官网下载地址: 留神:此办法仅实用于 Windows 10 操作系统专业版、企业版、教育版和局部家庭版! 装置 Hyper-VHyper-V 是微软开发的虚拟机,相似于 VMWare 或 VirtualBox,仅实用于 Windows 10。这是 Docker Desktop for Windows 所应用的虚拟机。 然而,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无奈应用!如果你必须在电脑上应用其余虚拟机(例如开发 Android 利用必须应用的模拟器),请不要应用 Hyper-V! ...

September 13, 2021 · 2 min · jiezi

关于docker:dockerflask快速构建服务接口二

系列其余内容 docker疾速创立轻量级的可移植的容器✓docker&flask疾速构建服务接口✓docker&uwsgi高性能WSGI服务器生产部署必备docker&gunicorn高性能WSGI服务器生产部署必备docker&nginx&gunicorn实现负载平衡docker&ngxtop并实时解析nginx日志docker&supervisor监控你的服务docker&pyinstaller两步法构建小体积容器locust对你的服务做高并发测试postman热门的API调试工具环境依赖本教程是基于redhat linux服务器的python: 3.8.3click==8.0.1Flask==2.0.1Flask-Limiter==1.4itsdangerous==2.0.1Jinja2==3.0.1limits==1.5.1MarkupSafe==2.0.1six==1.16.0Werkzeug==2.0.1WTForms==2.3.3本文次要内容 包含docker部署flask服务、文件夹挂载、设置flask日志、设置参数验证局部、设置固定ip的申请次数限度、设置ip白名单。docker&flask创立容器python文件 设置debug=True,当文件更新时,服务会主动重启import flask, jsonfrom flask import requestimport platform# 创立一个服务,把以后这个python文件当做一个服务app = flask.Flask(__name__)@app.route('/test', methods=['get'])def login(): username = request.values.get('name') pwd = request.values.get('pwd') system = platform.system() systemnode = platform.node() system_info = "平台是{0} & 运行节点是{1}".format(system, systemnode) if username and pwd: if username=='xiaoming' and pwd=='111': resu = {'code': 200, 'message': '登录胜利', 'system':system_info} return json.dumps(resu, ensure_ascii=False) else: resu = {'code': -1, 'message': '账号密码谬误', 'system':system_info} return json.dumps(resu, ensure_ascii=False) else: resu = {'code': 10001, 'message': '参数不能为空', 'system':system_info} return json.dumps(resu, ensure_ascii=False)if __name__ == '__main__': app.run(debug=True, port=2222, host="0.0.0.0")Dockerfile文件FROM python:3.8WORKDIR /home/myfirstapi/RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeCOPY . .RUN pip install -r requirements.txt -q -i https://pypi.tuna.tsinghua.edu.cn/simple && \rm -rf /var/cache/apk/*expose 2222CMD ["python3", "flask_test.py"]为了测试不便咱们特意设置 ...

September 12, 2021 · 2 min · jiezi

关于docker:docker快速创建轻量级的可移植的容器一

系列其余内容 docker疾速创立轻量级的可移植的容器✓docker&flask疾速构建服务接口docker&uwsgi高性能WSGI服务器生产部署必备docker&gunicorn高性能WSGI服务器生产部署必备docker&nginx&gunicorn实现负载平衡docker&ngxtop并实时解析nginx日志docker&supervisor监控你的服务docker&pyinstaller两步法构建小体积容器locust对你的服务做高并发测试postman热门的API调试工具docker+flask+gunicorn+nginx+pyinstaller+supervisor搭建一个轻量级满足高并发性能的服务docker装置本教程是基于redhat linux服务器的介绍 docker为应用程序提供了隔离的运行空间:镜像作为根底,一个镜像能够创立多个容器,不便服务的疾速部署和迁徙;每个容器内都蕴含一个独享的残缺用户环境空间,并且一个容器内的变动不会影响其余容器的运行环境;在线装置阿里云装置docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 启动服务 # 先切换到root用户, 顺次执行以下命令systemctl enable docker # 开机主动启动dockersystemctl start docker # 启动dockersystemctl restart docker # 重启dokcer 离线装置关上网页抉择对应的docker版本https://download.docker.com/linux/static/stable/x86_64/上传到服务器(咱们抉择的版本是docker-rootless-extras-20.10.5.tgz)tar -xvf docker-20.10.5.tgzcp docker/* /usr/bin/dockerd &docker -v 删除docker查问以后零碎装置了哪些docker包 yum list installed | grep dockeryum remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64 docker-ce-rootless-extras.x86_64docker -v 构建镜像应用开源镜像 docker pull alpine # 轻量级,但无奈执行python打包的exe文件docker pull debian:buster-slim # 体积也比拟小。能够执行python打包的exe文件 构建你的第一个镜像 具体的服务构建能够建下篇内容#docker&flask疾速构建服务接口#。 验证flask服务的有效性# flask_test.py为咱们结构的flask服务python3 flask_test.py即可启动服务wget -O apirsult.txt "http://127.0.0.1:2222/test?name=xiaoming&pwd=123 ...

September 11, 2021 · 2 min · jiezi

关于docker:第二篇Docker-架构之Spring-Cloud直播商城-b2b2c电子商务技术总结

Docker 架构Docker 包含三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比方官网镜像 ubuntu:16.04 就蕴含了残缺的一套 Ubuntu16.04 最小零碎的 root 文件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是动态的定义,容器是镜像运行时的实体。容器能够被创立、启动、进行、删除、暂停等。仓库(Repository):仓库可看成一个代码控制中心,用来保留镜像。Docker 应用客户端-服务器 (C/S) 架构模式,应用近程API来治理和创立Docker容器。 Docker 容器通过 Docker 镜像来创立。 容器与镜像的关系相似于面向对象编程中的对象与类。Docker Registry Docker 仓库用来保留镜像,能够了解为代码管制中的代码仓库。 Docker Hub( ) 提供了宏大的镜像汇合供应用。 一个 Docker Registry 中能够蕴含多个仓库(Repository);每个仓库能够蕴含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会蕴含同一个软件不同版本的镜像,而标签就罕用于对应该软件的各个版本。咱们能够通过 <仓库名>:<标签> 的格局来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 Docker Machine Docker Machine是一个简化Docker装置的命令行工具,通过一个简略的命令行即可在相应的平台上装置Docker,比方VirtualBox、 Digital Ocean、Microsoft Azure。

September 10, 2021 · 1 min · jiezi

关于docker:第一篇Docker-教程之Spring-Cloud直播商城-b2b2c电子商务技术总结

Docker 教程Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。 Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。 容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),咱们用社区版就能够了。谁适宜浏览本教程?本教程适宜运维工程师及后端开发人员,通过本教程你能够一步一步理解 Docker 的应用。 浏览本教程前,您须要理解的常识在浏览本教程前,你须要把握 Linux 的常用命令。你能够通过 Linux 教程 来学习相干命令。 Docker的利用场景Web 利用的自动化打包和公布。 自动化测试和继续集成、公布。 在服务型环境中部署和调整数据库或其余的后盾利用。 从头编译或者扩大现有的 OpenShift 或 Cloud Foundry 平台来搭建本人的 PaaS 环境。 Docker 的长处Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您可能将应用程序与基础架构离开,从而能够疾速交付软件。借助 Docker,您能够与管理应用程序雷同的形式来治理基础架构。通过利用 Docker 的办法来疾速交付,测试和部署代码,您能够大大减少编写代码和在生产环境中运行代码之间的提早。 1、疾速,统一地交付您的应用程序Docker 容许开发人员应用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。 容器非常适合继续集成和继续交付(CI / CD)工作流程,请思考以下示例计划: 您的开发人员在本地编写代码,并应用 Docker 容器与共事共享他们的工作。他们应用 Docker 将其应用程序推送到测试环境中,并执行主动或手动测试。当开发人员发现错误时,他们能够在开发环境中对其进行修复,而后将其重新部署到测试环境中,以进行测试和验证。测试实现后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简略。2、响应式部署和扩大Docker 是基于容器的平台,容许高度可移植的工作负载。Docker 容器能够在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。 Docker 的可移植性和轻量级的个性,还能够使您轻松地实现动静治理的工作累赘,并依据业务需要批示,实时扩大或拆除应用程序和服务。 3、在同一硬件上运行更多工作负载Docker 笨重疾速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的代替计划,因而您能够利用更多的计算能力来实现业务指标。Docker 非常适合于高密度环境以及中小型部署,而您能够用更少的资源做更多的事件。 ...

September 10, 2021 · 1 min · jiezi

关于docker:第十篇-Git-远程仓库Github之Spring-Cloud直播商城-b2b2c电子商务技术总结

Git 近程仓库(Github)Git 并不像 SVN 那样有个核心服务器。 目前咱们应用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其余开发人员单干。 你就须要将数据放到一台其余开发人员可能连贯的服务器上。 本例应用了 Github 作为近程仓库,你能够先浏览咱们的 Github 扼要教程。增加近程库要增加一个新的近程仓库,能够指定一个简略的名字,以便未来援用,命令格局如下: git remote add [shortname] [url]本例以 Github 为例作为近程仓库,如果你没有 Github 能够在官网 https://github.com/注册。 因为你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以咱们须要配置验证信息: 应用以下命令生成 SSH Key: $ ssh-keygen -t rsa -C "youremail@example.com"前面的 your_email@youremail.com 改为你在 Github 上注册的邮箱,之后会要求确认门路和输出明码,咱们这应用默认的一路回车就行。 胜利的话会在 ~/ 下生成 .ssh 文件夹,进去,关上 id_rsa.pub,复制外面的 key。 $ ssh-keygen -t rsa -C "429240967@qq.com"Generating public/private rsa key pair.Enter file in which to save the key (/Users/tianqixin/.ssh/id_rsa): Enter passphrase (empty for no passphrase): # 间接回车Enter same passphrase again: # 间接回车Your identification has been saved in /Users/tianqixin/.ssh/id_rsa.Your public key has been saved in /Users/tianqixin/.ssh/id_rsa.pub.The key fingerprint is:SHA256:MDKVidPTDXIQoJwoqUmI4LBAsg5XByBlrOEzkxrwARI 429240967@qq.comThe key's randomart image is:+---[RSA 3072]----+|E*+.+=**oo ||%Oo+oo=o. . ||%**.o.o. ||OO. o o ||+o+ S ||. || || || |+----[SHA256]-----+回到 github 上,进入 Account => Settings(账户配置)。右边抉择 SSH and GPG keys,而后点击 New SSH key 按钮,title 设置题目,能够轻易填,粘贴在你电脑上生成的 key。增加胜利后界面如下所示为了验证是否胜利,输出以下命令: ...

September 10, 2021 · 3 min · jiezi

关于docker:Docker使用简介一Docker的安装及常用命令

一、概述什么是容器容器技术曾经成为应用程序封装和交付的核心技术容器技术的外围有以下几个内核技术组成:--Cgroups(Control Groups) 资源管理--NameSpace 过程隔离--SElinux 平安 因为在物理机上施行隔离,启动一个容器,能够像启动一个过程一样疾速 什么是DockerDocker是残缺的一套容器管理系统Docker提供了一组命令,让用户更加不便间接地应用容器技术,而不须要过多关怀底层内核技术 Docker长处相比于传统的虚拟化技术,容器更加简洁高效传统虚拟机须要给每个VM装置操作系统容器应用的共享公共库和程序 Docker毛病容器的隔离性没有虚拟化强共用Linux内核,安全性有先天缺点SElinux难以驾驭监控容器和容器排错是挑战 二、Docker的装置装置前筹备操作系统 Linux CentOS 7.5敞开防火墙(不是必须,防止引发一些防火墙导致的问题) 零碎版本 [root@docker01 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)Docker的装置能够通过配置yum源或下载安装包装置以下通过yum源形式装置 1.配置yum源 装置docker关上官网找到适配零碎的yum源 按提醒装置即可,yum源站点在国外如果因为网络起因装置失败,换成下载安装包装置官网:https://docs.docker.com/engin... $ sudo yum install -y yum-utils$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo$ sudo yum install docker-ce docker-ce-cli containerd.io[root@docker01 ~]# systemctl restart docker //开启docker服务[root@docker01 ~]# systemctl status docker //查看docker服务状态[root@docker01 ~]# systemctl enable docker //开启docker服务开机启动[root@docker01 ~]# ifconfig //有docker0阐明环境部署实现docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:d5:18:74:94 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0三、Docker的的常用命令Docker镜像常用命令** ...

September 9, 2021 · 4 min · jiezi

关于docker:性能环境之docker操作指南3全网最全

docker run Usage: docker run [OPTIONS] IMAGE COMMAND -a -a,--attach=[]Attach to STDIN, STDOUT or STDERR 如果在执行run命令时没有指定-a,那么docker默认会挂载所有规范数据流,包含输入输出和谬误。你能够特地指定挂载哪个规范流。 $ docker run -a stdin -a stdout -i -t ubuntu:14.04/bin/bash(只挂载规范输入输出) --add-host --add-host=[]Add a custom host-to-IP mapping (host:ip) 增加host-ip到容器的hosts文件 $ docker run -it --add-host db:192.168.1.1 ubuntu:14.04/bin/bashroot@70887853379d:/# cat /etc/hosts172.17.0.270887853379d127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters192.168.1.1 db --blkio-weight --blkio-weight=0Block IO (relative weight), between 10 and 1000 绝对于CPU和内存的配额管制,docker对磁盘IO的管制绝对不成熟,大多数都必须在有宿主机设施的状况下应用。次要包含以下参数: device-read-bps:限度此设施上的读速度(bytes per second),单位能够是kb、mb或者gb.-device-read-iops:通过每秒读IO次数来限度指定设施的读速度。–device-write-bps :限度此设施上的写速度(bytes per second),单位能够是kb、mb或者gb。–device-write-iops:通过每秒写IO次数来限度指定设施的写速度。–blkio-weight:容器默认磁盘IO的加权值,有效值范畴为10-100。–blkio-weight-device: 针对特定设施的IO加权管制。其格局为DEVICE_NAME:WEIGHT存储配额管制的相干参数,能够参考Red Hat文档中blkio这一章,理解它们的具体作用。磁盘IO配额管制示例blkio-weight要使–blkio-weight失效,须要保障IO的调度算法为CFQ。能够应用上面的形式查看: ...

September 8, 2021 · 5 min · jiezi

关于docker:性能环境之docker操作指南2全网最全

docker [OPTIONS] commandUsage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h | --help | -v | --version ] A self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files -D, --debug=false Enable debug mode -H, --host=[] Daemon socket(s) to connect to -h, --help=false Print usage -l, --log-level=info Set the logging level --tls=false Use TLS; implied by --tlsverify --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA ...

September 7, 2021 · 13 min · jiezi

关于docker:DOCKER

第一章 Docker 概述什么时DockerDocker 为什么呈现?开发加运维—— 开发打包部署上线,一套流程 java - jar(环境) - 镜像 - Docker 仓库 - 下载公布镜像Docker 给以上问题提出了解决方案 Docker 通过隔离机智,能够将服务器利用到极致 实质:所有的技术都是因为呈现了问题,须要去解决 Docker历史容器技术进去之前,应用的虚拟机技术 vm: linux centos 原生镜像, 须要开启多个虚拟机dockers, 隔离 镜像(最外围的环境)Docker 基于Go 开发的Dockerdocker hub Docker能干嘛虚拟机技术资源占用多冗余步骤多启动很慢= 容器化技术容器化技术不是模仿的一个残缺的操作系统 比拟Docker和虚拟机技术 传统虚拟机,虚构出一套硬件,运行一个残缺的操作系统,而后在这个零碎上装置和运行软件容器内的利用间接运行在宿主机的内容,容器没有本人的内核,没有虚构硬件,所以就轻便了每个容器间时相互隔离,每个容器内都有属于本人的文件系统,互不影响DevOps利用更疾速的交付和部署传统:一堆帮忙文档,安装程序Docker:打包镜像公布测试,一件运行更便捷的降级和扩缩容应用Docker,部署利用就和搭积木一样我的项目大突围一个镜像,扩大服务器更简略的零碎运维在容器化之后,咱们的开发,测试环境都是高度一致的更高效的计算资源利用Docker是内核级别的虚拟化, 能够在一个物理机上运行很多容器实例Docker 装置Docker中的名词概念

September 7, 2021 · 1 min · jiezi

关于docker:生产环境下如何优雅地使用-Docker-运行宝塔面板

<p>此计划可能是全网最快的 宝塔面板 部署计划。 温习计算机网络时轻度折腾了 Linux、Docker、路由器 等,竟忽然想到 Docker 部署宝塔面板的完满解决方案。在此应用 Python 开发并制作了宝塔面板 Docker 镜像。</p> <p>您可能存在疑难,宝塔面板为何不间接装到零碎中?咱们应用不同的服务器,往往产生较大环境差别,CentOS、Debian、Ubuntu?每次新装宝塔面板,都须要抉择对应零碎的脚本,漫长的装置过程不提,首次登录须要应用系统生成的账号和明码,每次搭建须要重新配置局部环境,同时保留好每个服务器的 url、账户、明码。如果您和我一样,较高频率地应用服务器开发,便感到非常繁琐。有没有一个工具能一键秒建宝塔面板,并在搭建过程中配置好账户信息?由此便失去了明天的配角,cyberbolt/baota。依然有疑难,宝塔面板运行的生产环境,如 MySQL,并不适宜将数据全副存储在容器中,理论工作中可能遇到安全隐患。在此我提供了 计划二,生产环境中将容器内宝塔面板的运行目录挂载至宿主机硬盘中。您会发现,无论是 计划一 还是 二,对罕用 Docker 的开发者来说,都远比间接装置宝塔便捷。在 Docker 中运行宝塔面板,因为容器的隔离性,惟一的不同便是 舍弃了局部零碎性能,您间接通过宝塔批改零碎,只能作用于容器,并不会影响宿主机零碎,但这恰好也是容器的长处。而罕用的 Nginx、MySQL(MariaDB) 等均能完满应用。</p> <p> </p> <p>Docker 部署宝塔面板</p> <p>此计划可能是全网最快的 宝塔面板 部署计划。该镜像基于 宝塔Linux正式版 7.7.0(官网污浊版,可降级) 制作。保护脚本应用 Python 开发,源码和 Dockerfile 均已上传至 GitHub(欢迎您的 Star)。</p> <p>本镜像仅保留了最精简的 宝塔面板,未装置任何插件。初始化容器后,您能够依据须要抉择装置插件。"Simple is better than complex!" 此外,如果您在生产环境下部署宝塔面板,请务必参考 计划二 创立容器。</p> <p>应用办法如下:</p> <p>(注:为了不便部署,该镜像去除了平安入口,您能够自行配置)</p> <p>计划一(最快化部署)</p> <pre>docker run -itd --net=host --restart=always --name baota cyberbolt/baota:latest -port 端口号 -username 用户名 -password 明码</pre> <p>示例如</p> <pre>docker run -itd --net=host --restart=always --name baota cyberbolt/baota:latest -port 8888 -username cyberbolt -password abc123456</pre> ...

September 6, 2021 · 2 min · jiezi

关于docker:如何安装部署solr

Solr是一个独立的企业级搜寻应用服务器,它对外提供相似于Web-service的API接口。用户能够通过http申请,向搜索引擎服务器提交肯定格局的XML文件,生成索引;也能够通过Http Get操作提出查找申请,并失去XML格局的返回后果。 特点:Solr是一个高性能,采纳Java开发,基于Lucene的全文搜寻服务器。同时对其进行了扩大,提供了比Lucene更为丰盛的查询语言,同时实现了可配置、可扩大并对查问性能进行了优化,并且提供了一个欠缺的性能治理界面,是一款十分优良的全文搜索引擎。 工作形式:文档通过Http利用XML 加到一个搜寻汇合中。查问该汇合也是通过http收到一个XML/JSON响应来实现。它的次要个性包含:高效、灵便的缓存性能,垂直搜寻性能,高亮显示搜寻后果,通过索引复制来进步可用性,提供一套弱小Data Schema来定义字段,类型和设置文本剖析,提供基于Web的治理界面等。上面咱们就来学习一下如何简略疾速的装置部署好solr服务1.找到solr的装置服务可点击试用。2.装置部署增加节点-抉择版本-填写参数-部署胜利装置部署过程简略又疾速,具体的装置教程如下:如何增加节点如何装置部署solr

September 6, 2021 · 1 min · jiezi

关于docker:LimaDocker-Desktop-for-Mac-的免费开源且自由的替代品

大家好,我是张晋涛。 近期,Docker Inc. 公司忽然批改了其产品定价和策略,Docker Desktop for Mac/Win 不再 收费 供大型企业内集体应用。 对于此新闻中波及的条款,这里就不再开展介绍了。我来为大家介绍 一款收费、自在、开源的 Docker for Mac 替代品,containerd & Lima 。 你只须要执行以下命令即可疾速体验: $ brew install lima$ limactl start$ lima nerdctl run -it --rm alpine留神:如果是 Arm 版的 Mac 则须要装置一个额定的 QEMU 的 patch ,请参考 Lima 的文档。 什么是 containerd ? 什么是 nerdctl ?containerd 是一个开源的容器运行时,被很多我的项目所应用,包含 Docker,和很多云厂商默认配置的 Kubernetes 集群,例如 AKS, EKS 和 GKE。 因为 containerd 我的项目的外围范畴仅限于非面向用户的区域,因而用户很难间接与 containerd 进行交互。所以咱们近期奉献了一个人性化的 CLI 作为 containerd 的非核心子项目:nerdctl 。 nerdctl 的性能和用法简直与 Docker CLI 雷同,然而 nerdctl 还反对 Docker 中不存在的几个 containerd 的前沿性能。此类性能包含但不限于 提早拉取(stargz) 和 运行加密镜像(ocicrypt)。 ...

September 5, 2021 · 2 min · jiezi

关于docker:记docker容器内volume-mount实时更新

记docker 容器内 volume mount 实时更新一.查看容器配置docker inspect [container id or name] "Mounts": [ { "Type": "bind", "Source": "D:\\workspace\\dracohub", "Destination": "/app", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "D:\\workspace\\dracohub\\deploy\\php.ini", "Destination": "/opt/bitnami/php/conf/php.ini", "Mode": "", "RW": false, "Propagation": "rprivate" } ],Propagation 的值为 rprivate , 文件夹不实时同步的起因就是因为这个,官网文档有个表格,我贴在这里 Propagation settingDescriptionsharedSub-mounts of the original mount are exposed to replica mounts, and sub-mounts of replica mounts are also propagated to the original mount.slavesimilar to a shared mount, but only in one direction. If the original mount exposes a sub-mount, the replica mount can see it. However, if the replica mount exposes a sub-mount, the original mount cannot see it.privateThe mount is private. Sub-mounts within it are not exposed to replica mounts, and sub-mounts of replica mounts are not exposed to the original mount.rsharedThe same as shared, but the propagation also extends to and from mount points nested within any of the original or replica mount points.rslaveThe same as slave, but the propagation also extends to and from mount points nested within any of the original or replica mount points.rprivateThe default. The same as private, meaning that no mount points anywhere within the original or replica mount points propagate in either direction.我大体上翻译一下: ...

September 3, 2021 · 2 min · jiezi

关于docker:Docker-介绍-一

工具与资源核心帮忙开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源https://developer.aliyun.com/... 本案例借鉴 https://topsale.gitbooks.io/j... dubbo/chapter3/Docker%E5%8A%9F%E8%83%BD%E7%89%B9%E7%82%B9.html Docker 是一个开源的利用容器引擎,基于Go语言并遵循Apacher 2.0 协定开源 Docker 引擎,是一个蕴含以下次要组件的客户端服务程序(Docker 引擎的流程图) 是一种服务器,它是一个被称为守护过程并且长时间运行的程序,Rest api 用于指定程序能够用来与守护过程进行通信的接口,并批示它能够做什么,一个命令行的界面(cli) 工具的客户端。 Docker 的性能特点:轻松快捷的配置: 这是Docker 的一个次要的性能,能够帮忙咱们轻松快捷的配置零碎,能够在更少的工夫和精力下部署代码,因为Docker 能够在各种个样的环境中应用,基础架构不再要求与用用程序的环境相关联 进步工作效率: 通过放宽技术配置和利用的疾速部署,毫无疑问,它节约了工夫进步了生产率,Docker 不仅有助于在孤立的环境中执行应用程序(每一个利用是一个独自的环境,每个环境都有一份独立的OS 零碎),而且还缩小资源 利用隔离: Docker 提供用于在隔离环境中运行应用程序的容器,每个容器都独立于另一个容器,并容许任何类型的应用程序(因为,每个容器的底层都有一个独自的os 机制) 云调用 它是Docker 容器的集群和调度的工具,Swarm 应用Docker api 作为其 前端,这有助于咱们应用何种工具来管制它,它还能够将Docker 主机 集群 管制一个虚拟主机,这是一个用于启用可拔插后端的自组织引擎组,应用Swarm 来进行治理集群 路有网 他能够用于节点上已公布端传入申请路由到流动容器,即便节点上没有工作正在运行此性能也能够实现链接(容器与容器之间通信的路有网) 服务 服务值容许执行集群内容器状态的工作列表,每个工作示意一个应该运行的容器的实例,并且Swarm在节点之间的调度 平安治理 他容许将窃密的数据保留到云群(Swarm)中,而后抉择给与服务拜访某些窃密数据,它蕴含一些重要的命令给引擎,如窃密的数据,窃密数据的创立等 Docker 是cs模式(客户端 --- 服务器端) 应用近程的api 来治理和创立Docker 容器 Docker 容器通过Docker 镜像来进行创立 容器和镜像的关系相似于 面向对象编程中的类与对象 先有镜像才有容器,咱们在应用容器端通过api 操作的是容器 首先应用Docker pull 去调用 Docker daemon ,如果此时本地仓库中有镜像,则能够间接创立容器,并且能够创立多个,然而当应用Docker pull 去调用 Docker daemon 去本地仓库中查找镜像不存在的时候,则会去Docker 的仓库中拉取,并且当拉取到本地之后,应用Docker run 去进行创立容器,并且能够创立多个对象, ...

August 31, 2021 · 1 min · jiezi

关于docker:Docker部署NMPComposerSwooleRedis扩展

Docker部署NMP+Composer+(Swoole、Redis扩大)1、装置Mysql因为我后续装置PHP须要连贯到Mysql,所以这边咱们先装置一下Mysql的容器 docker pull mysql:latest这里我是拉取了最新版本,:latest代表最新版,如果你想下载5.7,那么命令应该如下 docker pull mysql:5.7接着咱们能够用docker images命令查看下是否胜利拉取该镜像到本地 接着咱们创立数据卷,如果是新建容器,那么就是为了容器内产生的数据同步更新到宿主机,以防容器解体或者损坏时数据不会失落 当初创立Mysql的配置文件夹、数据文件夹、日志文件夹 mkdir /docker/conf/mysqlmkdir /docker/data/mysqlmkdir /docker/logs/mysql在/docker/conf/mysql目录下新建mysql.cnf配置文件,如下 [mysqld]pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqllog-error = /var/log/mysql/error.log# By default we only accept connections from localhostbind-address = 0.0.0.0# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshake#skip-grant-tables [client]default-character-set=utf8[mysql]default-character-set=utf8接着咱们运行容器 docker run -p 3306:3306 --name mysql -v /docker/conf/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /docker/logs/mysql:/var/log/mysql -v /docker/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypass --privileged=true --restart=always -d mysql:latest接着能够用命令查看运行状况 docker ps 2、装置PHP首先第一步,一样是拉取镜像 ...

August 27, 2021 · 2 min · jiezi

关于docker:docker-自定义网络

docker 容器的网络通信形式有多种,然而自定义网络最灵便,最有用,这里就只介绍自定义网络1. 创立自定义网络docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 lyj-net # 以桥接(bridge)形式,创立名称为lyj-net的网络2. 查看网络 docker network ls 3. 启动容器,连贯到自定义网络docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 --net lyj-net mysql:5.7 # 运行mysql5.7,连到lyj-net 这个自定义网络4. 查看容器网络docker inspect 容器id # 还能够进入容器,ping宿主机或者其余容器 须要将已创立好的容器,连到某网路,也能够用 docker network connect 容器name 自定义网络name,如: docker network connect mysql01 lyj-net

August 27, 2021 · 1 min · jiezi

关于docker:dockerfile-构建springboot镜像并启动

1. dockerfile 构建镜像步骤编写dockerfile文件docker build 构建出镜像docker run 运行镜像docker push 公布镜像2. dockerfile 语法FROM # 从哪个根底镜像开始构建MAINTAINER # 镜像作者RUN # 构建镜像须要运行的命令ADD # 将文件从门路<src> 复制增加到容器门路 <dest>WORKDIR # 切换工作目录,docker默认工作目录是 /VOLUME # 挂载的目录,个别用来寄存须要放弃的数据EXPOSE # 容器裸露的端口CMD # 容器启动运行的命令,有多个的话,只有最初一个失效ENTRYPOINT # 容器启动运行的命令,能够追加ONBUILD # 让指令提早执行,提早到下一个应用FROM的dockerfile建设image时执行,只提早一次COPY # 与ADD作用雷同,不过ADD会解压文件ENV # 构建的时候设置环境变量3. dockerfile 构建与运行springboot镜像创立Dockerfile文件 FROM java:8 # 以java8镜像作为根底镜像MAINTAINER zhijiuqian # 作者WORKDIR app # 指定容器内运行命令的工作目录ADD iflytek-monitor-0.0.1-SNAPSHOT.jar app.jar # 将jar包拷贝到镜像中,命名为app.jarEXPOSE 7777 # 裸露容器端口为7777,iflytek-monitor-0.0.1-SNAPSHOT.jar利用的启动端口也是7777ENTRYPOINT ["java","-jar","app.jar"] # 启动命令将Dockerfile 与 iflytek-monitor-0.0.1-SNAPSHOT.jar 都上传到服务器同一目录 构建镜像 docker build -t iflytek-monitor:v1.0 . # 留神前面有个点;如果Dockerfile 不在当前目录,可用 -f指定门路;docker ps -a 查看镜像 ...

August 27, 2021 · 1 min · jiezi

关于docker:DockerRedisBloom的使用

redis+RedisBloom的装置和应用如果你是linux开发环境,最新版的redis能够很不便的应用,但如果是Windows零碎的话,那么高版本的装置资源就很可贵了,docker能够疾速的解决你的后顾之忧。装置第一步: Launch RedisBloom with Docker docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest第二步: Use RedisBloom withredis-cli docker exec -it redis-redisbloom bash# redis-cli# 127.0.0.1:6379> 第三步: Start a new bloom filter by adding a new item # 127.0.0.1:6379> BF.ADD newFilter foo(integer) 1第四步: Checking if an item exists in the filter # 127.0.0.1:6379> BF.EXISTS newFilter foo(integer) 1第五步: 配置明码或其它相干设置 ...... 127.0.0.1:6379> config set requirepass xxxxxOK127.0.0.1:6379> config set notify-keyspace-events xE(error) NOAUTH Authentication required.127.0.0.1:6379> auth xxxxxOK127.0.0.1:6379> config set notify-keyspace-events xEOK127.0.0.1:6379>参考文献https://blog.csdn.net/qq\_29645505/article/details/87895303https://github.com/RedisBloom/RedisBloom#launch-redisbloom-with-dockerhttps://oss.redislabs.com/redisbloom/Quick\_Start/留神:连贯docker中的redis的时候,因为docker相当在windows中划一块做linux的独立运行环境。该环境有本人的地址:192.168.99.100,所以拜访的时候最简略的形式是去连贯该网址。6379 端口在虚机中网关中关上就能够内部连贯拜访了。 ...

August 26, 2021 · 1 min · jiezi

关于docker:docker-安装mysql超级简单

docker 装置mysql,比脱发还简略,不信请看: docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-testmysql:8.0# 配置项-d 后盾运行-p 端口映射,宿主机端口:容器内端口,实现服务器与容器的端口映射-v 卷挂载,宿主机文件地位:容器内文件地位,能够实现服务器与容器的文件关联-e 环境配置--name 容器名称其他软件装置同理,嘿嘿~

August 25, 2021 · 1 min · jiezi

关于docker:rocketmqconsole-docker启动命令

docker run -d --restart=always --name prd-rocketmq-console-p 17021:8080 -e "JAVA-OPTS=-Drocketmq-namesrv=xxxx:9876 -Dcom.rocketmq.sendMessageWithVipChannel=false -Dserver.contextPath=/rocketmq" -d stylelang/rocketmq-console-ng

August 23, 2021 · 1 min · jiezi

关于docker:叫到帮小程序-小程序-后台系统-后端-RESTFul-API-开发总结

一人全役,本我的项目由我山左立一人全役,包含 产品 - 原型 - 设计 - 开发。发在站酷的设计总结以及实机演示动图:地址技术选型前端官方网站:React + Ant Design 源码地址小程序:MPX(跨端框架,反对微信小程序、支付宝小程序)+ Vant weapp + iview weapp 客户端源码地址后盾零碎:Vue + Ant Design 源码地址后端RESTful api:FastAPI 源码地址(非完整版,无database config) MPX 并不是十分成熟的框架,总体开发体验要比 Taro 要好(个人感觉),Taro 的第一步,Taro Cli 就卡住我了,Taro 的 UI 框架外面的组件也有点瘠薄(可能当初更新了就不瘠薄了)。MPX是滴滴官网出的框架,最让我惊喜的就是,它能同时应用 iview weapp 和 Vant weapp 这两个小程序 UI 框架,这大大丰盛了开发者的抉择。 MPX的文档也十分欠缺,只是开发小程序如果应用第三方框架都要狂翻多个框架的开发文档和微信官网的开发文档,不然就会走很多弯路。我就已经遇到过无奈引入 Vant Dialog 的问题,前面发现单纯是因为本人引入形式不对,而滴滴的前端团队效率真的很高,早上发的 issue 下午就回复了(详情 ) 集体是更喜爱Vant weapp 这个 UI 框架的,它的复杂程度也比 iview weapp 稍高,所以我大部分的组件都应用了 Vant weapp。 起初我又看到了 Reamx 这个类 React 框架,个人感觉它比 Taro 要简洁,惋惜它的 UI 框架更加瘠薄。大概率下一个我的项目会应用 Remax。 ...

August 22, 2021 · 1 min · jiezi

关于docker:docker-删除镜像错误Error-No-such-image

甲骨文 arm vps ol8新装docker docker run hello-world测试胜利后删除镜像 docker rmi -f hello-worlddocker提醒:"Error: No such image"在stackoverflow找到了答案 sudo service docker stopsudo rm -rf /var/lib/dockersudo service docker start

August 22, 2021 · 1 min · jiezi

关于docker:Dokcer-CentOS-7-Anaconda-FastAPI-PostgreSQL-超详细配置-出错解决

首先讲讲我的配置清单宿主机 OS: CentOS 7Nginx 版本:1.16.1Docker 版本: 19.03.13Docker 容器零碎: CentOS 7Python 虚拟环境治理: AnacondaPython 版本: Python 3.7选用的后端框架: FastapiPython 操作 PostgreSQL: Psycopg2 (毋容置疑)数据库: PostgreSQL 12(毋容置疑 + 1) 宿主机中须要做的配置1. 装置 & 配置 Nginx大部分内容出自此链接:https://juejin.im/post/684490... # 装置 Nginxyum -y install nginx# 卸载 Nginxyum remove nginx# 设置开机启动,倡议关上systemctl enable nginx# 启动 nginx 服务,装置后需运行systemcrl start nginx# 进行 nginx 服务systemcrl stop nginx# 重启 nginx 服务systemcrl restart nginx我的 Nginx 配置,以下仅为局部配置,可下载一键脚本进行配置。如果不晓得本人的 Nginx 配置的文件地位在哪,可应用 systemctl status nginx 查看。 # 编辑的文件# 我的文件地址是# vi /etc/nginx/conf.d/default.confserver { listen 80; server_name www.xxx.xxx; rewrite ^(.*)$ https://$host$1 permanent;}server { listen 443 ssl http2; server_name www.xxx.xxx; root /etc/nginx/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } # fastapi main location /helloworld { proxy_pass http://127.0.0.1:8011; } # fastapi docs location /docs { proxy_pass http://127.0.0.1:8011/api/docs; }} ...

August 20, 2021 · 6 min · jiezi

关于docker:搭漏洞环境难虚拟机容器了解一下

前言先说说 Kali Linux 的一个问题,有些同学问我 Kali 环境怎么搭,他弄了良久都没配置好,装置过程老出错,我感觉十分诧异。Kali 尽管是点历史遗留问题,我在几年前玩的时候用 ISO 文件搭建也真的有很多坑,然而当初都阔以下载虚拟机版本的 Kali VM 呀,下载完一导入,改一下网卡,开箱即用。 我把这个办法通知他之后,他的表情是:还能这样操作? 作为一个浸透人员,疾速搭建浸透测试环境是十分重要的一环,总不能将工夫节约在搭建下面吧?当然也不能轻易找个站日,给本人带来一些负面的影响。而罕用的破绽搭建形式有 VM 虚拟机和 Docker,应用过程都非常简单。先说说 VM 虚拟机吧 VM 虚拟机在各种破绽虚拟机的网页中的阐明页面中个别会有用户名明码之类的信息,仔细阅读就行。一般来说,Windows 域环境 、 Kali、根本的 nix 零碎就够你玩良久了,所以除下列两个之外,你个别还须要 Windows 各个软弱版本的 ISO,根本的 nix 零碎镜像等等。应用 VMware 或者 VirtualBox 都行。(请查看文末链接或点击) 1.Kali虚拟机版[1] 2.klionsec:残缺单域实战演练环境下载 3.Windows国外浸透工具包CommandVM[2] 4.52破解论坛专用破解虚拟机[3] Docker说完了 VM,来讲讲 Docker。有的同学可能不太熟悉,用简略几句稍做科普一下: 1.Docker 是一种虚拟机,但很轻量,效率更高 2.Docker 比 VM 启动快得多多多多多,关上/重启/敞开容器很快 3.迁徙不便,你能够日完之后给他人x(?,并且下一次想x的时候还是一样的感觉(? 4.Docker 环境隔离,不会x错中央(? 5.最爽的是 Docker 有很多封装好的镜像,能够间接拿来应用,并且学会了 Dockerfile/docker-compose (搜寻一下,有十分多的材料)的编写,搭建 web 环境会非常疾速,省了很多事儿,具体是啥坑可能当前你会晓得的,虚拟机搭环境太令人心碎了……6.另外,Docker 在运维中用得很多,因而学会了之后,如果平安做不上来你当前能够转运维了(误 对于 docker 的基础教程,我举荐到 https://www.runoob.com/docker/ 进行学习,根底应用非常简单。在搭浸透环境的时候,无需太过关注性能方面的问题(次要实现的是事务逻辑),所以不必太深刻理解 docker,基本上会 dokcer run 起来、映射个端口就行。 ...

August 19, 2021 · 1 min · jiezi

关于docker:Docker里的泰拉瑞亚来开黑

筹备docker装置,参考之前docker中部署开源的接口管理工具doclever中的docker装置局部,本篇环境wsl2的ubuntu零碎。泰拉瑞亚服务端文件,下载地址泰拉瑞亚服务端,如果链接生效,能够百度泰拉瑞亚官网找下载。构建筹备一个长期文件夹,将下载的服务端文件解压后,只须要copy linux版本进来就行。 $ mkdir temp# 给这个文件加上执行权限$ chmod +x linux/TerrariaServer.bin.x86_64$ cp linux temp/linux创立Dockerfile,与linux同级目录 $ vim Dockerfile编辑Dockerfile # 申明根底镜像,我这里用的ubuntu,大略80mFROM ubuntu:latest AS base# 在COPY命令后,扭转容器的默认门路,这里间接进入到游戏文件根目录WORKDIR /usr/local/tserver# 将来裸露7777端口,因为泰拉瑞亚服务端端口默认7777,没非凡必要不须要批改EXPOSE 7777# 将本地游戏文件复制到ubuntu的门路下COPY ./linux /usr/local/tserver # 当容器运行后执行的开服命令# ./TerrariaServer.bin.x86_64 可执行文件# -config 指定游戏配置文件# serverconfig.txt 游戏服务器配置文件ENTRYPOINT ["./TerrariaServer.bin.x86_64","-config","serverconfig.txt"]创立游戏服务器配置文件,在linux目录下,与游戏文件同级 $ vim serverconfig.txt文件放到文章的最初,配置依据须要自行批改,我这里配置的是: 指定地图名称 TerrariaMaster1423.wld指定地图加载门路 ./Worlds/端口 7777服务器明码 xxxx最大玩家数 8人地图难度 大师级地图尺寸 小型 ... 所有准备就绪,构建开始 # 不要遗记开端有个句点,这是示意从当前目录寻找Dockerfile$ docker build -t 1423_master_smallworld:v1 . 开黑测试启动 $ docker run --rm -it 1423_master_smallworld:v1 正式启动 # -it 启动后进入docker容器外部# --rm 当容器进行后删除容器# -p 端口映射到物理机# -v 卷映射,将游戏存档长久化到物理机硬盘上$ docker run -it --rm -p 7777:7777 -v /home/xsf/temp/Worlds:/usr/local/tserver/Worlds 1423_master_smallworld:v1 至于为什么肯定须要 -it 而不是 -d 至于后盾启动,因为游戏服务的限度,必须前置终端输入,否则会启动失败如果须要在近程服务器上启动,须要用screen或tmux配合启动,因为当敞开近程后,服务会主动敞开(没有守护过程) ...

August 19, 2021 · 3 min · jiezi

关于docker:集群镜像中的overlay2使用剖析

sealer是阿里巴巴开源的基于kuberentes的集群镜像开源技术,能够把整个集群整体打包。 sealer中集群镜像的存储和docker镜像很像,也采纳了写时复制的技术来晋升复用性。 本文聊一下overlay2。 写时复制COPY on Write在很多中央都会用到,比方git的存储,去批改一个文件并非真的批改, 而是把文件拷贝进去批改,读的时候读取下层的批改层,同样比方在ceph的后段存储 等零碎中都存在利用。益处是能够十分不便的进行回滚,以及存储复用,比方给虚拟机 做快照,那咱们并不需要把整个系统盘复制一份,而只须要用指针指一下快照的中央就好。 容器镜像同理,写时复制能够让多个利用共享一个根底镜像。 集群镜像中的写时复制集群镜像把整个集群打包,用写时复制的办法能够帮忙分布式应用共享k8s根底镜像。 以及能够很不便的把各种分布式应用镜像进行交融。 操作系统中应用overlay2mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work ./mergedoverlay文件系统分为lowerdir、upperdir、merged, 对外对立展现为merged,uperdir和lower的同名文件会被upperdir笼罩 workdir必须和upperdir是mount在同一个文件系统下, 而lower不是必须的 mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /mergedlowerdir能够是多个目录(后面笼罩前面),如果没有upperdir,那merged是read only. overlay只反对两层,upper文件系统通常是可写的;lower文件系统则是只读,这就示意着,当咱们对 overlay 文件系统做任何的变更,都只会批改 upper 文件系统中的文件 来个实际操作: overlay2├── lower1│ ├── a│ └── b├── lower2│ └── a├── merged├── upper│ └── c└── workmount -t overlay overlay -o lowerdir=lower1:lower2,upperdir=upper,workdir=work merged以上overlay2上面的几个目录就被合并了 对只在 lower 有的文件写时,则会做一个copy_up 的操作,先从 lower将文件拷贝一份到upper,同时为文件创建一个硬链接。此时能够看到 upper 目录下生成了两个新文件,写的操作只对从lower 复制到 upper 的文件失效,而 lower 还是原文件 删除 lower 和 upper 都有的文件时,upper 的会被删除,在 upper 目录下创立一个 ‘without’ 文件,而 lower 的不会被删除 ...

August 18, 2021 · 2 min · jiezi

关于docker:rustwasm写前端真香之请求数据md

sealer是阿里巴巴开源的基于kuberentes的集群镜像开源技术,能够把整个集群整体打包。 Sealer Cloud能够在线化帮忙用户进行集群打包分享和运行,Sealer cloud前后端也应用了十分先进的rust+wasm技术实现。 sealer cloud会与docker registry交互,将来你甚至能够把sealer cloud当作docker hub应用。 定义数据结构能够看到registry返回的数据: curl http://localhost:5000/v2/_catalog{"repositories":["centos","golang"]}所以对应返回的数据咱们定义个数据结构: #[derive(Deserialize, Debug, Clone)]pub struct RegistryCatalog { pub repositories: Vec<String>,}这个构造体用来接管后盾返回的数据,咱们还须要Model的构造体: pub struct Images { // props: Props, pub repos: Option<Vec<String>>, pub error: Option<String>, pub link: ComponentLink<Self>, pub task: Option<FetchTask>}音讯枚举,通过不同的音讯在页面更新时判断应该做什么样的动作: #[derive(Debug)]pub enum Msg { GetRegistryCatelog(Result<RegistryCatalog, anyhow::Error>),}页面首次初始化首次初始化的时候向后盾申请数据: fn rendered(&mut self, first_render: bool) { if first_render { ConsoleService::info("view app"); let request = Request::get("http://localhost:8001/v2/_catalog") .body(Nothing) .expect("could not build request."); let callback = self.link.callback( |response: Response<Json<Result<RegistryCatalog, anyhow::Error>>>| { let Json(data) = response.into_body(); Msg::GetRegistryCatelog(data) }, ); let task = FetchService::fetch(request, callback).expect("failed to start request"); self.task = Some(task); }}first_render用于判断是不是第一次渲染,不写在这外面可能会导致页面渲染死循环。ConsoleService::info 能够帮忙咱们往控制台打印调试信息定义一个request和一个申请胜利后的回调函数callbackcallback外部接管到数据后返回对应的音讯类型即可触发update函数(前面介绍)fetch函数触发http申请调用,传入request与callback重中之重,肯定要把task存到self.task外面,不然task立马被回收会触发一个The user aborted a request的谬误页面更新接口在first render的时候咱们向后盾申请了数据,callback函数会触发update的调用。把音讯带过来交给update函数解决。 ...

August 18, 2021 · 2 min · jiezi

关于docker:Docker与k8s的恩怨情仇八蓦然回首总览Kubernetes

在零碎介绍了如何理论部署一个K8S我的项目后,作为本系列文章的最初一篇,咱们一起来看看Kubernetes集群内容总览,再对一些更深层次的性能进行总结。 Kubernetes总览下图是一个k8s的总览构造内容 能够看到图中提到的这些功能模块中,还有一些是在本文中并没有呈现的: l  ConfigMap 用来存储用户配置文件定义的,通过其外部的Volume投射技术实现,其实也是Volume挂载的一种形式。这种形式不仅能够实现应用程序被的复用,而且还能够通过不同的配置实现更灵便的性能。在创立容器时,用户能够将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的形式进行配置注入。   l  Secret Secret 对象类型用来保留敏感信息,例如明码、OAuth 令牌和 SSH 密钥。 将这些信息放在Secret中比放在 Pod 的定义、容器镜像中、绝对于ConfigMap说更加平安和灵便。 Secret是规范的k8s资源对象,应用办法和ConfigMap十分相似。同时咱们能够对Secret进行访问控制,避免秘密数据被拜访 l  PV PVC是Kubernetes中长久化数据卷的实现形式,它是StatefulSet的外围性能,也是Pod长久化的必要伎俩,Kubernetes通过PV和PVC拆分,从而达到性能点的解耦。 除了文中提到的内容之外, Kubernetes集群的内容也远比咱们目前看到的简单的多,也还有很多内容期待着咱们摸索。 在这里,咱们对这些深层次的性能做一个总结,也是一个对深刻学习Kubernetes的梳理。 Kubernetes组件咱们平时做开发的过程中所应用的服务器(即宿主机),在Kubernetes集群中被称为Node节点。 同时在Kubernetes中存在一个或者多个Master节点管制多个宿主机实现集群,整个Kubernetes的外围调度性能根本都在Master节点上。 Kubernetes的次要性能通过五个大组件组成: kubelet:装置在Node节点上,用以管制Node节点中的容器实现Kubernetes的调度逻辑ControllerManager:是咱们上述所讲的控制器模式的外围治理组件,治理了所有Kubernetes集群中的控制器逻辑API Server:服务解决集群中的api申请,咱们始终写的kubectl,其实就是发送给API Server的申请,申请会在其外部进行解决和转发Scheduler:负责Kubernetes的服务调度,比方控制器只是管制Pod的编排,最初的调度逻辑是由Scheduler所实现并且发送申请给kubelet执行的Etcd:这是一个分布式的数据库存储我的项目,由CoreOS开发,最终被RedHat收买成为Kubernetes的一部分,它外面保留了Kubernetes集群中的所有配置信息,比方所有集群对象的name,IP,secret,configMap等所有数据,其依附本人的一致性算法能够保障在零碎中疾速稳固的返回各种配置信息,因而这也是Kubernetes和心中的外围组件定制化性能除了各种弱小的组件性能之外,Kubernetes也给用户提供了极高的自由度。 为了实现这种高度的自在,Kubernetes给用户提供了三个公开的接口,别离是: l  CNI(Container Networking Interface,容器网络接口):其定义了Kubernetes集群所有网络的链接形式,整个集群的网络都通过这个接口实现。只有实现了这个接口内所有性能的网络插件,就能够作为Kubernetes集群的网络配置插件,其外部包含宿主机路由表配置、7层网络发现、数据包转发等等都有各式各样的小插件,这些小插件还能够随便配合应用,用户能够依照本人的需要自在定制化这些性能 l  CSI(Container Storage Interface,容器存储接口)定义了集群长久化的一些标准,只有是实现这个接口的存储性能,就能够作为Kubernetes的长久化插件l  CRI(Container Runtime Interface,容器运行时接口):在Kubernetes的容器运行时,比方默认配置的Docker在这个集群的容器运行时,用户能够自由选择实现了这个接口的其余任意容器我的项目,比方之前提到过的containerd和rkt 这里讲一个乏味的点:CRI。 Kubernetes的默认容器是Docker,然而因为我的项目初期的竞争关系,Docker其实并不满足Kubernetes所定义的CRI标准,那怎么办呢? 为了解决这个问题,Kubernetes专门为Docker编写了一个叫DockerShim的组件,即Docker垫片,用来把CRI申请标准,转换成为Docker操作Linux的OCI标准(对,就是第二局部提到的那个OCI基金会的那个标准)。然而这个性能始终是由Kubernetes我的项目保护的,只有Docker公布了新的性能Kubernetes就要保护这个DockerShim组件。 于是,这个近期的音讯——Kubernetes将在明年的版本v1.20中删除删除DockerShim组件,意味着从明年的新版本开始,Kubernetes将全面不反对Docker容器的更新了。 但其实这对咱们一般开发者来说可能并没有什么影响,最坏的后果就是咱们的镜像须要从Docker换成其余Kubernetes反对的容器镜像。 不过依据这这段时间各个云平台放出的音讯来看,这些平台都会提供对应的转换措施,比方咱们还是提供Docker镜像,平台在公布运维的时候会把这些镜像转换成其余镜像;又或者这些平台会自行保护一个DockerShim来反对Docker,都是有解决方案的。 架构总览与总结这一部分咱们来看看Kubernetes的架构图: 通过这一系列的学习,作为一个一般程序员,不得不赞叹Google对编码这件事得深厚与极致,框架中因为太多仅因为解耦而产生的组件,并且还提供了这么大的自由度,不得不说是咱们活字格开发团队学习过程中遇到的一个很有技术深度的框架。 但这种过高的自由度也有负面作用。 在部署过程中,Kubernetes集群的复杂度十分高,部署一个满足生产环境需要的Kubernetes框架更是难上加难,网上还有专门卖Kubernetes生产环境集群部署的脚本程序,可见Kubernetes零碎的宏大。 在学习的过程中能够应用kinD或者minikube在本地以Docker的模式模仿一个Kubernetes集群,然而这种水平的学习间隔生产环境还是有肯定的差距。 总结这个系列文章,具体的形容了咱们活字格开发团队入地过程中碰到的几个难啃的神仙。 从云平台的倒退到k8s的具体应用,一步一步抽丝剥茧地向大家解释了一个云平台,从最后的虚拟机,到PaaS雏形,到Docker容器化,再到最终Kubernetes的状态的适度和演变。 人的记忆是须要依赖于前驱节点的,仅仅通过一篇文章就想把Kubernetes中波及的那些技术点和各种难记的名词一一解释分明显然是不可能的,咱们的想法是让大家通过一步一步理解整个云生态的演化过程,从而最终了解整个我的项目。 最初想送给大家一句话: 纸上得来终觉浅,绝知此事要躬行。 在咱们开发组成员第一遍看完这些文档之后感觉本人曾经齐全把握了,然而在理论的文档撰写过程中,才发现自己两眼一抹黑,不晓得从何开始。 太多的知识点只停留在据说过,仅仅晓得是什么的阶段。在这里还是倡议大家动起手来,试试文中提到的实例,咱们置信在本人入手写过一遍之后,你会对这些内容不一样的了解。 尽管本系列文章曾经完结,但在后续的内容中咱们也会持续为大家讲述更多葡萄城中新老葡萄在工作过程中遇到的各种技术揭秘、分享。 感觉内容不错点个赞再走吧~ 转载请注明出处:葡萄城官网,葡萄城为开发者提供业余的开发工具、解决方案和服务,赋能开发者。

August 18, 2021 · 1 min · jiezi

关于docker:微服务架构师docker私有镜像仓库的配置和使用

docker私有化仓库介绍公有仓库介绍dockerhub大家还记着是干什么的吗?寄存镜像的,公共仓库官方网站:Docker hub 官网:https://registry.hub.docker.com有时候应用Docker Hub这样的公共仓库可能不不便(有时候无法访问),用户能够创立一个本地仓库供私人应用,能够应用官网提供的工具docker-registry来配置公有镜像仓库 1、应用官网提供的工具来配置docker-registry 是官网提供的工具,能够用于构建公有的镜像仓库。registry [redstri] 记录,注销 公有镜像仓库有哪些有长处?公有仓库益处:1、速度快2、保护不便3、平安 搭建公有仓库的思路:老的思路:下载源码tar/yum装置 -》 装置-》批改配置文件-》启动服务应用docker思路:间接下载并应用registry镜像启动docker实例,这样仓库就搭建胜利了。 有了docker当前,所有软件不再以office.exe 或lrzsz.rpm模式公布,而以docker镜像公布。你只须要下载docker镜像并运行一个docker实例。有了docker当前,再也不必为装置linux服务而发愁! 试验环境规划试验环境:docker公有仓库地址:xuegod64 xuegod64机器须要的内存至多要2G,我调配的是6G docker服务器地址 : xuegod63 ,xuegod63会应用xuegod64上docker公有仓库来pull/push镜像,试验拓扑图: 应用registry搭建docker公有仓库Docker服务:主机名为xuegod63主机ip: 192.168.1.63(这个ip大家能够依据本人所在环境去配置,配置成动态IP)配置:4vCPU/4Gi内存 筹备试验环境:新创建一台centos7.6 64位虚拟机主机名为xuegod64主机ip: 192.168.1.64(这个ip大家能够依据本人所在环境去配置,配置成动态IP)配置:4vCPU/4Gi内存 初始化试验环境-装置docker配置动态IP把虚拟机或者物理机配置成动态ip地址,这样机器重新启动后ip地址也不会产生扭转。以xuegod64主机为例,批改动态IP:批改/etc/sysconfig/network-scripts/ifcfg-ens33文件,变成如下: TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticIPADDR=192.168.1.64NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=192.168.1.1DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33DEVICE=ens33ONBOOT=yes#批改配置文件之后须要重启网络服务能力使配置失效,重启网络服务命令如下:service network restart#配置主机名:xuegod64hostnamectl set-hostname xuegod64#在xuegod63和xuegod64上配置hosts文件,让两台主机hosts文件保持一致[root@xuegod63 ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.63 xuegod63192.168.1.64 xuegod64[root@xuegod64 ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.63 xuegod63192.168.1.64 xuegod64#敞开firewalld防火墙[root@xuegod64 ~]# systemctl stop firewalld ; systemctl disable firewalld#敞开iptables防火墙[root@xuegod64 ~]# yum install iptables-services -y #装置iptables#禁用iptables[root@xuegod64 ~]# service iptables stop && systemctl disable iptables清空防火墙规定[root@xuegod64 ~]# iptables -F #敞开selinux[root@xuegod64 ~]# setenforce 0 #长期禁用#永恒禁用[root@xuegod64 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config留神:批改selinux配置文件之后,重启机器,selinux能力永恒失效[root@xuegod64 ~]# getenforceDisabled#配置工夫同步[root@xuegod64 ~]# ntpdate cn.pool.ntp.org#编写打算工作crontab -e* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org重启crond服务使配置失效:service crond restart办法1:在线装置docker-ce , 配置国内docker-ce的yum源(阿里云) ...

August 17, 2021 · 6 min · jiezi

关于docker:Docker初体验

装置docker# 卸载旧的dockersudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 装置yum,指定阿里的docker镜像源sudo yum install -y yum-utilssudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 装置dockersudo yum install docker-ce docker-ce-cli containerd.io# 启动dockersudo systemctl start docker# 测试sudo docker run hello-world根本命令docker version #查看版本docker info #查看docker信息镜像命令docker images #查看镜像docker images -a #查看全副镜像docker images -q #查看镜像id查找镜像倡议到dockerhub上查找镜像# docker search 镜像名docker search mysql docker search mysql -f stars=3000 #依据条件过滤查找后果拉取镜像若须要指定版本镜像,到 dockerhub(https://registry.hub.docker.com/)查找# docker pull 镜像名docker pull mysql #默认拉取最新版本镜像docker pull mysql:5.7 #拉取指定版本镜像删除镜像# docker rmi 镜像名/镜像id docker rmi mysql #可指定镜像名或者是镜像iddocker rmi -f d1165f221234 d1165f221234 d1165f221234 #移除多个镜像docker rmi -f $(docker images -aq) #递归删除所有镜像容器命令docker pull centos # 有了镜像能力创立容器,linux,下载一个centos镜像docker run [可选参数] images #创立容器并启动,在没有下载该镜像的时候docker会默认下载# 参数阐明--name="Name" 容器名字 tomcat01 tomcat02用来辨别容器-d 后盾形式运行-it 应用交互的形式运行,进入容器查看内容-p 指定让容器端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机端口:容器端口(主机) -p 容器端口 容器端口-P 随机指定端口# 测试,启动并进入容器docker run -it centos /bin/bash#从容器交互中退回主机exit列出所有的容器# docker ps 命令 # 列出以后正在运行的容器-a # 列出以后正在运行的容器+历史运行过的容器-n=? # 列出最近船舰的容器-q # 只列出容器编号退出容器exit # 间接进行容器并退出CTRL + P + Q # 容器不进行退出删除容器# docker rm 容器id # 删除指定的容器,不能删除正在运行的容器docker rm -f $(docker ps -aq) # 删除所有的容器docker ps -a -q|xargs docker rm # 删除所有的容器启动和进行容器docker start 容器id # 启动容器docker restart 容器id # 重启容器docker stop 容器id # 进行容器docker kill 容器id # 强制进行容器罕用其余命令docker run -d centos # 后盾运行centos# 问题:docker ps 发现centos进行了# 常见的坑,docker容器应用后盾运行,就必须要有一个前台过程,docker发现没有利用,就会主动进行# nginx启动后,发现自己没有提供服务,就会立刻进行,就是没有程序了查看日志docker logs -tf --tail 10 容器id # 查看以后容器的十条日志# 编写一段shell脚本输入日志docker run -d centos /bin/bash -c "while true;do echo helloworld;sleep 1;done"# 显示日志-tf # 显示日志--tail number # 显示日志条数查看容器中过程信息# docker top 容器id[root@localhost /]# docker top f395bc735fb6UID PID PPID C STIME root 126117 126099 0 Aug12 101 126168 126117 0 Aug12 查看镜像的元信息# docker inspect 容器iddocker inspect f395bc735fb6进入一个正在运行的容器# 命令# docker exec -it 容器id bashShell # 进入容器后开启一个新的终端,能够在外面操作(罕用)# docker attach 容器id # 进入容器正在执行的终端,不回启动新的过程从容器拷贝文件到主机# docker cp 容器id:容器内门路 目的地的主机门路# 测试docker cp d63481102d0f:/usr/share/nginx/html/index.html /home

August 13, 2021 · 2 min · jiezi

关于docker:URLOS站群快速部署解决方案-快速建站批量建站站群解决方案

URLOS为您提供易部署、易保护的站群解决方案,独立网站环境+独立域名,让您的站群更加稳固牢靠。 一、计划形容URLOS为站群用户提供一键批量建站服务,让您在短时间内疾速部署100个独立网站环境,同时为您的网站提供快照备份、近程加密备份、防爆限流等相干服务。 二、计划劣势一次可创立100个独立网站,造成站群,减少网站收录;1分钟本地备份1次,反对近程加密备份至FTP、OSS,数据更平安;多主机对立治理,无需切换登录,更容易治理主机与网站;主动为网站申请和续签SSL域名证书,无需放心遗记续签证书。三、典型场景搭建企业SEO站群帮忙企业构建高性能的企业站群网站,通过企业站群网站的建设,可能实现多主机多站点对立治理、资源统一分配,不仅可能帮忙企业更好的宣传其形象、公布产品与信息、发展电子商务与网络营销,还可能促成企业进步管理效率、一直进步企业竞争力,同时共享集群的软硬件资源,可无效升高我的项目投入。 搭建政府网站站群采纳容器微服务架构,强调安全可靠、扩展性强,可反对政府部门建设一个蕴含政府信息公开、政务服务、在线访谈、政民互动等性能在内的政府门户网站群架构,可简化政府网站的运行、治理和保护过程,同时提供网站稳定性,晋升政府在线服务能力,为“互联网+政府服务”体系的构建提供无力撑持。 四、批量建站性能演示在演示中,咱们一次填入5个域名,而后勾选“批量建站”,再抉择网站环境和数据库版本,点击提交即可主动实现批量部署。 理解更多对于URLOS的性能与用法,请拜访URLOS官网

August 11, 2021 · 1 min · jiezi

关于docker:从搭建到入门快速了解Docker怎么玩

为什么有Docker将一整套环境打包封装成镜像,无需反复配置环境,解决环境带来的种种问题。Docker容器间是过程隔离的,谁也不会影响谁。相较于传统的VM虚拟化办法,Docker的益处是启动速度快,资源利用率高,性能开销小。Docker中的概念镜像(Image) :Docker 镜像(Image),就相当于是一个ISO文件系统。比方Centos官网镜像 CentOS-7-x86_64-DVD-2009.iso就蕴含一个残缺的 centos 操作系统环境。容器(Container) :镜像(Image)和容器(Container)的关系,就像是java面向对象程序设计中的类和实例一样,镜像是类的定义,容器是镜像运行时的实例。容器能够被创立、启动、进行、删除、暂停等。仓库(Repository) :仓库可看成一个代码控制中心,用来保留镜像。CentOS 7装置Dokcer设置Docker镜像源 yum install -y yum-utils yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo装置Docker社区版本 yum install docker-ce docker-ce-cli containerd.io启动Docker systemctl start docker常规helloworld: docker run hello-world Dokcer常用命令镜像命令docker images //列出本地主机上的所有镜像docker search 【镜像名】//搜寻镜像docker pull 【镜像名】//拉取镜像docker rmi -f【镜像名】//删除单个镜像docker rmi -f【镜像名1 镜像名2】//删除多个镜像docker rmi -f $(docker image -q) //删除全副镜像容器命令docker run -it【镜像名】//以交互模式启动容器docker run -d【镜像名】//当前台模式启动容器docker run -d -P 随机端口映射,容器外部端口随机映射到主机的端口docker run -d -p 指定端口映射,格局为主机端口:容器端口docker ps //列出以后正在运行的容器exit //容器进行且退出ctrl+p+q //容器不进行退出docker start【容器id/容器名】//(退出容器后)启动容器docker restart【容器id/容器名】//重启容器docker stop【容器id/容器名】//进行容器docker kill【容器id/容器名】//强制进行容器docker rm 【容器id】//删除容器docker rm -f $(docker ps -a -q)/ /删除全副容器docker ps -a -q | xargs docker rm //删除全副容器docker attach【容器id】//以交互模式进入正在运行的容器docker exec -it【容器id】【bashshell】//可间接运行命令失去后果跳过进入容器的步骤docker commit【容器id】【镜像名:版本号】//从容器创立一个新的镜像更多的命令:# Docker命令大全 ...

August 10, 2021 · 1 min · jiezi

关于docker:Docker学习笔记08-DockerCompose

DockerCompose官网介绍:定义、运行多个容器。YAML file配置文件。所有环境都能够应用。应用步骤1.编写Dockerfile2.编写docker-compose.yml3.运行docker-compose up 装置compose官网地址:https://docs.docker.com/compo... sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose version疾速开始官网文档:https://docs.docker.com/compo... mkdir composetestcd composetestvim app.pyvim requirements.txtvim Dockerfilevim docker-compose.ymldocker-compose up测试 curl localhost:5000进行 docker-compose down扩大 docker imagesCTRL + C默认服务名:文件名_服务名_num docker network ls我的项目中的内容都在同个网络下,通过域名拜访(如localhost=redis) YAML配置编写规定官网文档:https://docs.docker.com/compo... #1.版本version: '' #2.服务services: 服务1: web #服务配置(build,ports,volumes...) 服务2: redis,db...#3.其余配置(网络,卷挂载,全局配置...) volumes:network:config: Compose一键部署WordPress官网文档:https://docs.docker.com/sampl... vim docker-compose.ymlversion: "3.9" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpressvolumes: db_data: {} wordpress_data: {}docker-compose up -d-d 后盾启动

August 8, 2021 · 1 min · jiezi

关于docker:手把手教centos安装docker

版本阐明 官网装置教程 装置docker 当初网络上装置教程满天飞,很大一部分是他人的总结,能够说是成绩,却没有介绍如何去实现这个成绩办法。这篇就联合官网教程来聊聊如何在centos上装置docker,触类旁通,其它技术也依照这种流程,那堪称是难受。(官网教程是针对国外,所以国内装置有些许调整) 版本阐明CentOS-7(新版本具备较高的应用性,很多企业不必CentOS-6.8版本,所以这边抉择了CentOS-7的版本,合乎企业实在场景) 官网装置教程https://docs.docker.com/engin... 装置docker卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 装置docker环境所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置docker在yum仓库中所在位置 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 装置docker sudo yum install docker-ce docker-ce-cli containerd.io 配置阿里云docker镜像加速器(docker默认从国外下载镜像,网速慢) 阿里云docker镜像加速器收费,登入申请即可 设置docker开机自启动 system enable docker 验证docker是否装置胜利 sudo docker run hello-world 授之以鱼不如授之以渔

August 7, 2021 · 1 min · jiezi

关于docker:docker-容器内以非root登陆的方法

要解决的问题默认的docker container登陆之后是root用户: root@ContainerID:/# 心愿实现: dockerUser2@ContainerID:/$ 解决办法以root身份进入docker container: sudo docker run -it -v /home/ubuntuUser:/home Image1:v1 /bin/bashdocker container 内创立dockeruser2,并增加到用户组sudo: root@ContainerID:/# useradd -d /home/dockeruser2 -m dockeruser2root@ContainerID:/# passwd dockeruser2root@ContainerID:/# usermod -aG sudo docker退出docker container,并以刚刚创立好的dockeruser2登录 root@ContainerID:/# exituser@ubuntu1804: docker exec --user dockeruser2 -it ContainerID /bin/bash执行结束看到以下提醒: dockerUser2@ContainerID:

August 6, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-07Docker网络

docker0装置docker的主机会有一个docker0网卡(桥接模式),应用的是evth-pair技术evth-pair是虚构设施接口,成对呈现ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo...2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 172.17.0.16/20 brd 172.17.15.255 scope global eth0...3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0.../16是网络标识位,子网掩码是255.255.0.0,/24为255.255.255.0 容器启动的时候docker会调配给容器一个eth@ifxxx IP地址,能够在内部ping通docker run -it -P --name tomcat01 tomcatdocker exec -it b4da99b29aef /bin/baship addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever62: eth0@if63: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0 valid_lft forever preferred_lft forever每启动一个容器,宿主机也会多一个网卡63: vethb4f3058@if62: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether f6:e4:da:9e:1c:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::f4e4:daff:fe9e:1cbc/64 scope link valid_lft forever preferred_lft forever论断:容器间能够互相ping通docker run -d -P --name tomcat02 tomcatdocker exec -it tomcat02 /bin/bashping ping 172.18.0.2 ...

August 5, 2021 · 2 min · jiezi

关于docker:Docker学习笔记-06数据卷容器和Dockerfile

数据卷容器应用Dockerfile创立镜像docker build -f dockerfile1 -t test/centos:1.0 .留神最初有一个.(示意生成在当前目录下) vim dockerfile1FROM centosVOLUME ["volume01","volume02"]CMD echo "---end---"CMD /bin/bash查看挂载信息 docker run -it test/centos:1.0 /bin/bashls -l drwxr-xr-x 2 root root 4096 Aug 1 13:42 volume01drwxr-xr-x 2 root root 4096 Aug 1 13:42 volume02touch volume01/test1#查看容器信息docker inspect 容器ID"Mounts": [ { "Type": "volume", "Name": "f031e6bb7308ae91279cf1ba149aa04fb657bfdb612df79ad8e1e14d9ddd1b3a", "Source": "/var/lib/docker/volumes/f031e6bb7308ae91279cf1ba149aa04fb657bfdb612df79ad8e1e14d9ddd1b3a/_data", "Destination": "volume01", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "e34e2bae85f36f00364ec5c59a3fa85e92f946010a50099d97a92bd41c9d1c96", "Source": "/var/lib/docker/volumes/e34e2bae85f36f00364ec5c59a3fa85e92f946010a50099d97a92bd41c9d1c96/_data", "Destination": "volume02", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ]容器间数据共享--volumes-from 数据卷容器docker run -itd --name docker01 test/centos:1.0docker run -itd --name docker02 --volumes-from docker01 test/centos:1.0docker run -itd --name docker03 --volumes-from docker01 test/centos:1.0#docker01就是数据卷容器#docker01,02,03共享volume01,volume02目录注:删除docker01后,02和03仍能够访问共享文件 ...

August 4, 2021 · 2 min · jiezi

关于docker:docker入门postgresql安装及可视化界面portainer使用

数据库作为我的项目必不少的一部分,小伙伴们无论在日常开发或者私活中都要接触,而且oracle,postgresql等数据库绝对更加的简单与繁琐,1.装置数据库1.拉取镜像docker pull postgres:13.0 //版本号本人把握2.启动容器docker run --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -v /usr/local/postgresql/data:/var/lib/postgresql/data -d postgres:13.0参数解释: run: 创立并运行一个容器;--name postgres: 指定创立的容器的名字;-e POSTGRES_PASSWORD=password: 设置环境变量,指定数据库的登录口令为password;-p 5432:5432: 端口映射将容器的5432端口映射到内部机器的5432端口;-v /usr/local/postgresql/data:/var/lib/postgresql/data 将/usr/local/postgresql/data挂载到容器的/var/lib/postgresql/data文件中,俗话讲这两个文件夹领有雷同数据。-d postgres 指定应用postgres作为镜像。 登录的初始用户:postgres 登录的初始密码:password3.查看容器docker ps 4.创立表空间当docker操作postgresql新建表空间时,须要进入容器操作 并应用postgres用户创立文件夹 docker exec -it 容器image /bin/bashsu - postgresmkdir systempsql 数据库用户名称create tablespace 表空间名 owner 拥有者 location '在容器中的路径名';例:create tablespace systme owner admin location '/var/lib/postgresql/data/system';倡议在每建设一个表空间下都在/var/lib/postgresql/data下新一个文件夹(本处新建了system),因为新建时会在门路下新建一个PG_13_日期的文件夹,有可能反复5.异样如果抛出以下异样 changing ownership of '.': Permission denied或者chmod: changing permissions of '/var/lib/postgresql/data': Permission denied须要敞开SELinux getenforce #查看SELinux状态 permissive敞开状态 enforcing开启状态setenforce 0 #长期敞开 setenforce 1 #长期开启 //永恒敞开批改 /etc/selinux/configSELINUX=enforcing改为SELINUX=disabled当想要新建数据库中须要的文件夹时,肯定要是进入容器,并且应用固定用户postgres创立,否则就会抛出没有权限的异样2.装置应用可视化界面这时候小伙伴就问了,好受每种中间件都须要间接命令吗,这样也不不便啊,所以docker也提供了可视化界面,这里举荐应用portainer。能够在其中抉择容器类型后,间接装置。 ...

August 3, 2021 · 1 min · jiezi

关于docker:Win10-Docker-占用-C-盘磁盘容量清理

明天再折腾 Docker 的时候忽然发现 C 盘霎时满了,于是查了下发现是上面的文件忽然变大目录为:C:\Users\【用户名】\AppData\Local\Docker\wsl\data删除此文件就解决问题,然而马上发现 Docker 无奈启动了,始终卡 starting采纳办法:间接复原初始设置:

August 2, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-05数据挂载

容器数据卷指定门路挂载-v 宿主机目录:容器目录docker run -it -v 宿主机目录:容器目录 centos /bin/bash#查看挂载信息docker inspect 容器ID"Mounts": [ { "Type": "bind", "Source": "宿主机目录", "Destination": "容器目录", ... }]匿名挂载-v 容器目录docker run -d -P --name test1 -v /test nginx-P 随机凋谢端口#查看所有volume信息docker volume lsDRIVER VOLUME NAMElocal ccae06dda8374c37d25321b266e1d77eb786594f1aa9dfb861eb6097114d78da#查看具体挂载docker volume inspect ccae06dda8374c37d25321b266e1d77eb786594f1aa9dfb861eb6097114d78da[ { "CreatedAt": "2021-08-01T20:09:40+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/ccae06dda8374c37d25321b266e1d77eb786594f1aa9dfb861eb6097114d78da/_data", "Name": "ccae06dda8374c37d25321b266e1d77eb786594f1aa9dfb861eb6097114d78da", "Options": null, "Scope": "local" }]具名挂载具名挂载能够不便的找到咱们的卷,应用较多 -v 卷名:容器目录docker run -d -P --name test2 -v test-name:/test nginx#查看所有volume信息docker volume lsDRIVER VOLUME NAMElocal test-name#查看具体挂载docker volume inspect test-name[ { "CreatedAt": "2021-08-01T20:12:29+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/test-name/_data", "Name": "test-name", "Options": null, "Scope": "local" }]docker默认挂载目录:/var/lib/docker/volumes/... ...

August 1, 2021 · 1 min · jiezi

关于docker:docker个人理解与安装无脑带你入门

1.小谈docker以下皆为楼主集体了解,如有谬误请指出。1.docker是什么docker是一种容器化引擎,能够简略的了解是当应用时,docker为咱们建设了一个虚拟机,将咱们须要装置的软件安装在了这个虚拟机上。 然而docker相比虚拟机,更加的优良。(其余概念请自行查找) 2.为什么要用docker或者在小伙伴们都遇到过以下状况。 为什么在我的电脑上能够装置胜利,在你电脑上就不行呢?xx中间件装置太麻烦了啊,又得新建用户还有哪些配置。。docker能够解决以上问题。因为docker会为每台电脑新建一份雷同虚构容器(相似虚拟机),这样就不存在环境区别了。同时在装置过程中,咱们不须要输出传统形式的命令,全副交给饿了docker容器执行。这样大大简化了装置。 3.根底概念镜像:能够了解成如同软件安装包。 容器:生成的虚拟机。(实际上不是,初学能够这样了解)。 2.装置docker1.卸载以前装置的Docker容器sudo yum remove docker \ docker-client \ docker-client-latest \docker-common \docker-latest\docker-latest-logrotate \docker-logrotate \ocker-engine2.装置dockeryum -y install yum-utils #装置yum-config-manager命令sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #装置docker源 否则查找不到版本 yum list docker-ce --showduplicates | sort -rsudo yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io能够依据下图批改想要装置的版本号 3.查看docker是否装置胜利yum list installed |grep docker4.启动docker服务(并设置开机自启)systemctl start docker.servicesystemctl enable docker.service5.查看docker服务状态running 就是启动胜利。 systemctl status docker6.置docker国内镜像在宿主机器编辑文件:vim /etc/docker/daemon.json\请在该配置文件中退出(没有该文件的话,请先建一个) { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}7.重启dockersystemctl restart docker.service3.常用命令在linux运行docker 把握以下命令 就能够实现docker根底工作了 docker images //查看镜像 (罕用)docker rmi 镜像id //删除镜像 (罕用)docker ps -a 所有容器 (罕用)docker ps 查看所有启动容器 (罕用)docker rm 容器id //删除容器 (罕用)docker start 容器id //开始容器 (罕用)docker stop 容器id //进行容器 (罕用)systemctl enable docker //docker开机启动 systemctl daemon-reload&systemctl restart docker //docker重启 (罕用)docker logs 容器id //查问容器日志 (罕用)docker exec -it 容器id /bin/bash //进入容器命令行 (罕用)docker cp /usr/elasticsearch-analysis-ik-7.13.2.zip elasticsearch:/usr/share/elasticsearch/plugins //将文件从宿主机放入容器ls //查看容器目录exit //退出容器

August 1, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-04镜像的原理和提交

定义镜像是轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它蕴含运行某个软件所须要的所有内容(代码,运行时库、环境变量、配置文件)。 Docker镜像加载原理Docker的镜像理论由一层层的文件系统(UnionFS)组成。 UnionFS 联结文件系统:分层,轻量级,高性能的文件系统,反对对文件系统的批改作为一次提交来层层叠加。 Docker镜像的最底层是bootfs(boot file system),与Linux雷同,蕴含boot加载器(bootloader)和内核(kernel)。当boot加载实现整个内核就在内存中了,内存使用权由bootfs转交给内核,同时零碎卸载bootfs。 bootfs之上是rootfs(root file system),就是操作系统发行版(Ubuntu,Centos...),蕴含/dev,/proc,/bin,/etc等规范目录和文件。 Docker为什么小?1.对于不同的Linux发行版,rootfs有区别,但bootfs根本是统一的,能够共用bootfs。2.一个精简的OS的rootfs只须要最根本的命令,工具和程序库,能够很小。3.Docker镜像底层能够间接应用宿主机的内核,本人只须要提供rootfs。 Docker镜像分层原理:layerDocker镜像都是只读的,当容器启动时,会把一个新的可写层被加载到镜像顶部。这一层称为容器层,容器层之下都是镜像层。 docker commit 镜像提交docker commit -m="形容" -a="作者" 容器ID 指标镜像:[TAG]测试 #装置并启动nginxdocker run -d --name nginx01 -p 3344:80 nginx#进入容器docker exec -it nginx01 /bin/bash#装置vimapt-get updateapt-get install vim#批改nginx主页vim /usr/share/nginx/html/index.html#退出容器CTRL+P+Q#提交版本docker psdocker commit -a="itxiaoma" -m="add vim" c1ab7a56364f nginx-vim:1.0docker stop c1ab7a56364f#运行新的版本docker run -d -p 3344:80 nginx-vim:1.0拜访

July 31, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-03安装NginxElasticsearchPortainer可视化

装置NginxDockerhub官网: https://hub.docker.com/_/nginx docker pull nginxdocker run -d --name nginx01 -p 3344:80 nginx-d #后盾运行--name #容器命名-p 宿主机端口:容器外部端口 #配置端口 查看容器 docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe7c5fb92ea7f nginx "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01测试拜访 curl localhost:3344<!DOCTYPE html><html><head><title>Welcome to nginx!</title>...进入容器 docker exec -it nginx01 /bin/bashwhereis nginxcat /etc/nginx/conf.d/default.conf进行容器 docker stop e7c5fb92ea7f装置Elasticsearchdocker run -d --name es01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.13.4启动测试 curl localhost:9200{ "name" : "3fd55120f117", "cluster_name" : "docker-cluster", "cluster_uuid" : "S6dFIP9US120-499yDVUGA", "version" : { "number" : "7.13.4", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "c5f60e894ca0c61cdbae4f5a686d9f08bcefc942", "build_date" : "2021-07-14T18:33:36.673943207Z", "build_snapshot" : false, "lucene_version" : "8.8.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}查看内容占用 ...

July 31, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-02概念和命令

Docker是怎么工作的?Docker是一个Client - Server 构造的零碎,Docker的守护过程运行在宿主机上,通过Socket从客户端拜访。Docker-Server收到Docker-Client的指令,就会执行命令。 Docker为什么比VM快?1.Docker有更少的形象层2.Docker利用的是宿主机的内核,VM须要Guest OS(操作系统内核) 帮忙命令docker versiondocker info #零碎信息,包含镜像和容器的数量docker xxx --help官网文档:https://docs.docker.com/refer... 镜像命令docker images --helpdocker images 查看所有本地镜像REPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest d1165f221234 4 months ago 13.3kBREPOSITORY #镜像仓库源 TAG #镜像标签IMAGE ID #镜像ID CREATED #镜像创立工夫 SIZE #镜像大小#可选项-a --all #列出所有镜像-q --quiet #只显示镜像ID docker search 搜寻镜像docker search mysql#可选项-f --filter #过滤条件--fitler=STARS=3000 #珍藏3000以上的镜像docker pull 下载镜像Dockerhub地址:https://hub.docker.com docker pull [OPTIONS] NAME[:TAG|@DIGEST]OPTIONS #可选项NAME #镜像名TAG #镜像标签#指定版本下载docker pull mysql:5.7docker rmi 删除镜像docker rmi -f 容器ID1 ... 容器IDN#删除全副镜像docker rmi -f $(docker images -aq)容器命令docker run 新建并启动容器docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #参数阐明--name #容器名-d #后盾形式运行 -it #交互方式运行,进入容器查看 -p #指定容器端口-P #随机指定端口#测试:启动并进入容器docker pull centosdocker run -it centos /bin/bash #退出容器exit #容器进行并退出CTRL + P + Q #不进行退出docker ps 列出容器docker ps #列出以后正在运行的容器-a #列出以后正在运行的容器+历史运行过的容器-n=? #最近创立的容器-q #只显示容器编号docker rm 删除容器docker rm 容器IDdocker rm $(docker ps -aq) #删除所有容器-f #强制删除(包含运行中的容器)docker start 启动容器docker start 容器IDdocker restart 容器IDdocker stop 容器IDdocker kill 容器IDdocker logs 查看日志docker logs -tf --tail 10 容器ID #显示指定行数docker logs -t -f 容器ID #显示日志docker top 查看过程docker top 容器IDdocker inspect 查看元数据docker inspect 容器ID[ { "Id": "d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63", "Created": "2021-07-29T23:22:16.737750806Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 137, "Error": "", "StartedAt": "2021-07-29T23:31:58.686730736Z", "FinishedAt": "2021-07-29T23:32:10.840176294Z" }, "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55", "ResolvConfPath": "/var/lib/docker/containers/d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63/resolv.conf", "HostnamePath": "/var/lib/docker/containers/d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63/hostname", "HostsPath": "/var/lib/docker/containers/d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63/hosts", "LogPath": "/var/lib/docker/containers/d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63/d3b9799417b69391ba9bdd644b7a5604780cecc371a6511a62b5503d063c3e63-json.log", "Name": "/optimistic_bartik", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "CgroupnsMode": "host", "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/fd5fe8080f2c13c00311711f4e51865588f39c784047fcdce26d4611f6128587-init/diff:/var/lib/docker/overlay2/27c6cfd367d905528b550279efab95fa7f52c97abb12625131c408b6dea72fe7/diff", "MergedDir": "/var/lib/docker/overlay2/fd5fe8080f2c13c00311711f4e51865588f39c784047fcdce26d4611f6128587/merged", "UpperDir": "/var/lib/docker/overlay2/fd5fe8080f2c13c00311711f4e51865588f39c784047fcdce26d4611f6128587/diff", "WorkDir": "/var/lib/docker/overlay2/fd5fe8080f2c13c00311711f4e51865588f39c784047fcdce26d4611f6128587/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "d3b9799417b6", "Domainname": "", "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "Tty": true, "OpenStdin": true, "StdinOnce": true, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/bash" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20201204", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.vendor": "CentOS" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "0ac7744565902b645737fcc3eabd47c9c27a7babaa0856ec55e466a7237e6ba8", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/0ac774456590", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "MacAddress": "", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "2d10dc4aa739ceb9a9aad3c64688a40431ff71e5dfaed298ec83265434d7863c", "EndpointID": "", "Gateway": "", "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "", "DriverOpts": null } } } }]docker exec\attach 进入以后正在运行的容器docker exec -it 容器ID /bin/bash #进入容器后开启新的终端,能够操作docker attach 容器ID#进入容器正在执行的终端,不会启动新的过程docker cp 拷贝文件docker cp 容器ID:容器内门路 宿主机门路其余docker run -d 容器IDdocker ps 发现容器进行了起因:docker容器在后盾运行,必须有一个前台过程,如果docker发现没有利用,就会主动进行小结 ...

July 31, 2021 · 3 min · jiezi

关于docker:Linux搭建docker及dockercompose

Linux搭建docker及docker-compose介绍docker及docker-compose的装置一、docker搭建在线装置 docker-install1. 配置yum源阿里云镜像1. 备份原来的yum源 cd /etc/yum.repos.d/ cp CentOS-Base.repo CentOS-Base.repo_bak2. 获取阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo3. 革除原有yum源缓存 yum clean all4. 生产阿里云yum缓存 yum makecache2. 卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine3. 装置yum-utils,它提供了yum-config-manager,可用来治理yum源sudo yum install -y yum-utils# 增加阿里云docker的yum源sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4. 装置docker引擎默认装置最新版本sudo yum install docker-ce docker-ce-cli containerd.io能够通过以下命令来装置指定版本 yum list docker-ce --showduplicates | sort -r[root@zhangl ~]# yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.2-3.el7 @docker-ce-stabledocker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io ...

July 30, 2021 · 1 min · jiezi

关于docker:使用dockercompose快速搭建apollo

应用docker-compose疾速搭建apollo前提: 对于apollo的基础知识及应用形式,这里先不做介绍。能够查问官网学习。对于docker的应用及装置形式及docker-compose能够参考这里的博客。本文宗旨,及在如何疾速的应用docker-compose搭建apollo一、创立数据表构造1. 依据`sql`目录下脚本,创立`apolloconfgidb`和`apolloportaldb`数据库2. 初始化数据: apolloconfgidb库中serverconfig 表中:eureka.service.url 批改eureka地址,这里批改为apolloconfig的地址,\ 即docker-compose.yml中指定的EUREKA.INSTANCE.IP-ADDRESS=120.xx.xx.207,在加端口号。\ 即:120.xx.xx.207:9080/eureka/ apolloportaldb库中serverconfig 表中:apollo.portal.envs 指定portal反对的环境,这里默认:dev3. 数据库筹备结束二、导入文件到服务器1. 导入apollo-devops.zip到服务器目录,倡议:/opt/apollo/apollo-devops/。这样能够不批改docker-compose.yml间接应用2. 解压进入:apollo-devops3. 批改docker-compose.yml中,数据的连贯配置及注册服务IP(其中EUREKA.INSTANCE.IP-ADDRESS即为apolloconfig的地址,也即本机地址) environment: - SPRING_DATASOURCE_URL=jdbc:mysql://10.0.xxx.122:3306/apolloconfigdb?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=123456 - EUREKA.INSTANCE.IP-ADDRESS=120.xx.xx.2074. 挂载目录,视状况是否须要自定义5. 批改docker-portal.yml中,数据的连贯配置及apollo-env.properties的挂载目录 volumes: - "/opt/logs/8070/100003173:/opt/logs/100003173" - "/opt/apollo/apollo-devops/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://10.0.xxx.122:3306/apolloportal8070?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=123456 - SPRING_DATASOURCE_PASSWORD=Pdhn^4566. 批改apollo-env.properties配置中,meta的连贯地址。这里配置的portal连贯apollo-config的地址 dev.meta=http://120.xx.xx.207:90807. 配置文件筹备结束三、启动apollo服务1. 应用docker-compose命令启动服务(-d 后盾启动) docker-compose -f docker-compose.yml up -d docker-compose -f docker-portal.yml up -d 2. 查看服务 doccker-compose ps 或者 docker ps | grep apollo up状态为启动胜利3. 查看日志 docker ps | grep apollo 查看容器状况 docker logs -f 容器ID docker logs -f --tail 1000 容器ID tail -1000f /opt/logs/9080/100003171/apollo-configservice.logshell命令演示[root@lipei92 apollo-devops]# docker-compose -f docker-compose.yml up -d[root@lipei92 apollo-devops]# docker-compose -f docker-portal.yml up -d [root@lipei92 apollo-devops]# [root@lipei92 apollo-devops]# docker ps|grep apollo127d43c699c5 apollo-configservice "/apollo-configser..." 2 months ago Up 2 months apollo-configservice-9087c15da0f59fcd apollo-adminservice "/apollo-adminserv..." 2 months ago Up 2 months apollo-adminservice-9086258b8d38ecaa apollo-portal "/apollo-portal/sc..." 2 months ago Up 2 months apollo-portal-8070[root@lipei92 apollo-devops]# [root@lipei92 apollo-devops]# [root@lipei92 apollo-devops]# tail -1000f /opt/logs/9080/100003171/apollo-configservice.log[root@lipei92 apollo-devops]# [root@lipei92 apollo-devops]# docker logs 20faafb13f4f[root@lipei92 apollo-devops]# [root@lipei92 apollo-devops]# docker logs -f --tail 1000 20faafb13f4f[root@lipei92 apollo-devops]# 四、拜访apollo1. 地址:http://120.xx.xx.207:8070/signin2. 默认用户名明码:apollo/apollo五、我的项目地址eip-apollo ...

July 30, 2021 · 1 min · jiezi

关于docker:Docker学习笔记-01安装和卸载

确认学习环境(Centos 7)cat /etc/os-releaseNAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"帮忙文档https://docs.docker.com/engin... 1.删除旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2.须要的安装包 sudo yum install -y yum-utils3.设置镜像仓库(阿里云) yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo阿里云镜像减速https://help.aliyun.com/docum... sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://***.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker4.更新yum索引 yum makecache fast5.装置Docker (docker-ce 社区 docker-ee企业) sudo yum install docker-ce docker-ce-cli containerd.io6.启动docker systemctl start docker 7.查看版本 docker version8.运行hello world ...

July 30, 2021 · 1 min · jiezi

关于docker:docker-搭建教程看不懂瞅瞅我的够不够精简

搜了一大堆 dnmp 的教程, 有的是在 debian/ubuntu 镜像里搭建环境,而后再打包,docker 这样玩的??有的性能很丰盛,各种扩大组件一堆,着实“高大上”,以至于让老手“望而生畏”,俺只是想跑起来 php 就行了,给我整那么多。 好比miui那么臃肿 鉴于以上,我搞了一个 docker 的编排,尽量能让老手先上手,再相熟,最终自行再按需扩大! 自认为几个亮点: 简略:构造分层简略便捷:惯例开发,每次增加新站点,都须要配置 /ect/hosts,参考我附录的 dnsmasq 配置,能够一劳永逸(我只有mac,其余能够自行参考。。)机智:每次执行 php、composer 等脚本,须要 docker exec -it xxx 进入容器再执行?? nonono,参考我的 fish/zsh 配置,给你快捷方式执行(思路就是通过 docker -w 命令的工作目录)贴心:阐明最初,还增加了 xdebug 的调试小录屏,送给须要的你 具体请参见 github, 感觉有用请您留个 star! https://github.com/839891627/...

July 28, 2021 · 1 min · jiezi

关于docker:容器中的1号进程

Linux零碎中,PID为1的过程表演了非常重要的角色,在容器衰亡后,因为其秉承的准则是「one process per container」或「one thing per container」,这个时候谁来当容器内的1号过程就是一个须要答复的问题。 一般来说,容器内的过程可能有这么几种状况: 只有一个过程个,就是1号过程1号过程+由它派生进去的整个过程树对Docker 进行一个容器而言, 其发送stop命令时, 实质上就是发送一个SIGTERM信号给容器内的1号过程, 而后1号过程接管信号后退出, 如果有子过程,那么也须要一并退出. 对于状况1还好,只有1个过程,没有那么多幺蛾子。对于状况2,如果1号过程可能精确地将进行信号转发给所有子过程,并能顺利完结整个过程树,这样也还OK。 问题出在: 很多人的容器启动命令是用shell脚本启动的( 当初你能够进入业务容器内用 ps 看一下过程树 )很多的shell脚本没有采纳Docker所举荐的exec模式这就导致了: bash过程实际上是容器内的1号过程, 你的业务过程实际上是bash的子过程bash过程不能转发信号这就导致了:业务过程没法收到进行的信号,间接期待Docker在过了超时工夫后强行将整个容器停掉。 这会导致什么问题呢? 假如: 业务过程会向某种注册核心注册( 这不要太常见,服务注册根本是标配 )K8S治理着容器的编排调度,那么在K8S的语境下,一个容器是会被随时kill或者重启的,kill无非也是调用底层容器引擎的命令( 不光是K8S,其余容器编排工具也会存在相似问题 )后果是:想下线一个服务,那么应用K8S kill对应容器,而后返回了。因为你的启动命令是shell包裹的,所以bash是1号过程,它无奈转发终止信号给业务过程,所以容器内的业务过程须要期待超时工夫完结之后才会被强行进行(与你「过程立即完结」的冀望不符),所以导致想下线的服务迟迟无奈从注册核心下线。怎么解决呢?有几种计划: 应用 Shell exec 的模式,使你的业务过程就是1号过程。PS:能够参考Redis或MySQL等的docker-entrypoint.sh是如何写的应用相似tini或dumb-tini的工具,充当1号过程,它实现了转发性能。PS:dumb-tini还有坑,能够网上搜寻。相似的能够看看Jenkins的启动脚本是怎么编写的其中计划1是最好的。

July 28, 2021 · 1 min · jiezi

关于docker:docker-搭一个mongodb-shard-cluster

本文依照mongodb网站上的领导教程应用docker搭建了一个shard集群,仅供学习参考。 有如下目录构造: .├── docker-compose.yaml└── shard-setup └── setup.sh其中,docker-compose.yaml内容如下: version: "3.8"services: mongos-1: hostname: mongos-1 container_name: mongos-1 image: mongo:5.0.0 entrypoint: /usr/bin/bash /shard-setup/setup.sh volumes: - ./shard-setup:/shard-setup networks: - mongo-shard-net restart: on-failure depends_on: - cfgrs0-1 - cfgrs0-2 - cfgrs0-3 - dbrs0-1 - dbrs0-2 - dbrs0-3 - dbrs1-1 - dbrs1-2 - dbrs1-3 cfgrs0-1: hostname: cfgrs0-1 container_name: cfgrs0-1 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --configsvr --replSet "cfgrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27019" cfgrs0-2: hostname: cfgrs0-2 container_name: cfgrs0-2 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --configsvr --replSet "cfgrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27019" cfgrs0-3: hostname: cfgrs0-3 container_name: cfgrs0-3 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --configsvr --replSet "cfgrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27019" # 配置dbrs0和dbrs1 dbrs0-1: hostname: dbrs0-1 container_name: dbrs0-1 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018" dbrs0-2: hostname: dbrs0-2 container_name: dbrs0-2 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018" dbrs0-3: hostname: dbrs0-3 container_name: dbrs0-3 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs0" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018" dbrs1-1: hostname: dbrs1-1 container_name: dbrs1-1 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs1" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018" dbrs1-2: hostname: dbrs1-2 container_name: dbrs1-2 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs1" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018" dbrs1-3: hostname: dbrs1-3 container_name: dbrs1-3 image: mongo:5.0.0 entrypoint: /usr/bin/mongod --shardsvr --replSet "dbrs1" --bind_ip_all networks: - mongo-shard-net restart: on-failure expose: - "27018"networks: mongo-shard-net: name: mongo-shard-netsetup.sh用于设置config以及shard主从,最初作为mongos运行,内容如下: ...

July 26, 2021 · 2 min · jiezi

关于docker:Web-Fonts-学习之解决Docker环境网页中文渲染吃字问题

背景信息之前我的项目中遇到了应用ActiveReportsJS 前端报表控件生成PDF的性能,在IIS 或者Tomcat服务器上部署前端我的项目,生成PDF 超链接(为英文)均能失常显示,然而在Docker中部署,生成PDF时候总是呈现超链接吃字。 失常 通过与公司外部的资深前端大神沟通后,会发现还是因为缺字体导致的,因为尽管在生成PDF 时注册了字体但这个字体是防止了乱码,并未保障可能被正确的画进去,所以钻研后发现,还是须要应用 Web-Fonts Web Fonts 介绍 Web Fonts 示意能够随着网页的加载下载自定义字体实现以更多不同的、自定义的文本款式。 CSS 中容许为HTML 标签指定 font-family 属性,浏览器会尝试下载font-family 中指定的字体列表直到在运行的客户端零碎中找到可用的字体。如: p { font-family: Helvetica, "Trebuchet MS", Verdana, sans-serif;}以上会保障在零碎中运行良好,但传统Web开发者的字体抉择是无限的。只有少数几种字体,能够保障在所有常见的零碎中都能够应用,称为 Web-safe fonts, 咱们就能够通过 web-safe提供的字体,在字体栈中指定可选的字体文件,但这减少了测试方面的开销,以确保你的设计在每一种字体下看起来都很好。 Web fonts是一个好的抉择,能够保障网页运行良好, Web-Font 是 CSS 的特点,容许指定字体文件随着网站一起下载,也就意味着,任何反对 Web fonts的浏览器都能够精准的指定须要加载的字体。语法如下:首先须要在CSS 中定义@font-fce 块, 指定下载字体的文件,留神 src外面就是字体文件的地址:@font-face { font-family: "myFont"; src: url("myFont.woff2");} 能够应用@font-face外面指定的字体名称,在任何须要的标签中,像一般的font-family援用一样利用到须要的标签中: html { font-family: "myFont", "Bitstream Vera Serif", serif;}语法的确略微简单一些 对于 Web-Font 咱们须要留神以下事项: 留神字体版权所有支流浏览器次要反对的字体格局 为 WOFF或WOFF2(Web Open Font Format versions 1 and 2),即便老的浏览器如IE9也是反对WOFF格局的。WOFF2 反对TrueType 和OpenType 规格阐明的全副,蕴含variable fonts, chromatic fonts, 及font collections.列出字体文件的程序很重要。如果提供了浏览器的字体列表,浏览器将抉择首个字体文件来应用。示例: ...

July 26, 2021 · 1 min · jiezi

关于docker:Docker搭建mongodb主从结构

应用docker搭建一主二从的replica set,并且保障golang driver能胜利连贯到该构造。有如下目录构造: .├── config│   └── config.sh└── docker-compose.yml其中docker-compose.yml文件内容如下: version: "3.8"services: mongo_setup: image: mongo:5.0.0 hostname: mongo_setup container_name: mongo_setup volumes: - ./config:/rs_config entrypoint: /usr/bin/bash /rs_config/config.sh restart: "no" networks: - mongo_net depends_on: - mongo1 - mongo2 - mongo3 mongo1: image: mongo:5.0.0 hostname: mongo1 container_name: mongo1 entrypoint: /usr/bin/mongod --port 27117 --replSet "rs0" --bind_ip_all ports: - 27117:27117 networks: - mongo_net restart: on-failure mongo2: image: mongo:5.0.0 hostname: mongo2 container_name: mongo2 entrypoint: /usr/bin/mongod --port 27217 --replSet "rs0" --bind_ip_all ports: - 27217:27217 networks: - mongo_net restart: on-failure mongo3: image: mongo:5.0.0 hostname: mongo3 container_name: mongo3 environment: - RS_NAME=rs0 entrypoint: /usr/bin/mongod --port 27317 --replSet "rs0" --bind_ip_all ports: - 27317:27317 networks: - mongo_net restart: on-failurenetworks: mongo_net:config.sh是用于配置主从的脚本,内容如下: ...

July 23, 2021 · 1 min · jiezi

关于docker:Docker真的被Kubernetes放弃了吗

“ Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available. (#94624, @dims) ”随着Kubernetes 1.20的公布,对于“kubernetes不再反对Docker!Docker不能用了!以前的Docker镜像不能用了!”等声音不绝于耳,事实真的是这样吗? ...

July 23, 2021 · 1 min · jiezi

关于docker:Docker与k8s的恩怨情仇五Kubernetes的创新

转载请注明出处:葡萄城官网,葡萄城为开发者提供业余的开发工具、解决方案和服务,赋能开发者。上节中咱们提到了社区生态的倒退使得Kubernetes失去了良性的倒退和流传。比起绝对关闭的Docker社区凋谢的CNCF社区取得了更大胜利,但仅仅是社区的生机比照还不足以让Docker这么快的败下阵来,其根本原因是Kubernetes的对容器编排技术的了解比起Docker更胜一筹。这种劣势简直是压到性的降维打击,Docker毫无还手之力。  接下来便为大家介绍在这场容器大战之中,Kubernetes如何占据劣势位置。 容器编排所谓容器编排,其实就是解决容器和容器之间的关系,在一个分布式的大型零碎里,不可能是以多个繁多个体存在的,它们可能是一个与多个,一群与一群这样相互交织着。 Docker的容器编排性能Docker构建的是以Docker容器为最外围的PaaS生态,包含以Docker Compose为主的简略容器关系编排,以及以Docker Swarm为主的线上运维平台。用户能够通过Docker Compose解决本人集群中容器之间的关系,并且通过Docker Swarm治理运维本人的集群,能够看到这所有其实就是当初Cloud Foundry的PaaS性能,所主打的就是和Docker容器的无缝集成。 Docker Compose做到的是为多个有交互关系建设一种“连贯”,把它们全副编写在一个docker-compose.yaml文件中,而后对立公布(我前面说到的组里的ELK性能就是这样做的),这样做也有长处,就是对于简略的几个容器之间的交互来说十分便当。然而对于大型的集群来说却有些无济于事,并且这种每呈现一种新需要就须要独自做一项新性能的开发模式,将使前期代码保护变得十分困难。     Kubernetes如果要和Docker反抗,必定不能仅仅只做Docker容器治理这种Docker自身就曾经反对的性能了,这样的话别说分庭抗礼,可能连Docker的根本用户都吸引不到。因而在Kubernetes设计之初,就确定了不以Docker为外围依赖的设计理念。在Kubernetes中,Docker仅是容器运行时实现的一个可选项,用户能够根据本人的爱好任意调换本人须要的容器内容且Kubernetes为这些容器都提供了接口。此外,Kubernetes精确的抓住了Docker容器的一个致命性的弱点进行了本身翻新。   接下来就让咱们一起来理解,这个给Docker造成降维打击的内容到底是什么? Kubernetes的容器编排性能 与Docker这种站在容器视角上只能解决容器之间的关系所不同,Kubernetes所做的是从软件工程的设计理念登程,将关系进行了不同类的划分,定义了严密关系(Pod之间)和交互关系(Service之间)的概念,而后再对不同的关系进行特定的编排实现。   乍一听你可能是一头雾水。这里举个不太理论然而一看就懂的例子:如果把容器之间的关系比作人之间的关系,Docker能解决的是仅仅是站在繁多个体的角度上,解决人与人之间的人际关系;而Kubernetes确是上帝,站在上帝视角不仅能解决人与人之间的人际关系,还能解决狗与狗之间的狗际关系,最次要的是能解决人与狗之间的来往关系。 而实现上述严密关系的原理,就是Kubernetes翻新的Pod。   Pod是Kubernetes所翻新的一个概念,其原型是Borg中的Alloc,是Kubernetes运行利用的最小执行单元,由一个或者多个严密合作的容器组合而成,其呈现的起因是针对容器的一个致命性弱点——繁多过程这问题的扩大,让容器有了过程组的概念。通过第一节,咱们晓得了容器的实质是一个过程,其自身就是超级过程,其余过程都必须是它的子过程,因而在容器中,没有过程组的概念,而在日常的程序运行中,过程组是经常配合应用的。 应用Pod解决严密关系为了给大家介绍Pod解决严密关系的原理,这里举一个过程组的例子:   Linux中有一个负责操作系统日志解决的程序rsyslogd是由三个模块组成,别离是:imklog模块、muxsock模块以及rsyslogd本人的main函数主过程。这三个过程组肯定要运行在同一台机器上,否则它们之间的基于Socket的通信和文件的替换都会呈现问题。   而上述的这个问题,如果呈现在Docker中,就不得不应用三个不同的容器别离形容了,并且用户还得本人模仿解决它们三个之间的通信关系,这种复杂度可能比应用容器运维都高的多。并且对于这个问题的运维,Docker Swarm也有本人自身的问题。以上述的例子为根底,如果三个模块别离都须要1GB的内存运行,如果Docker Swarm运行的集群中有两个node,node-1残余2.5GB,node-2残余3GB。这种状况下别离应用docker run 模块运行上述三个容器,基于Swarm的affinity=main束缚,他们三个都必须要调度到同一台机器上,然而Swarm却很有可能先调配两个去node-1,而后残余的一个因为还剩0.5GB不满足调度而使这次调度失败。这种典型的成组调度(gang scheduling)没有被妥善处理的例子在Docker Swarm中常常存在。   基于上述的需要,Kubernetes有了Pod这个概念来解决这种严密关系。在一个Pod中的容器共享雷同的Cgroups和Namespace,因而它们之间并不存在边界和隔离环境,它们能够共享同一个网络IP,应用雷同的Volume解决数据等等。其中的原理就是在多个容器之间创立其共享资源的链接。然而为了解决到底是A共享B,还是B共享A,以及A和B谁先启动这种拓扑性的问题,一个Pod其实是由一个Infra容器联结AB两个容器独特组成的,其中Infra容器是第一个启动的: Infra容器是一个用汇编语言编写的、主过程是一个永远处于“暂停”状态的容器,其仅占用极少的资源,解压之后也仅有100KB左右。 实例演示在Kubernetes中的Pod介绍了一通,接下来咱们在实例中为大家演示Pod长什么样子。   咱们在任意一个装有Kubernetes的集群中通过以下的yaml文件和shell命令运行处一个Pod,这个YAML文件具体是什么意思临时不必理睬,之后我会对这个YAML做一阐明,咱们目前只须要明确:Kubernetes中的所有资源都能够通过以下这种YAML文件或者json文件形容的,当初咱们只须要晓得这是一个运行着busybox和nginx的Pod即可: 创立这个hello-pod.yaml文件之后运行以下命令: 通过上述命令,咱们就胜利创立了一个pod,咱们能够从执行后果看到infra容器的主过程成为了此Pod的PID==1的超级过程,阐明了Pod是组合而成的: 至此,咱们应该要了解Pod是Kubernetes的最小调度单位这个概念了,并且也应该把Pod作为一个整体而不是多个容器的汇合来对待。咱们再看看形容这个Pod的文件类型YAML。   YAML的语法定义: YAML是一种专门编写配置文件的语言,其简洁且弱小,在形容配置文件方面远胜于JSON,因而在很多新兴的我的项目比方Kubernetes和Docker Compose等都通过YAML来作为配置文件的描述语言。与HTML雷同,YAML也是一个英文的缩写:YAML Ain't Markup Language,聪慧的同学曾经看进去了,这是一个递归写法,突出了满满的程序员气味。其语法有如下特色:   -       大小写敏感 -       应用缩进示意层级关系,相似Python -       缩进不容许应用Tab,只容许应用空格 -       缩进的空格数目不重要,只有雷同层级的元素左侧对其即可 -       数组用短横线-示意 -       NULL用波浪线~示意 ...

July 21, 2021 · 1 min · jiezi

关于docker:docker配置私有harbor仓库

设置信赖 vi /etc/docker/daemon.json{******其余配置"insecure-registries": ["192.168.66.102:85"] 你的Harbor地址}重启docker. systemctl restart docker设置docker拜访Harbor的用户 docker login -u 用户名 -p 明码 192.168.66.102192.168.66.102 Harbor地址进入Harbor找到镜像复制拉取命令 docker pull 192.168.0.188:9123/test/order:v15.运行这个依据本人的镜像来 docker run -di -p 9001:9000 6656b965d8506.拜访胜利!!!———————————————— 原文链接:https://blog.csdn.net/CSDN877...

July 16, 2021 · 1 min · jiezi

关于docker:docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

1、从容器外面拷文件到宿主机?答:在宿主机外面执行以下命令 docker cp 容器名(或者容器id):要拷贝的文件在容器外面的门路 要拷贝到宿主机的相应门路 示例: 假如容器id为c06d387397ba,要从容器外面拷贝的文件路为:/tmp/workdir/nx1.mp4, 当初要将nx1.mp4从容器外面拷到宿主机的/Users/yangx/Downloads门路上面,那么命令应该怎么写呢? docker cp c06d387397ba:/tmp/workdir/nx1.mp4 /Users/yangx/Downloads/nx111.mp42.从宿主机拷文件到容器外面答:在宿主机外面执行如下命令 docker cp 要拷贝的文件门路 容器名(或者容器id):要拷贝到容器外面对应的门路 示例:假如容器id为c06d387397ba,当初要将宿主机/Users/yangx/Downloads/nx111.mp4文件拷贝到容器外面的c06d387397ba:/tmp/workdir门路上面,那么命令该怎么写呢? docker cp /Users/yangx/Downloads/nx111.mp4 c06d387397ba:/tmp/workdir

July 15, 2021 · 1 min · jiezi

关于docker:laradock-笔记

laradock 笔记官网文档中文文档装置步骤首先将 Laradock 我的项目代码克隆到本地:git clone https://github.com/Laradock/laradock.git进入 laradock 目录将 env-example 重命名为 .env:cp env-example .env而后在 .env 中批改镜像构建过程中 Linux 软件源为国内镜像免得镜像构建过程中呈现网络超时问题: CHANGE_SOURCE# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to trueCHANGE_SOURCE=true# Set CHANGE_SOURCE and UBUNTU_SOURCE option if you want to change the Ubuntu system sources.list file.UBUNTU_SOURCE=aliyun构建镜像 & 启动容器:docker-compose up -d nginx mysql redis beanstalkdnginx 镜像构建在 php-fpm 之上,php-fpm 构建在 workspace 之上,所以启动 nginx 会先启动 workspace 和 php-fpm。 如果指定端口曾经被占用,运行上述命令会报错,敞开相应的服务再从新运行上述命令即可。 如果在 Windows 零碎中上述指令构建镜像过程中报错: ...

July 14, 2021 · 2 min · jiezi

关于docker:docker-踩坑

运行导出的镜像报错:docker: Error response from daemon: No command specified.上传了web到NGINX,通过 docker export -o mynginx.tar [contianer id]构建出container文件,将文件拷贝到另一台装有docker的机器,运行docker import mynginx.tar 失去repository跟tag字段都是没有数据的,原来docker import 也有额定的参数然而通过该镜像启动容器又报错了docker: Error response from daemon: No command specified. 查阅材料晓得,运行导入的镜像必须带上command参数。然而通过docker ps查看是省略号换个命令docker ps --no-trunc查看残缺的命令,最初运行该镜像的容器带上command参数,胜利运行

July 13, 2021 · 1 min · jiezi

关于docker:阿里开源集群镜像技术实现整个集群整体打包

作者 | fanux.中弈, sealos作者,pouch maintainer, sealer创始人 我的项目地址:https://github.com/alibaba/se... 什么是集群镜像顾名思义和操作系统.iso镜像或者Docker镜像相似,集群镜像是用肯定的技术手段把整个集群的所有文件以肯定格局打成的一个资源包。比照单机和集群会发现一些乏味景象: 单机有计算存储网络这些驱动,集群有CNI/CSI/CRI的实现像是集群的驱动操作系统单机有ubuntu centos这些,咱们能够把kubernetes看成云操作系统单机上能够运行docker容器 或者是虚拟机,相当于一个运行的实例,集群也有运行着k8s的实例单机上的虚拟机镜像,docker镜像,所以随着云计算技术的倒退,在集群这个纬度也会形象出相似的镜像技术。以基于kubernetes的集群镜像为例,外面蕴含了除操作系统以外的所有文件: docker的依赖的二进制与systemd配置,dockerd的配置,以及一个公有的容器镜像仓库kubernetes外围组件二进制,容器镜像,kubelet system配置等利用须要用到的yaml配置或者helm chart,以及利用的容器镜像其它脚本,配置与二进制工具等利用运行须要的所有依赖同样集群镜像运行时必定不是起一个容器或者装在一台机器上,而是这个镜像能够间接装置到多台服务器上或者间接对接到私有云的基础设施上。 sealer介绍sealer是阿里巴巴开源的集群镜像的一个实现形式,我的项目地址: https://github.com/alibaba/se... 要实现集群。Docker解决了单个容器的镜像化问题,而sealer通过把整个集群打包,实现了分布式软件的Build Share Run!!! 试想咱们要去交付一个SaaS利用,它依赖了mysql es redis这些数据库和中间件,所有货色都在kubernetes上进行编排,那如果没有集群镜像那要做如下操作: 找个工具去装置k8s集群helm install mysql es redis... 如果是离线环境可能还须要导入容器镜像kubectl apply yoursaas看似如同也没那么简单,然而其实从整个我的项目交付的角度来说是面向过程极易出错的 那当初如果当初提供另外一个形式只有一条命令解决下面的问题你会不会用?sealer run your-saas-application-with-mysql-redis-es:latest能够看到只须要run一个集群镜像整个集群就被整体交付了,细节简单的操作都被屏蔽掉了,而且任何利用都能够应用雷同的形式运行。那这个集群镜像是怎么来的呢:咱们只须要定义一个相似Dockerfile的文件咱们称之为Kubefile, 而后执行一下build命令即可:sealer build -t your-saas-application-with-mysql-redis-es:latest .在单机和集群两个纬度进行一个比照就能够高深莫测:docker能够通过Dockerfile构建一个docker镜像,应用compose就能够运行容器。sealer通过Kubefile构建一个CloudImage,应用Clusterfile启动整个集群。 疾速体验制作和运行一个kubernetes dashboard的集群镜像来体验一个残缺的流程。编写Kubefile # 根底镜像,曾经被制作好了外面蕴含所有的kubernetes启动相干的依赖FROM registry.cn-qingdao.aliyuncs.com/sealer-io/cloudrootfs:v1.16.9-alpha.7# 下载官网的dashboard yaml编排文件,曾经下载了能够应用COPY指令RUN wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml# 指定运行形式,能够应用kubectl helm kustomiz等CMD kubectl apply -f recommended.yamlbuild dashboard集群镜像sealer build -t kubernetes-with-dashobard:latest . 运行集群镜像 # 上面命令会在服务器上安装k8s集群并apply dashboard, passwd指定服务器ssh明码,也能够应用密钥sealer run kubernetes-with-dashobard:latest \ --master 192.168.0.2,192.168.0.3,192.168.0.4 \  --node 192.168.0.5,192.168.0.6 \  --passwd xxx# 查看podkubectl get pod -A |grep dashboard 把制作好的镜像推送到镜像仓库,兼容docker registry sealer tag kubernetes-with-dashobard:latest docker.io/fanux/dashobard:latestsealer push docker.io/fanux/dashobard:latest这样就能够把制作好的镜像交付进来或者提供给他人复用。 应用场景sealer具体能帮咱们做哪些事呢,上面列举几个次要场景: | 装置kubernetes与集群生命周期治理(降级/备份/复原/伸缩)这是个最简略的场景,不论你是须要在单机上安装个开发测试环境还是在生产环境中装置一个高可用集群,不论是裸机还是对接私有云,或者各种体系结构操作系统,都能够应用sealer进行装置,这里只装置kubernetes的话就抉择个根底镜像即可。与其它的装置工具比照,sealer劣势在于: 简略到令人发指 sealer run 一条命令完结速度快到令人窒息,3min装完6节点,可能你在应用别的工具还没下载完sealer就曾经装完了,然而咱们后续还有黑科技优化到2min甚至1min以内兼容性与稳定性 兼容各种操作系统,反对x86 arm等体系结构一致性设计,会让集群放弃Clusterfile中的定义状态,以降级为例,只须要改一下Clusterfile中的版本号即可实现降级。 速度快是因为首先是golang实现,意味着咱们能够很多很粗疏的中央做并发的解决,这相比ansible就有更多的劣势了,而且还能够做更粗疏的错误处理,而后在镜像散发上摈弃了以前load的形式,后续在文件散发上也会做优化达到装置性能上的极致。 兼容性上,docker kubelet这里都采纳了二进制+systemd装置外围组件全容器化,这样不必再去依赖yum apt这类感知操作系统的装置工具。 ARM和x86采纳不同的镜像反对与sealer自身解耦开。 对私有云的适配也抽离独自模块进行实现,这里咱们没去对接terraform起因还是为了性能,在咱们的场景下terraform启动基础设施将近3min,而咱们通过退却重试把基础设施启动优化到了30s以内,还有就是在集群镜像这个场景下是不须要这么简单的基础设施治理能力的,咱们不想让sealer变重也不想去依赖一个命令行工具。 一致性的设计理念是sealer中值得一提的,集群镜像与Clusterfile决定了集群是什么样子的,雷同的镜像与Clusterfile就能run出个一样的集群进去。 变更要么变更Clusterfile如减少节点,扭转节点规格,要么换镜像,换镜像的时候因为集群镜像也是分层构造,hash值不变的layer不会产生变更,而hash发生变化会帮忙从新apply该层。 | 云原生生态软件的打包/装置等如prometheus mysql集群等sealer run prometheus:latest 就能够创立一个带有prometheus的集群,或者在一个已有的集群中装置prometheus。那么问题来了:和helm啥区别? sealer 不关怀编排,更重视打包,下面例子prometheus能够用helm编排的,sealer会把chart和chart外面须要的所有容器镜像打包起来,这是在build的过程中通过黑科技做到的,因为build过程会像docker build一样起长期的kubernetes集群,而后咱们就晓得了集群依赖了哪些容器镜像,最初把这些容器镜像打包。和kubernetes一起打包,拿了一个chart它未必能装置胜利,比方应用了废除的api版本,然而做成镜像把kubnernetes也包在一起了,只有build没问题,run就没问题,这点和docker把操作系统rootfs打包在一起殊途同归。集成性,集群镜像更关注整个分布式应用集群整体打包,如把prometheus ELK mysql集群这些做成一个镜像服务与业务。所以sealer与helm是协作关系,分工明确。 后续就能够在sealer的官网镜像仓库中找到这些通用的集群镜像而后间接应用。 | SaaS软件整体打包/交付 专有云离线交付从分布式应用的视角看,通常从上往下,少则几个多则上百的组件,现有整体交付形式大多都是面向过程的,两头须要很多认为干涉的事,sealer就能够把这些货色通通打包在一起进行一键交付。 可能你会问,我做个tar.gz再加个ansible脚本不也是能一样一键化嘛,那是必定,就和docker镜像呈现之前大家也通过tar.gz交付一样,你会发现规范和技术的呈现解决和人与人之间的合作问题, 有了集群镜像你能够间接复用他人的成绩,也能制作好货色做他人应用。 专有云场景就非常适合应用sealer,很多客户机房都是离线的,而集群镜像会把所有依赖打到镜像中。 只有镜像制作的好那所有局点都能够以雷同的形式进行一键交付,取得极佳的一致性体验。 | 在私有云上实际上述场景sealer自带对接私有云属性,很多状况下对接私有云会有更好的应用体验,比方装置集群时只须要指定服务器数量和规格而不必关怀IP,伸缩间接批改Clusterfile中定义的数字即可。 技术原理简介| 写时复制集群镜像的存储也是通过写时复制的形式,这样做有两个益处,咱们能够把一个集群中不同的分布式式软件打在不同的层,以实现复用,还能够实现间接把集群镜像push到docker镜像仓库中。 | 容器镜像缓存build的过程中sealer是如何晓得待构建的集群镜像里有哪些容器镜像,以及怎么把容器镜像存储下来,这其中有一些难点问题: 如何晓得分布式软件中有哪些容器镜像,因为咱们须要把这些镜像缓存下来,不论是扫描用户的yaml文件还是用helm template之后扫描都是不完满的,首先不能确定用户的编排形式是什么,其次有些软件甚至不把镜像地址写在编排文件中,而是通过本人的程序去拉起。无奈保障build胜利运行就肯定没问题。容器镜像是须要被存储到公有仓库中打包在集群镜像里,那容器镜像仓库地址势必和编排文件中写的不一样,特地是怎么保障用户alwayPull的时候还是可能在公有仓库中下载到镜像。看待第一个问题,sealer解决形式是 sealer build的过程中和Docker build一样会起一个长期的kubernetes集群,并执行用户在Kubefile中定义的apply指令。这样就能够保障用户依赖的所有镜像都被打包进去,无论用户应用什么样的编排形式。第二个问题,咱们打包容器镜像到公有镜像仓库中,怎么应用这个公有镜像也是个问题,因为假如公有镜像仓库名为localhost:5000 那必定会和编排文件中写的不一样,咱们有两种形式解决,第一种是hack和docker,做了一个只有公有镜像仓库中有就间接从公有镜像中拉取,没有才去公网拉取镜像的能力。 还有种计划是无侵入docker的proxy,把docker申请全部打给代理,让代理去决定如果公有仓库有就从公有仓库拉取。同时咱们还加强了registry的能力让registry能够cache多个近程仓库的能力。sealer的这种计划完满的解决了离线场景镜像打包的问题。 ...

July 13, 2021 · 1 min · jiezi

关于docker:docker-常见命令

docker 常见命令查看版本docker -v查看具体版本docker version查看 docker 根本信息docker info镜像相干的命令镜像仓库地址:https://hub.docker.com 查看本地曾经装置的镜像docker images搜寻指定镜像docker search <image-name># 比方搜寻 centos 镜像docker search centos拉取镜像docker pull <image-name># 比方拉取 centos 镜像(将会拉取最新版本的镜像,即 latest 版本)docker pull centos# 拉取指定版本的镜像docker pull ubuntu:16.04删除镜像docker rmi <image-name># 比方删除 centos 镜像docker rmi centos删除所有的镜像docker rmi $(docker images -q)# 查看所有镜像的镜像 iddocker images -q更新镜像# 更新镜像前,须要应用镜像创立一个容器docker run -it ubuntu:15.10 bash# 在运行的容器外部应用 apt-get update 更新# 更新结束之后,输出 exit 命令退出容器# 应用 docker commit 来提交容器正本docker commit -m="has update" -a="alex" e218edb10161 alex/ubuntu:v2# -m 示意提交的形容信息# -a 示意提交的镜像作者# e218edb10161 示意容器的 id# alex/ubuntu:v2 示意指定要创立的指标镜像名# 查看新的镜像docker images# 应用新镜像 alex/ubuntu:v2 来启动一个容器docker run -it alex/ubuntu:v2 bash构建镜像vim ~/glory/codes/book/demo/Dockerfile 填充以下内容,构建一个 centos 8 零碎# 指定应用哪个镜像源FROM centos:8# 如果写了 3 次 RUN 那么将会在 docker 上新建 3 层,会导致镜像收缩过大,上面这种形式只会创立 1 层镜像RUN /bin/echo 'root:123456' | chpasswd; \useradd alex; \/bin/echo 'alex:123456' | chpasswd; \/bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/localEXPOSE 22EXPOSE 80CMD /usr/sbin/sshd -D开始构建镜像,留神不要在 ~/glory/codes/book/demo 目录下放无用的文件,因为会打包所有该目录下的文件而后发送给 docker 引擎,如果文件过多会造成 build 过程迟缓# -t 示意指定要创立的指标镜像名# ~/glory/codes/book/demo 示意 Dockerfile 文件所在的目录docker build -t alex/centos:8.0 ~/glory/codes/book/demo# 查看曾经构建好的镜像信息docker images# 应用新的镜像来创立新容器docker run -it alex/centos:8.0 bash设置镜像标签# 先查看镜像$ docker images REPOSITORY TAG IMAGE ID CREATED SIZEalex/centos 8.0 594ab4747ed4 14 minutes ago 210MB# 设置镜像标签$ docker tag 594ab4747ed4 alex1/centos1:8.1.1# 再次查看镜像信息会多一个标签$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEalex/centos 8.0 594ab4747ed4 14 minutes ago 210MBalex1/centos1 8.1.1 594ab4747ed4 14 minutes ago 210MB容器相干的命令查看容器的零碎版本信息# 进入容器后执行cat /proc/version# 比方会输入以下内容Linux version 4.19.121-linuxkit (root@18b3f92ade35) (gcc version 9.2.0 (Alpine 9.2.0)) #1 SMP Thu Jan 21 15:36:34 UTC 2021查看所有的容器docker ps -a# 或者应用以下命令,是一样的成果docker container ls -a# 查看最初一次创立的容器docker ps -l查看所有曾经运行的容器docker ps查看容器端口映射docker port <container-name or container-id>查看 docker 底层信息(比方:查看指定容器的 ip 地址)# 查看 docker 容器的配置和状态信息docker inspect <container-name or container-id> # 查看容器的 ip 地址docker inspect <container-name or container-id> | grep IPAddress# 比方查看容器 id 为 66204be9fe65 的容器所对应的 ip 地址docker inspect 66204be9fe65 | grep IPAddress# 比方查看容器名称为 alex 所对应的 ip 地址docker inspect alex | grep IPAddress创立容器并把镜像复原到容器当中,且启动容器docker run [-i][-t][-v][--name][-d][-p]# -i 示意 interactive 交互式# -t 示意失去一个 terminal# --name 示意批改容器名称# -d 示意以守护过程的形式运行(默认不会进入容器,想要进入容器则须要应用 docker exec 命令)# -p 示意 **指定** 映射端口# -P (大写的字母 p ) 示意 **随机** 映射端口# /bin/bash 和 bash 等效docker run -it <image-name> /bin/bash# 比方创立一个新容器并且进入 ubuntu:16.04 镜像docker run -it ubuntu:16.04 bash# 或者docker run -it ubuntu:16.04 /bin/bash# 或者docker run -it ubuntu:16.04# 以 centos 镜像创立一个新容器,并批改新容器名称为 alex-containerdocker run -it --name alex-container centos bash # 以守护过程的形式运行 (后盾运行)docker run -d --name alex-container centos # 或者docker run -di --name alex-container centos# 指定容器绑定的网络地址,这样咱们就能够通过拜访 127.0.0.1:5001 来拜访容器的 5000 端口(默认绑定的都是 tcp 端口)docker run -d -p 127.0.0.1:5001:5000 centos:8.0 bash# 如果须要绑定 udp 端口,则# (还能够进入容器就间接执行 python app.py 命令)docker run -d -p 127.0.0.1:5001:5000/udp centos:8.0 python app.py# 比方,装置 hyperf 镜像并启动容器# 如果 docker 启动时开启了 selinux-enabled 选项,容器内拜访宿主机资源就会受限,所以启动容器时能够减少 --privileged -u root 选项docker run --name hyperf \-v /workspace/skeleton:/data/project \-p 9501:9501 -it \--privileged -u root \--entrypoint /bin/sh \hyperf/hyperf:7.4-alpine-v3.11-swoole# 如果须要开明多个端口时,能够参考docker run --name api_dfo_hyperf_ws \-v /Users/pudongping/glory/codes/dfo/api_dfo_hyperf:/api_dfo_hyperf \-p 9502:9502 \-p 9503:9503 \-p 9504:9504 \-p 9505:9505 -it \--entrypoint /bin/sh \alex/alex_api_dfo:v1.0启动容器docker start <container-name or container-id># 比方启动容器名称为 redis-alex 的容器docker start redis-alex# 比方启动容器 id 为 c8c0c770ac5b 的容器docker start c8c0c770ac5b间接进入曾经创立的容器(不会启动容器)docker start -i <container-name or container-id># 比方进入容器 id 为 66204be9fe65 的容器docker start -i 66204be9fe65# 比方进入容器名称为 alex 的容器docker start -i alex重启容器docker restart <container-name or container-id># 比方重启容器名称为 redis-alex 的容器docker restart redis-alex# 比方重启容器 id 为 c8c0c770ac5b 的容器docker restart c8c0c770ac5b进入曾经运行中的容器docker exec -it <container-name or container-id> bash# 比方进入容器名称为 redis-alex 的容器docker exec -it redis-alex bash# 比方进入容器 id 为 c8c0c770ac5b 的容器docker exec -it c8c0c770ac5b bash# 进入容器之后执行 shell 命令或者执行 shell 脚本docker exec -it <container-name or container-id> /bin/sh -c "while true; do echo hello world; sleep 1; done"# 比方进入容器 id 为 c8c0c770ac5b 的容器,并且进入容器后执行 `bash /portal_api_dfo_hyperf/server.sh restart` 脚本docker exec -it c8c0c770ac5b /bin/sh -c "bash /portal_api_dfo_hyperf/server.sh restart"进行容器docker stop <container-name or container-id># 比方进行容器名称为 redis-alex 的容器docker stop redis-alex# 比方进行容器 id 为 c8c0c770ac5b 的容器docker stop c8c0c770ac5b退出容器exit删除容器docker rm <container-name or container-id># 也能够退出 -f 参数,强制移除正在运行中的容器docker rm -f 1e560fca3906# 清理掉所有处于终止状态的容器docker container prune批改容器名称docker rename <container-name or container-id> <new-container-name># 比方将容器 redis-alex 改名为 redis-ttdocker rename redis-alex redis-tt查看容器的规范输入docker logs <container-name or container-id># 比方查看容器 id 为 c8c0c770ac5b 的容器规范输入内容docker logs c8c0c770ac5b# 也能够退出 -f 参数,像应用 tail -f 一样来输入容器外部的规范输入docker logs -f c8c0c770ac5b容器与宿主机之间的文件或者目录拷贝从宿主机拷贝文件到容器中docker cp <local-directory-or-file> <container-name>:<container-directory-or-file># 比方将宿主机中的 /home/alex/test.txt 文件拷贝到 centos1 容器中的 /test.txtdocker cp /home/alex/test.txt centos1:/test.txt从容器拷贝到宿主机中docker cp <container-name>:<container-directory-or-file> <local-directory># 比方将 centos1 容器中的 /test 目录拷贝到宿主机的 /home/alex 目录下docker cp centos1:/test /home/alex目录挂载(创立容器的时候就须要进行目录挂载)docker run -di -v <local-directory>:<container-directory> <image-name># 在 windows 下挂载(留神门路的书写形式)# 比方以 centos 镜像创立一个容器,并将本地 D 盘中的 alex 目录,挂载到容器中的 /usr/local/demo 目录docker run -di -v d:\alex:/usr/local/demo centos# 在 linux 下挂载# 比方以 centos 镜像创立一个容器,并将本地的 /home/alex/alex 目录,挂载到容器中的 /usr/local/demo 目录docker run -di -v /home/alex/alex:/usr/local/demo centos导出和导入容器导出容器快照docker export <container-id> > <your-backup-name.tar># 比方将容器 id 为 7691a814370e 的容器导出快照为 alex.tardocker export 7691a814370e > alex.tar导入容器快照cat <your-backup-name.tar> | docker import - <image-author-name>/<your-new-image-name>:<your-new-image-version># 比方将容器快照文件 alex.tar 导入到 alex-demo 镜像并定义 alex-demo 镜像的作者为 alex,版本号为 v1.0cat alex.tar | docker import - alex/alex-demo:v1.0# 此外,也能够通过指定 url 或者某个目录来导入docker import http://example.com/example-image.tgz example/image-repo:v1.0原文链接地址

July 13, 2021 · 4 min · jiezi

关于docker:docker四种网络模式

一.为什么要理解docker网络当你开始大规模应用Docker时,你会发现须要理解很多对于网络的常识。Docker作为目前最火的轻量级容器技术,有很多令人称道的性能,如Docker的镜像治理。然而,Docker同样有着很多不欠缺的中央,网络方面就是Docker比拟单薄的局部。因而,咱们有必要深刻理解Docker的网络常识,以满足更高的网络需要。本文首先介绍了Docker本身的4种网络工作形式,而后介绍一些自定义网络模式。 二.docker 网络理论Docker应用Linux桥接(参考《Linux虚构网络技术》),在宿主机虚构一个Docker容器网桥(docker0),Docker启动一个容器时会依据Docker网桥的网段调配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就可能通过容器的Container-IP间接通信。 Docker网桥是宿主机虚构进去的,并不是实在存在的网络设备,内部网络是无奈寻址到的,这也意味着内部网络无奈通过间接Container-IP拜访到容器。如果容器心愿内部拜访可能拜访到,能够通过映射容器端口到宿主主机(端口映射),即docker run创立容器时候通过 -p 或 -P 参数来启用,拜访容器的时候就通过 [宿主机IP]:[容器端口] 拜访容器。 当你装置Docker时,它会主动创立三个网络。你能够应用以下 docker network ls 命令列出这些网络: # docker network lsNETWORK ID NAME DRIVER SCOPE857db65319fa bridge bridge localc16cf8722909 host host locald39a88b56801 none null local三.docker的四类网络模式网络模式配置阐明bridge模式--net=bridge(默认为该模式)此模式会为每一个容器调配、设置IP等,并将容器连贯到一个docker0虚构网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。host模式--net=host容器和宿主机共享Network namespace。container模式--net=container:NAME_or_ID容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。none模式--net=none该模式敞开了容器的网络性能。3.1 bridge模式当Docker过程启动时,会在主机上创立一个名为docker0的虚构网桥,此主机上启动的Docker容器会连贯到这个虚构网桥上。虚构网桥的工作形式和物理交换机相似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 从docker0子网中调配一个IP给容器应用,并设置docker0的IP地址为容器的默认网关。在主机上创立一对虚构网卡veth pair设施,Docker将veth pair设施的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样相似的名字命名,并将这个网络设备退出到docker0网桥中。能够通过brctl show命令查看。 bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。应用docker run -p时,docker理论是在iptables做了DNAT规定,实现端口转发性能。能够应用iptables -t nat -vnL查看。 bridge模式如下图所示: 3.2 host模式如果启动容器的时候应用host模式,那么这个容器将不会取得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚构出本人的网卡,配置本人的IP等,而是应用宿主机的IP和端口。然而,容器的其余方面,如文件系统、过程列表等还是和宿主机隔离的。 应用host模式的容器能够间接应用宿主机的IP地址与外界通信,容器外部的服务端口也能够应用宿主机的端口,不须要进行NAT,host最大的劣势就是网络性能比拟好,然而docker host上曾经应用的端口就不能再用了,网络的隔离性不好。 Host模式如下图所示: 3.3 container模式这个模式指定新创建的容器和曾经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创立本人的网卡,配置本人的 IP,而是和一个指定的容器共享 IP、端口范畴等。同样,两个容器除了网络方面,其余的如文件系统、过程列表等还是隔离的。两个容器的过程能够通过 lo 网卡设施通信。 Container模式示意图: ...

July 12, 2021 · 1 min · jiezi

关于docker:URLOS158分时段限制容器的带宽自定义NGINX虚拟主机配置

终于又与大家见面啦!说到晋升URLOS的生产力,咱们上半年的一系列更新以及软骨鱼SaaS零碎的公布,曾经足以阐明咱们对URLOS的生产力落地是非常重视的。在这隆冬7月里,URLOS又将带来哪些令人兴奋的更新呢? 1.分时段限度容器的带宽分时段限度容器的带宽,说白了就是本人定义应用服务在哪些时段中可应用多少带宽。 举个栗子: 假如主机总带宽为100M,早上7点到晚11点59分,把某服务的带宽资源下调至10M,凌晨12点到早上6点59分,把某服务的带宽上调至90M。 留神:该性能为付费性能,如有须要,请分割客服购买这样做有哪些益处? 无效限度占用带宽资源的流量小户,确保其余利用失去稳固的带宽资源(比方:BT下载利用);主机中同时运行区块链存储利用和网站时,可实现白天跑网站,凌晨参加区块链存储的骚操作(比方:Swarm/BZZ区块链存储);请留神:以上性能是针对容器虚构网卡进行限度,也就是在容器外部失效。如果你是网站服务须要进行流量限度,请间接应用网站服务中的【防爆限流】性能: 2.可齐全自定义NGINX虚拟主机配置大家想要的齐全自定义NGINX虚拟主机配置,安顿! 在网站服务的Nginx配置中,新增了Nginx配置类型,默认采纳【简洁填写】,为的是不便无技术根底的一般人士应用,如果你是专业人士,可采纳【高级定制】的形式设置Nginx。 留神:采纳【高级定制】时,Nginx的运行模式仅反对“兼容模式”。3.重启Docker、重启主机、敞开主机用户反馈:既然是集中化治理主机,那为什么不能在面板中敞开或重启某台主机呢? 先解释一下:咱们之所以没有在面板中集成关机、重启主机的性能,是优先从主机数据安全性方面思考,不失当的重启或关机有可能造成数据损坏。 尽管咱们在新版本中凋谢了关机和重启主机的性能,但咱们仍旧倡议大家在关机或重启主机前,先执行【进入保护模式】,再关机或重启主机。 预报:软骨鱼国际版行将公布软骨鱼SaaS零碎国内版本正在紧锣密鼓的研发中,不日将公布,届时不仅能让国外友人更不便的应用软骨鱼SaaS零碎,也能让国内软件开发者更不便的发展跨国软件生意! 抢鲜晓得: 软骨鱼零碎后盾界面与SaaS软件商城前台将实现英文语言定制;将凋谢国内领取接口PayPal;

July 12, 2021 · 1 min · jiezi

关于docker:CentOS7修改Docker容器和镜像默认存储位置

本文被帮忙文档: 链接1链接2CentOS7批改Docker容器和镜像默认存储地位通常,当你开始应用docker时,咱们并不太关怀Docker 用于存储镜像和容器的默认目录。当应用Docker进行更多试验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。所以当初是时候把故障排除放在如何扭转docker的默认存储地位了 在试图扭转Docker的默认存储地位时,咱们必须晓得一些重要的信息。 docker 以后应用的默认存储地位docker 以后应用的存储驱动程序镜像和容器要寄存的新存储空间 Docker 默认的地位在/var/lib/docker,以后所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,进行这些容器,并确保没有容器在运行,而后运行以下命令,确定以后Docker应用的存储驱动。 1、查看docker以后信息注:此处须要留神docker的两个信息: Storage Driver: overlay2 以后Docker应用的存储驱动Docker Root Dir: /var/lib/docker 以后docker应用的数据目录docker info[root@localhost ~]# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 18.09.6Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: falseLogging Driver: json-fileCgroup Driver: cgroupfsPlugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30init version: fec3683Security Options: seccomp Profile: defaultKernel Version: 3.10.0-514.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 976.5MiBName: localhost.localdomainID: 3EGY:424H:ER2C:CBQ7:KUD5:SFRJ:TVDK:XV4Y:AFYJ:SOOL:7OM6:65K5Docker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries: 127.0.0.0/8Live Restore Enabled: falseProduct License: Community Engine2、进行docker服务systemctl stop docker3、批改docker服务启动文件[root@localhost ~]# vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/mnt/docker留神: ...

July 10, 2021 · 2 min · jiezi

关于docker:docker常用命令

Docker根本命令1. 查看docker信息(version、info)# 查看docker版本 $docker version # 显示docker零碎的信息 $docker info 2. 对image的操作(search、pull、images、rmi、history)# 检索image $docker search image_name # 下载image $docker pull image_name # 列出镜像列表; # -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs $docker images # 删除一个或者多个镜像; # -f, --force=false Force; --no-prune=false Do not delete untagged parents $docker rmi image_name # 显示一个镜像的历史; # --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs $docker history image_name 3. 启动容器(run)docker容器能够了解为在沙盒中运行的过程。这个沙盒蕴含了该过程运行所必须的资源,包含文件系统、零碎类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你须要在沙盒中运行一个过程来启动某一个容器。这个过程是该容器的惟一过程,所以当该过程完结的时候,容器也会齐全的进行。 ...

July 10, 2021 · 3 min · jiezi

关于docker:Docker-常用命令还有谁不会给你总结好了

1、Docker容器信息##查看docker容器版本docker version##查看docker容器信息docker info##查看docker容器帮忙docker --help2、镜像操作提醒:对于镜像的操作可应用镜像名、镜像长ID和短ID。这20个Docker Command,有几个是你会的? 2.1、镜像查看##列出本地imagesdocker images##含两头映像层docker images -a ##只显示镜像IDdocker images -q##含两头映像层docker images -qa ##显示镜像摘要信息(DIGEST列)docker images --digests##显示镜像残缺信息docker images --no-trunc ##显示指定镜像的历史创立;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示残缺的提交记录;-q 仅列出提交记录IDdocker history -H redis2.2、镜像搜寻##搜寻仓库MySQL镜像docker search mysql## --filter=stars=600:只显示 starts>=600 的镜像docker search --filter=stars=600 mysql## --no-trunc 显示镜像残缺 DESCRIPTION 形容docker search --no-trunc mysql## --automated :只列出 AUTOMATED=OK 的镜像docker search --automated mysql 2.3、镜像下载##下载Redis官网最新镜像,相当于:docker pull redis:latestdocker pull redis##下载仓库所有Redis镜像docker pull -a redis##下载私人仓库镜像docker pull bitnami/redis 2.4、镜像删除##单个镜像删除,相当于:docker rmi redis:latestdocker rmi redis##强制删除(针对基于镜像有运行的容器过程)docker rmi -f redis##多个镜像删除,不同镜像间以空格距离docker rmi -f redis tomcat nginx##删除本地全副镜像docker rmi -f $(docker images -q)2.5、镜像构建##(1)编写dockerfilecd /docker/dockerfilevim mycentos##(2)构建docker镜像docker build -f /docker/dockerfile/mycentos -t mycentos:1.1举荐你浏览:能说说容器和镜像的区别吗? ...

July 7, 2021 · 2 min · jiezi

关于docker:Docker与k8s的恩怨情仇四云原生时代的闭源落幕

转载请注明出处:葡萄城官网,葡萄城为开发者提供业余的开发工具、解决方案和服务,赋能开发者。在本系列前几篇文章中,咱们介绍了从Cloud Foundry到Docker等PaaS平台的倒退迭代过程。明天咱们持续来为大家介绍Docker走向落寞的起因以及大航海时代的开启。 Docker的商业化上篇中,咱们讲到了Docker我的项目利用本人翻新的Docker Image霎时爆红,于是许多商家也从中发现商机,纷纷推出本人的容器产品,也想在市场中分一杯羹。CoreOS推出了Rocket(rkt)容器,Google也开源了本人的容器我的项目lmctfy(Let Me Container That For You)等,然而面对Docker我的项目的强势,就算是Google这种大佬也毫无招架之力。因而Google打算和Docker公司发展单干,关停本人的容器我的项目,并且和Docker公司一起保护开源的容器运行,然而Docker公司方面很强势的回绝了这个显著会减弱本人位置的单干。 在这时Docker公司也意识到了,本人仅仅是云计算技术栈中的幕后英雄,只能当做平台最终部署利用的载体。然而,要想成为这个畛域的外围,就应该有本人的PaaS生态。在Docker爆火,有了短缺的资金之后,Docker公司开始了疯狂的买买买来裁减本人的实力,其中最闻名的就署名Fig。Fig是闻名的Docker Compose我的项目的前身。通过这些并购与本身研发迭代,Docker公司最终推出了以本人为外围的PaaS三件套:Docker Compose、Docker Swarm以及Docker Machine。上面简略为大家介绍一下Docker三件套的内容: Docker Compose:Compose的前身,是一个仅有两个人保护的Docker容器编排的开源我的项目Fig,它的性能是:如果当初用户须要部署一个利用A和一个数据库B以及负载平衡C,那么Fig就容许用户把ABC三个容器定义在一个配置文件中,并且指定它们的关联关系。最初只须要一条命令fig up即可间接应用。在Docker大火的时候,Fig我的项目在Github上的热度堪比Docker,因而在2015年Docker公司将其收买,并且改名为Docker Compose,作为Docker容器的编排工具,并且应用至今。 Docker Swarm:Swarm是Docker的集群治理我的项目,其次要的逻辑就和上一节讲过的Cloud Foundry相似,能够以相似于docker run 我的镜像的命令行形式,以docker run -H 我的Swarm集群API地址 我的镜像这样将Docker运行成一个集群并且进行治理,Swarm的呈现将Docker我的项目从一个一般的容器降级成为PaaS平台。Docker Machine:Machine应该是Docker三件套里最不闻名的,它的性能是将虚拟机运行成容器,并且能够以治理Docker容器的形式治理虚拟机。OCI的“不作为”到CNCF呈现在倒退之路上,Docker公司在Docker开源我的项目的倒退上始终保持着相对的权威和发言权,并且在多个场合用实际行动挑战到了其余玩家的利益;另一方面,Docker公司的商业化门路重大侵害了已经的单干公司RedHat的切身利益;再加之,Docker在2015年间的高速迭代表中现出了各种不稳固的breaking change开始让社区叫苦不迭。 人红是非多,更何况Docker还抢了大家的蛋糕。于是,容器畛域的其余几位玩家开始切磋“切割”Docker我的项目的话语权。最终,Docker公司迫于压力,于2015年6月22日,牵头了CoreOS、Google、RedHat等公司,独特成立了一个中立的基金会,并将本人的容器运行时LibContainer捐出,改名为RunC,基金会根据RunC独特制订了一套容器和镜像的规范和标准——OCI(Open Container Initiative)。 OCI的成立,意味着容器运行时和镜像的实现与Docker我的项目齐全剥离,让其余玩家不依赖Docker实现本人的Docker运行时成为可能。 然而,因为成立基金会只是Docker公司对这些大公司的斗争,并且其过后的确保护着数量足够宏大的社区,因而Docker公司对基金会的成立有恃无恐,并且对规范的制订并不关怀。因为在过后的大环境下,Docker本人的实现,曾经就是业界对立的规范了。 因为OCI基金会倒退非常迟缓,因而Google、RedHat等基础设施畛域的头部玩家打出了手中的王牌,独特牵头成了一个名叫CNCF(Cloud Native Computing Foundation)的基金会(这也是云原生这个概念第一次呈现在公众视线内)。CNCF基金会成立的思维根底是,以Kubernetes我的项目为根底,建设一个由开源基础设施畛域厂商主导的依照独立基金会形式经营的平台级社区,来反抗以Docker为外围的容器商业生态。也正是这个基金会的成立,咱们第二节的主人公Kubernetes也开始锋芒毕露。 Kubernetes的呈现与倒退Kubernetes是Google公司早在2014年就公布开源的一个容器基础设施编排框架,和其余拍脑袋想进去的技术不同,Kubernetes的技术是有理论依据的,即:Borg。Borg是Google公司整个基础设施体系中的一部分,Borg是Google公司整个基础设施体系中的一部分,Google也公布了多篇对于Borg的论文作为其实践反对。其上承载了比方MapReduce、BigTable等诸多业界的头部技术。因而Borg零碎始终以来都被誉为Google公司外部最弱小的“秘密武器”,也是Google公司最不可能开源的我的项目,而Kubernetes就是在这样的实践根底上开发的。下图是Google Omega论文所形容的Google已公开的基础设施栈。 开源vs闭源 面对k8s的呈现,一场Docker和k8s之间的容器之战就此打响。 在这场反抗之初,因为Kubernetes开发灵感和设计思维来源于Borg,Kubernetes我的项目在刚公布时就被称为曲高和寡。太过超前的思维让开发者无奈了解,同时因为Kubernetes我的项目始终由Google的工程师自行保护,所以在公布之初并没有取得太多的关注和成长。 然而,CNCF的成立扭转了这所有,RedHat的短处就是有着成熟的社区管理体系,并且也有足够多的工程能力,这使得Kubernetes我的项目在交由社区保护开始迅速倒退,并且逐步开始和Docker分庭抗礼。并且和Docker的关闭商业模式不同,Kubernetes反其道而行之主打开源和民主化,每一个重要性能都给用户提供了可定制化的接口,并且普通用户也能够无权限拉取批改Kubernetes的代码,社区有专门的reviewer以及approver,只有你写的代码通过PR通过了代码审核和批准,就会成为Kubernetes的骨干代码,这也大大的减少了Kubernetes的生机。并且,依靠于开放性接口,基于Kubernetes的开源我的项目和插件亘古未有,并且依靠于优良的架构设计,微服务等新兴的技术理念也迅速落地,最终造成了一个百花齐放的稳固宏大的生态。 而Docker只能通过本人的工程师批改,在这一点上与Kubernetes相比就与远落下风。 总结起来: 面对Kubernetes社区的崛起和壮大,Docker公司不得不抵赖本人的豪赌以失败告终,从2017年开始,Docker将Docker我的项目的容器运行时局部Containerd捐献给了CNCF社区,并且在当年10月发表将在本人的Docker企业版中内置Kubernetes我的项目,这也标记着继续了近两年的容器编排之战落下帷幕。2018年1月,RedHat公司发表斥资2.5亿美元收买CoreOS,2018年3月,这所有纷争的始作俑者Docker公司的CTO Solomon Hykes发表辞职,至此,纷扰的容器技术圈尘埃落定,天下归一。 总结本文为大家介绍了Docker是如何在PaaS平台中成为焦点,又如何一步步被Kubernetes代替。下一节咱们将持续为大家介绍Kubernetes除了社区之外,在自身的容器编排技术上是如何降维打击Docker公司的,敬请期待。

July 7, 2021 · 1 min · jiezi

关于docker:Rainbond-531-发布支持100组件的超大应用一键交付

Rainbond 5.3.1 公布,反对100+组件的超大利用一键交付2021年7月5日,Rainbond 5.3.1 正式公布。 Rainbond 是云原生且易用的利用治理平台。云原生利用交付的最佳实际。专一于以利用为核心的理念,赋能企业搭建云原生开发云、云原生交付云。 对于企业: Rainbond 是开箱即用的云原生平台,借助 Rainbond 能够疾速实现企业研发和交付体系的云原生转型。 对于开发者: 基于 Rainbond 开发、测试和运维企业业务利用,开箱即用的取得全方位的云原生技术能力。包含但不仅限于继续集成、服务治理、架构撑持、多维度利用观测、流量治理。 对于我的项目交付: 基于 Rainbond 搭建产品版本化管理体系,搭建标准化客户交付环境,使传统的交付流程能够自动化、简单化和可治理。 近一年,应用Rainbond 云原生利用交付流程(见下图)的开源用户成为支流,面对不同用户的业务复杂性,对Rainbond交付流程的性能提出了新的要求。从 5.3.0 版本公布以来4个月的工夫,Rainbond 开发者以交付链路的性能优化为次要迭代方向。 在工业互联网、智慧园区建设、智慧城市建设等等畛域中,一个利用解决方案大多具备50-100个服务组件。在这些行业中,通常会有多家利用厂商来单干实现一个解决方案。Rainbond 在这个过程中提供多项能力: (1)标准化利用交付模型,对立各个利用厂商的利用交付规范,使行业集成商低成本集成解决方案。 (2)对立交付环境,一键实现利用交付。大大降低销售过程中的演示场景、POC场景和老本和最终交付的老本。 (3)智能利用运维治理,升高最终客户的运维老本。 要害变更反对100+组件规模利用交付基于上述的Rainbond利用交付流程,以后版本在利用模型公布、利用模型装置、利用降级、利用生命周期治理四个维度进行性能优化。以利用模型装置为例,100个组件的装置过程须要调用大量的计算资源,管制组件的启动程序,管制微服务零碎注册和配置散发。 <center>多组件利用装置和降级演示</center> Helm利用装置与治理(Beta)Rainbond 不反对Helm利用装置和治理早已是一个痛点。Rainbond 的产品状态是以治理自定义的利用标准为外围的云原生利用治理。与其余容器化平台不一样,咱们不提供Kubernetes原生的资源管理面板。因而在面对灵便的Helm利用包,咱们没有很好的形式将所有Helm利用转化为Rainbond的利用标准。在OAM标准的实现模式中,有一个思路是把每一个Helm利用定义为自定义的组件类型,对其进行资源类型辨认从而实现一些运维能力注入。咱们认为这种模式精细化治理有劣势,但用户落地老本很大。 以后版本咱们采纳一种新的模式来装置和治理Helm利用。咱们将其定位为 Rainbond 原生利用的补充,作为部署一些中间件的载体,所以咱们次要要思考解决以下问题: (1)Helm装置的利用如何接入Rainbond ServiceMesh微服务架构,实现原生利用可调用Helm利用。 (2)Helm装置的利用如何接入Rainbond 网关,实现内部拜访及流量治理。 (3)Helm利用治理能力反对多少。 咱们定义了Kubernets自定义资源HelmApp,实现HelmApp的多集群部署。用户对接上Helm利用商店后,即可抉择利用进行装置。装置过程中齐全反对Helm利用的配置标准进行利用配置,同时也反对 Rancher 定义的配置表单标准,实现配置表单主动生成。Helm利用部署后自动识别其Service资源,进行服务的注册,实现Rainbond微服务和网关体系的接入。 逐渐适配OAM利用标准从5.3.1版本开始,咱们开始逐渐适配OAM利用标准,晋升Rainbond的可扩展性。在以后版本中咱们基于OAM标准,从新实现第三方组件类型,定义了ThirdComponent 作为第一个 ComponentDefinition,并在产品中实现对ComponentDefinition的根底管理机制。接下来Rainbond中现有的两种内置组件类型逐渐基于ComponentDefinition定义实现。而后凋谢用户自行扩大的能力,Rainbond中提供整个支撑体系,包含通用运维特色能力注入、配置UI化、通用的微服务治理和流量治理、利用打包交付等。 具体变更点新增性能【利用商店】反对Helm利用仓库对接;【利用治理】反对Helm利用装置和配置;【微服务治理】反对通过网关或外部组件依赖两种形式拜访Helm装置的利用;【微服务治理】新增GRPC协定的服务治理能力;【微服务治理】新增对组件下容器启动顺序控制,实现mesh容器先于业务容器启动;【组件治理】新增基于kubernetes service服务发现类型的第三方组件;【源码构建】Go语言新增对Go 1.14、1.15、1.16 版本Runtime的反对;【源码构建】Go语言新增对构建模块和启动命令的配置;【源码构建】Java、Go、PHP等语言新增pre_build、post_build构建时shell hook的反对;【企业治理】用户治理中新增对用户所在团队及角色的批量治理能力;【企业治理】团队治理中新增开明集群的性能入口;【集群装置】反对RKE集群配置,实现集群节点配置的灵便调整;优化性能【性能】利用降级体系优化,反对100+组件批量降级;【性能】从利用商店装置组件实现优化,反对100+组件批量装置;【性能】改良拓扑图加载逻辑,减速大利用下拓扑图加载速度;【性能】优化在大量组件状况下的利用级生命周期操作API的性能;【稳定性】利用网关优化,解决异样利用拜访导致网关内存泄露的故障;【组件治理】反对空值的环境变量和配置组变量;【监控报警】移除谬误的节点衰弱检测报警策略;【组件治理】重构组件本地存储类型的实现,反对应用本地存储组件复用集群的调度策略;【外部组件库】新增利用模型版本治理,反对在发布页展现版本介绍;【组件治理】反对组件设置自定义主机名解析记录;BUG修复【源码构建】修复 .netcore 源码构建工作无奈完结的故障;【控制台】修复网关策略搜寻性能不可用故障;【源码构建】修复Maven 配置删除后源码构建无奈执行的故障;【稳定性】修复谬误的网关策略参数导致网关故障;【组件治理】修复组件实例数不统一的故障;【稳定性】修复rbd-worker零碎组件因为etcd不稳固异样重启的故障;【利用治理】修复对接非HTTPS镜像仓库时利用备份不可用的故障;【集群装置】修复集群镜像仓库证书不统一的故障;社区如果您对Rainbond我的项目感兴趣,如果您有一些疑难,如果您对云原生、Kubernetes等技术感兴趣,欢送退出Rainbond 社区钉钉群。 装置应用请参考文档:疾速装置 从5.3.0降级到5.3.1: 降级参考文档

July 7, 2021 · 1 min · jiezi

关于docker:linux-下安装-docker-环境

装置 dockerGet Docker Server Set up the repository Install Docker Engine 然而,问题来了。咱们依照官网的文档执行 sudo apt-get install docker-ce docker-ce-cli containerd.io 命令时,却提醒报错。来看看 docker -v 命令提醒什么。 依据提醒,咱们须要应用 apt install docker.io 命令来装置docker,预计是文档没更新,不论它。 至此,linux的 docker 环境装置胜利。 技术交换 QQ 群:816425449

July 5, 2021 · 1 min · jiezi

关于docker:Docker再学习笔记

Docker由来Docker是dotCloud公司开源的一款基于Go语言实现的开源容器我的项目。dotCloud公司是2010年新成立的一家公司,次要基于PaaS(Platform as a Service,平台即服务)平台为开发者提供服务。在PaaS平台下,所有的服务环境曾经事后配置好了,开发者只须要抉择服务类型、上传代码就可对外服务,不须要破费大量的工夫搭建服务和配置环境。dotCloud的PaaS平台曾经做得足够好了,它反对简直所有支流的Web编程语言和数据库,能够让开发者得心应手地抉择本人须要的编程语言、数据库和编程框架,而且它的设置非常简单,每次编码后只须要运行一条命令就能把整个网站部署下来;并且利用多层次平台的概念,实践上,它的利用能够运行在各种类型的云服务上。两三年下来,尽管dotCloud也在业界取得不错的口碑,但因为整个PaaS市场还处于培养阶段,dotCloud公司体现得不温不火,没有呈现爆发性的增长。Docker最先次要运行在Ubuntu零碎下,起初反对REHL/Centos,所有的云计算大公司,如Azure、Google和亚马逊等都在反对Docker技术,这实际上也让Docker成为云计算畛域的一大重要组成部分。Docker含糊了IaaS与PaaS之间的界线,为云计算的服务模式带来了有限的可能,Docker带着它的容器理念破而后立,是云计算静止中一项了不起的创举。 https://www.ruanyifeng.com/bl...概念及劣势Docker,目前的定义是一个开源的容器引擎,能够不便地对容器进行治理。其对镜像的打包封装,以及引入的Docker Registry对镜像的对立治理,构建了方便快捷的“Build,Ship and Run”流程,它能够对立整个开发、测试和部署的环境和流程,极大地缩小运维老本Docker容器运行速度很快,能够在秒级实现启动和进行,比传统虚拟机要快很多。Docker解决的外围问题是利用容器来实现相似虚拟机的性能,从而利用更少的硬件资源给用户提供更多的计算资源。Docker容器除了运行其中的利用之外,根本不耗费额定的系统资源,在保障利用性能的同时,减小了零碎开销,这使得一台主机上同时运行数千个Docker容器成为可能。统一的运行环境资源、网络、库等都是隔离的,不会呈现依赖问题提供各种标准化操作,非常适合自动化轻量级,可能疾速启动和迁徙 装置Centos零碎装置docker[root@localhost ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun装置胜利后默认不启动docker服务,手动启动[root@localhost ~]# systemctl start docker将docker服务退出开机启动项[root@localhost ~]# systemctl enable docker查看版本号[root@localhost ~]# docker versionClient: Docker Engine - Community Version: 20.10.7 API version: 1.41 Go version: go1.13.15 Git commit: f0df350 Built: Wed Jun 2 11:58:10 2021 OS/Arch: linux/amd64 Context: default Experimental: trueServer: Docker Engine - Community Engine: Version: 20.10.7 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: b0f5bc3 Built: Wed Jun 2 11:56:35 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.6 GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d runc: Version: 1.0.0-rc95 GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7 docker-init: Version: 0.19.0 GitCommit: de40ad0根本组成Docker客户端:最罕用的Docker客户端是docker命令。通过docker咱们能够不便地在Host上构建和运行容器。Docker服务器:Docker daemon运行在Docker host上,负责创立、运行、监控容器,构建、存储镜像。默认配置下,Docker daemon只能响应来自本地Host的客户端申请。如果要容许近程客户端申请,须要在配置文件中关上TCP监听。 ...

July 5, 2021 · 35 min · jiezi

关于docker:dockercompose-一键部署商城系统

Hello 我是大粽子 我很疼爱为什么呢?因为我开源的我的项目很多敌人拿到手里运行不起来,基本上百分之八九十的都是因为环境因素。要么是mysql或者redis连不上要么就是nginx门路有问题,等等等等吧!后果就是运行不起来,反过来给我留言,有一些敌人是真的留言说问题,有的留言探讨是否能够单干,还有的呢就埋怨什么破我的项目,我clone下来搞了好几天都跑步起来。 说实话看到运行不起来的时候我是心痛的,然而怎么办呢?毛爷爷说过,方法总比问题多,这不上面我就用docker编译了源码,再将配置文件写好,拿到代码间接依据命令装置docker环境,敲下命令,期待即可,运行完后间接看成果。 这里应用了docker-compose 实现的,贴一些次要的配置 来上干货,docker新手能够间接在文末找下载口令此形式仅用于在docker环境疾速预览,正式经营不倡议应用此办法docker compose 脚本运行前提条件此信息为dockerFile中的理解配置,已配置仅供参考 mysql 须要确认端口和 serviceName(java我的项目连贯数据库应用) 默认端口3306 servicename = mysqlserver 账户和明码 root / root redis 默认端口 6379 sericeName = redisserver 明码 123456 nginx sericeName = nginxserver 默认端口列表 8899 WEB PC 治理端 9999 H5 9090 图片服务 已挂在最新全副图片资源 Java sericeName = javaserver 默认端口 8081 执行步骤:如果本人对配置有更改,须要确认配置更改的正确性。如果没有更改间接指定下列命令即可 mac和windows装置docker 后间接就能够应用docker-compose命令 linux 没有docker-compose 可依据上面脚本装置,已有命令跳过 装置docker 已装置跳过curl -sSL https://get.daocloud.io/docker | sh\#### 装置docker-compose 已装置跳过 sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose能够输出 docker-compose -v 验证下 ...

July 3, 2021 · 1 min · jiezi

关于docker:Docker-与-k8s-的恩怨情仇三后浪-Docker-来势汹汹

转载请注明出处:葡萄城官网,葡萄城为开发者提供业余的开发工具、解决方案和服务,赋能开发者。上一节咱们为大家介绍了Cloud Foundry等最后的PaaS平台如何解决容器问题,本文将为大家展现Docker如何解决Cloud Foundry遭逢的一致性和复用性两个问题,并比照剖析Docker和传统虚拟机的差别。 Docker相比于Cloud Foundry的改良利用“Mount Namespace”解决一致性问题在本系列文章的第一节中,咱们提到Docker通过Docker 镜像(Docker Image)性能迅速取代了Cloud Foundry,那这个Docker镜像到底是什么呢,如何通过为不同的容器应用不同的文件系统以解决一致性问题?先卖个关子,咱们先来看看上一节中说过隔离性能和Namespace机制。 Mount Namespace,这个名字中的“Mount”能够让咱们想到这个机制是与文件挂载内容相干的。Mount Namespace是用来隔离过程的挂载目录的,让咱们能够通过一个“简略”的例子来看看它是怎么工作的。 (用C语言开发出未实现文件隔离的容器) 下面是一个简略的的C语言代码,内容只包含两个逻辑:1.在main函数中创立了一个子过程,并且传递了一个参数CLONE_NEWNS,这个参数就是用来实现Mount Namespace的;2.在子过程中调用了/bin/bash命令运行了一个子过程外部的shell。 让咱们编译并且执行一下这个程序: gcc -o ns ns.c./ns 这样咱们就进入了这个子过程的shell中。在这里,咱们能够运行ls /tmp查看该目录的构造,并和宿主机进行一下比照: (容器内外的/tmp目录) 咱们会发现两边展现的数据竟然是齐全一样的。依照上一部分Cpu Namespace的论断,应该别离看到两个不同的文件目录才对。为什么? 容器内外的文件夹内容雷同,是因为咱们批改了Mount Namespace。Mount Namespace批改的是过程对文件系统“挂载点”的认知,意思也就是只有产生了挂载这个操作之后生成的所有目录才会是一个新的零碎,而如果不做挂载操作,那就和宿主机的完全一致。 如何解决这个问题,实现文件隔离呢?咱们只须要在创立过程时,在申明Mount Namespace之外,通知过程须要进行一次挂载操作就能够了。简略批改一下新过程的代码,而后运行查看: (实现文件隔离的代码和执行成果) 此时文件隔离胜利,子过程的/tmp曾经被挂载进了tmpfs(一个内存盘)中了,这就相当于创立了齐全一个新的tmp环境,因而子过程外部新创建的目录宿主机中曾经无奈看到。 下面这点简略的代码就是来自Docker镜像的实现。Docker镜像在文件操作上实质是对rootfs的一次封装,Docker将一个利用所需操作系统的rootfs通过Mount Namespace进行封装,扭转了应用程序和操作系统的依赖关系,即本来应用程序是在操作系统内运行的,而Docker把“操作系统”封装变成了应用程序的依赖库,这样就解决了利用程序运行环境一致性的问题。不管在哪里,利用所运行的零碎曾经成了一个“依赖库”,这样就能够对一致性有所保障。 利用“层”解决复用性问题在实现文件系统隔离,解决一致性问题后,咱们还须要面对复用性的问题。在理论应用过程中,咱们不大可能每做一个镜像就挂载一个新的rootfs,费时费力,不带任何程序的“光盘”也须要占用很大磁盘空间来实现这些内容的挂载。 因而,Docker镜像应用了另一个技术:UnionFS以及一个全新的概念:层(layer),来优化每一个镜像的磁盘空间占用,晋升镜像的复用性。 咱们先简略看一下UnionFS是干什么的。UnionFS是一个联结挂载的性能,它能够将多个门路下的文件联结挂载到同一个目录下。举个“栗子”,当初有一个如下的目录构造: (应用tree命令,查看蕴含A和B两个文件夹) A目录下有a和x两个文件,B目录下有b和x两个文件,通过UnionFS的性能,咱们能够将这两个目录挂载到C目录下,成果如下图所示: mount -t aufs -o dirs=./a:./b none ./C (应用tree命令查看联结挂载的成果) 最终C目录下的x只有一份,并且如果咱们对C目录下的a、b、x批改,之前目录A和B中的文件同样会被批改。而Docker正是用了这个技术,对其镜像内的文件进行了联结挂载,比方能够别离把/sys,/etc,/tmp目录一起挂载到rootfs中造成一个在子过程看起来就是一个残缺的rootfs,但没有占用额定的磁盘空间。 在此基础上,Docker还本人翻新了一个层的概念。首先,它将零碎内核所须要的rootfs内的文件挂载到了一个“只读层”中,将用户的应用程序、零碎的配置文件等之类能够批改的文件挂载到了“可读写层”中。在容器启动时,咱们还能够将初始化参数挂载到了专门的“init层”中。容器启动的最初阶段,这三层再次被联结挂载,最终造成了容器中的rootfs。 (Docker的只读层、可读写层和init层) 从下面的形容中,咱们能够理解到只读层最适宜搁置的是固定版本的文件,代码简直不会扭转,能力实现最大水平的复用。比方活字格私有云是基于.net core开发的,咱们将其用到的根底环境等都会设计在了只读层,每次获取最新镜像时,因为每一份只读层都是齐全一样的,所以齐全不必下载。 Docker的“层”解释了为什么Docker镜像只在第一次下载时那么慢,而之后的镜像都很快,并且明明每份镜像看起来都几百兆,然而最终机器上的硬盘缺没有占用那么多的起因。更小的磁盘空间、更快的加载速度,让Docker的复用性有了十分显著的晋升。 Docker容器创立流程下面介绍的是Docker容器的整个原理。咱们联合上一篇文章,能够总结一下Docker创立容器的过程其实是: 启用Linux Namespace配置;设置指定的Cgroups参数;过程的根目录联结挂载各层文件题外:Docker与传统虚拟机的区别其实Docker还做了很多性能,比方权限配置,DeviceMapper等等,这里说的仅仅是一个遍及性质的概念性解说,底层的各种实现还有很简单的概念。具体而言,容器和传统的虚拟机有啥区别? 其实容器技术和虚拟机是实现虚拟化技术的两种伎俩,只不过虚拟机是通过Hypervisor管制硬件,模拟出一个GuestOS来做虚拟化的,其外部是一个简直实在的虚构操作系统,外部内部是齐全隔离的。而容器技术是通过Linux操作系统的伎俩,通过相似于Docker Engine这样的软件对系统资源进行的一次隔离和调配。它们之间的比照关系大略如下: (Docker vs 虚拟机) 虚拟机是物理隔离,相比于Docker容器来说更加平安,但也会带来一个后果:在没有优化的状况下,一个运行CentOS 的 KVM 虚拟机启动后本身须要占用100~200MB内存。此外,用户利用也运行在虚拟机外面,利用零碎调用宿主机的操作系统不可避免须要通过虚拟化软件的拦挡和解决,自身会带来性能损耗,尤其是对计算资源、网络和磁盘I/O的损耗十分大。 ...

June 30, 2021 · 1 min · jiezi

关于docker:linux-下安装-docker-环境

一分钟理解 DockerDocker 是一个开源的利用容器引擎,基于 Go 语言 并听从Apache2.0协定开源。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 简而言之,容器是一个打包了应用服务的环境,它是一个轻量级的虚拟机,每一个容器由一组特定的利用和必要的依赖库组成。Docker和传统虚拟化之间最大的区别在于:容器是在操作系统层面上实现虚拟化,即间接复用本地主机的操作系统;而传统虚拟化则是在硬件层面实现,如VMware vShpere, Xen及Citrix等。 Docker 应用客户端-服务器 (C/S) 架构模式,应用近程API来治理和创立Docker容器。 Docker 容器通过 Docker 镜像来创立。 容器与镜像的关系相似于面向对象编程中的对象与类。 Docker的架构如下图所示,Client 通过接口与Server过程通信实现容器的构建,运行和公布。Client和Server能够运行在同一台集群,也能够通过跨主机实现近程通信。 具体具体内容,请浏览:《几张图帮你了解Docker基本原理及疾速入门》 装置 dockerGet Docker Server Set up the repository Install Docker Engine然而,问题来了。咱们依照官网的文档执行 sudo apt-get install docker-ce docker-ce-cli containerd.io 命令时,却提醒报错。来看看 docker -v 命令提醒什么。 依据提醒,咱们须要应用 apt install docker.io 命令来装置docker,预计是官网文档没更新吧,不论它。 至此,linux的 docker 环境装置胜利。 技术交换 QQ 群:816425449

June 29, 2021 · 1 min · jiezi

关于docker:如何使用-Distroless-让你的容器更加安全

应用 Distroless 镜像来爱护 Kubernetes 上的容器。 容器扭转了咱们对待技术基础设施的形式。这是咱们运行应用程序形式的一次微小飞跃。容器编排和云服务一起为咱们提供了一种近乎有限规模的无缝扩大能力。 依据定义,容器应该蕴含 应用程序 及其 运行时依赖项。然而,在事实中,它们蕴含的远不止这些。规范容器根底映像蕴含规范 Linux 发行版中能够找到的包管理器、shell 和其余程序。 尽管这些都是构建容器镜像所必须的,但它们不应该成为最终镜像的一部分。例如,一旦你把包装置好了,就不再须要在容器中应用 apt 等包管理工具了。 这不仅使你的容器里充斥了不必要的软件包和程序,而且还为网络罪犯提供了攻打特定程序破绽的机会。 你应该始终理解容器运行时中存在什么,并且应该准确地限度其只蕴含应用程序所需的依赖项。 除了那些必要的,你不应该装置任何货色。一些当先的科技巨头,如谷歌,有多年在生产中运行容器的教训,曾经采纳了这种办法。 谷歌当初通过提供 Distroless 镜像向全世界凋谢这种能力。谷歌构建的这些镜像的指标是只蕴含你的应用程序及其依赖项,同时它们将没有惯例 Linux 发行版的所有个性,包含 shell。 这意味着尽管能够想以前一样运行应用程序的容器,但不能在容器运行的时候进入容器内。这是一个重大的平安改良,因为你当初曾经为黑客通过 shell 进入你的容器关上了大门。 Distroless 根底镜像谷歌为大多数风行的编程语言和平台提供了 Distroless 的根底镜像。 以下根底镜像是正式公布的版本: Bazel 来构建容器映像,然而咱们能够应用 Docker 来做同样的事件。对于应用 Distroless 镜像的一个有争议的问题是:当咱们有一个 Distroless 镜像时,咱们如何应用 Dockerfile 来构建咱们的应用程序呢?通常,Dockerfile 以一个规范的 OS 根底镜像开始,而后是创立适当的运行时构建所需执行的多个步骤。这包含包的装置,为此须要像 apt 或 yum 这样的包管理器。 有两种办法: 先在 Docker 内部构建好你的应用程序,而后应用 Dockerfile 中的 ADD 或 COPY 指令将二进制包复制到容器中。应用多阶段 Docker 构建。这是 Docker 17.05 及当前版本的一个新个性,它容许你将构建分为不同的阶段。第一阶段能够从规范的 OS 根底镜像开始,能够帮忙你构建应用程序;第二阶段能够简略地从第一阶段获取构建的文件并应用 Distroless 作为根底镜像。为了了解它是如何工作的,让咱们应用多阶段构建流程进行一个实际操作练习。 ...

June 29, 2021 · 3 min · jiezi

关于docker:Docker网络模式

(未完待续) 桥接HostContainerNone

June 28, 2021 · 1 min · jiezi

关于docker:Docker整理

Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。本文所有操作都在centos7下面操作 装置与启动# 一、装置Dockercurl -sSL https://get.daocloud.io/docker | sh # 应用国内 daocloud 一键装置命令:docker -v # 查看Docker版本# 二、启动与进行Docker# *systemctl* 命令是零碎服务管理器指令,它是 service 和 chkconfig 两个命令组合。systemctl start docker # 启动dockersystemctl stop docker # 进行dockersystemctl restart docker # 重启dockersystemctl status docker # 查看docker状态systemctl enable docker # 开机启动docker info # 查看docker概要信息docker --help # 查看docker帮忙文档权限问题解决操作镜像时可能会呈现一些权限谬误 # 报错: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/sudo gpasswd -a username docker #将普通用户username退出到docker组newgrp docker #更新docker组# 报错: is not in the sudoers file# su 只是切换了root身份,但Shell环境依然是普通用户的Shell;此时pwd,发现工作目录依然是普通用户的工作目录# su - 连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会呈现PATH环境变量谬误。此时pwd,工作目录变成root的工作目录了。su - # 切换root用户visudo #切记,此处没有vi和sudo之间没有空格。开端退出:your_user_name ALL=(ALL) ALL 。保留,这样就把本人退出了sudo组,能够应用sudo命令了镜像docker images # 列出镜像。这些镜像都是存储在Docker宿主机的/var/lib/docker目录下docker search 镜像名称 # 搜寻镜像,网络中查找须要的镜像docker pull centos:7 # 拉取镜像docker rmi $IMAGE_ID # 删除指定镜像 docker rmi `docker images -q` # 删除所有镜像# 设置Docker镜像减速vi /etc/docker/daemon.json # 如果该文件不存在就手动创立# 增加内容: {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}# {"registry-mirrors":["https://hub.daocloud.io"]}# 之后重新启动服务:systemctl daemon-reloadsystemctl restart docker容器# 一、查看容器docker ps # 查看正在运行容器docker ps –a # 查看所有的容器(启动过的历史容器)docker ps –l # 查看最初一次运行的容器docker ps -f status=exited # 查看进行的容器# 二、创立与启动容器# 创立容器命令:docker run# -i:示意运行容器# -t:示意容器启动后会进入其命令行。退出这两个参数后,容器创立就能登录进去。即调配一个伪终端。# --name :为创立的容器命名。# -v:示意目录映射关系(-v参数 后边为 宿主机目录:容器目录),能够应用多个-v做多个目录或文件映射。留神:最好做目录映射,在宿主机上做批改,而后共享到容器上。# -d:在run前面加上-d参数,则会创立一个守护式容器在后盾运行(这样创立容器后不会主动登录容器,如果只加-i -t两个参数,创立后就会主动进去容器)。# -p:示意端口映射(-p参数 后边为 宿主机端口:容器端口)。能够应用多个-p做多个端口映射docker run -it --name=mycentos centos:7 /bin/bash # 交互式容器docker run -id --name=mycentos1 centos:7 # 守护式容器docker exec -it container_name (或者 container_id) /bin/bash # 登录守护式容器形式# 应用exit命令 退出以后容器# 三、进行与启动容器docker stop $CONTAINER_NAME/ID # 进行正在运行的容器:docker start $CONTAINER_NAME/ID # 启动已运行过的容器:# 四、文件拷贝docker cp 须要拷贝的文件或目录 容器名称:容器目录docker cp 容器名称:容器目录 须要拷贝的文件或目录# 五、目录挂载# 咱们能够在创立容器的时候,将宿主机的目录与容器内的目录进行映射,这样咱们就能够通过批改宿主机某个目录的文件从而去影响容器。# 创立容器 增加-v参数 后边为 宿主机目录:容器目录# 如果你共享的是多级的目录,可能会呈现权限有余的提醒。这是因为CentOS7中的平安模块selinux把权限禁掉了,咱们须要增加参数 --privileged=true 来解决挂载的目录没有权限的问题docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7# 六、查看容器IP地址docker inspect mycentos2 # 查看容器运行的各种数据docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2 # 查看容器IP地址# 七、删除容器docker rm $CONTAINER_ID/NAME # 删除指定的容器。留神,只能删除进行的容器docker rm `docker ps -a -q` # 删除所有容器:部署利用1 MySQL部署docker pull mysql # 拉取mysql镜像docker images # 查看镜像# 创立MySQL容器docker run -di --name pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql # -p 代表端口映射,格局为 宿主机映射端口:容器运行端口# -e 代表增加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码# 进入mysql容器docker exec -it pinyougou_mysql /bin/bash mysql -u root -p # 登陆mysql2 tomcat部署docker pull tomcat:7-jre7 # 拉取tomcat镜像# 创立tomcat容器docker run -di --name=pinyougou_tomcat -p 9000:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7# -v示意地址映射部署web利用。批改cas零碎的配置文件,批改数据库连贯的url ...

June 25, 2021 · 2 min · jiezi

关于docker:Docker入门镜像管理

docker 连贯本地仓库 批改daemon.json,退出本地repo域名 { "insecure-registries": [ "registry.bingosoft.net" ]}docker 构建镜像 本地装置好docker当前,创立一个目录demo, 编写Dockerfile文件 ~ mkdir demo~ cd demo~ echo 'hello docker' > 1.txtvi Dockerfile#FROM alpineCOPY ./1.txt /install/# 构建镜像docker build -t demo:1.0 ./以上就会在本地构建一个demo镜像,通过docker images 查看本地镜像。 留神docker build命令须要在Dockerfile同级目录中执行,不要漏掉最初的./ 推送镜像到本地仓库 登录镜像仓库 ~ docker login registry.bingosoft.net -u admin -p 123456 给镜像打标签 ~ docker tag demo:1.0 registry.bingosoft.net/cmp/demo:1.0推送镜像 ~ docker push registry.bingosoft.net/cmp/demo:1.0

June 23, 2021 · 1 min · jiezi

关于docker:前端小白工作记录之提供-docker-image

Why need docker image?这两天工作遇到一个新的问题,向开源我的项目提PR之后,issue 的提出者对我说作为一个对后端一窍不必的前端小白,看到这个问题,我不禁纳闷了,嗯???我不是在PR外面提供了视频吗?而后我很愚昧的从新贴上了界面演示的image 之后我收到了一条新的回复,他说 好的,当初终于引入正题了—— What is docker image?首先我只晓得docker 是后端常识,这个时候就应该连忙问懂的人了~ 询问了mentor,他给我的解释是: 前端我的项目打包之后的代码部署成一个docker 镜像为了以防显得本人什么都不晓得,并且还没有点学习能力,我开始了面向百度编程,上面就说说,作为前端须要晓得的docker 的局部内容,如果你也和我一样的状况,那么请观看上面的内容,但如果你须要更多的,请搜寻更业余的人士的文章~ How to get docker image?第一步:装置dockerdocker装置十分小白,下一步即可,这里我就只附上官网连贯,记得注册一个账号并登录 第二步:打包我的项目每个我的项目打包我的项目的命令大同小异,最简略直白的做法是,查看package.json文件中script显示的命令,个别是 npm build / yarn build第三步:创立镜像文件在根目录创立Dockerfile文件,至于文件里的内容,自己技术过于肤浅不敢妄言(ps:其实是因为公司的我的项目自身Dockerfile就曾经配置好了,不须要我进行批改,等我学术更精的时候我会好好学一学) 第四步:构建镜像docker build -t 镜像名称 . // 记住这个 . 不能脱漏第五步:推送镜像到Docker Hubdocker push 镜像名称这里很多人会发现自己遇到了一个新问题 终端中报错 denied: requested access to the resource is denied 这个问题其实百度一下就很好解决了,镜像名称应该是由你的docker用户名/镜像名称组成, 那么应该如何批改镜像名称呢? 首先应该查看方才的镜像名称![file](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e646a56f8dac489a978fee5eb993ea6b~tplv-k3u1fbpfcp-zoom-1.image)- > 这里我还引发了新的问题,我想要的镜像名称为`ks-console/alerting`,而后我依据搜到说法,把名称改为了`我的docker用户名/console/alerting`,于是我发现,仍然报错`denied: requested access to the resource is denied` > > <span style="color:red">留神:</span>不能有两个 '/' 符号 这里是`docker hub`仓库的[地址](https://hub.docker.com/repositories),登录下来可能看到刚刚本人推送的镜像,### 最初一步当初咱们只须要把<u>残缺的镜像名称</u><span style="color:rgb(193, 44, 65);background: rgb(249, 242, 244)">(你的docker用户名/镜像名称)</span>发给找你要`docker image` 的人就能够啦

June 22, 2021 · 1 min · jiezi

关于docker:女朋友问我怎么在Docker上部署前后端分离项目附源码

嗨~大家好我是阿壮,一个程序员 UP,之前分享过一期前后端拆散我的项目,观看的人比拟多。回顾: 实战:权限零碎是如何设计的(附源码) 后盾有不少小伙伴给我留言说想学习视频中是如何在 Docker 中部署前后端拆散的我的项目,我抽空录制了这一期视频。视频内容次要是一步一步具体的教学从 0 到 1 的过程。 Docker上部署前后端拆散我的项目视频地址: https://www.bilibili.com/vide...以下是部署中应用到的笔记。最初做视频不易,心愿点赞转发反对,你的点赞对我很重要。我是阿壮,一个喜爱通过视频模式分享常识的程序员,微信搜一搜: 科技猫,获取第一工夫更新,咱们下期间 部署笔记拉取我的项目权限零碎前端我的项目地址:https://github.com/jonssonyan... 权限零碎后端我的项目地址: https://github.com/jonssonyan... 通过 git 把前后端源码拉去到本地 打包我的项目前端应用npm run build打包,最终打包好的文件夹在 dist 文件夹下,后端能够通过 Maven 打包。 上传至服务器在根目录新建 myDate 文件夹,外面寄存上传的文件。 如图,authority.jar 是后端 jar 包,dist 是前端文件 装置 Docker装置 yum-utils 软件包(提供 yum-config-manager 实用程序)yum install -y yum-utils设置稳固的存储库(应用阿里云镜像)yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新缓存yum makecache fast装置最新版本的 Docker Engine 和容器,或转到下一步以装置特定版本yum install docker-ce docker-ce-cli containerd.io启动 Dockersystemctl start docker配置 DockerDocker 默认的镜像源于国内而言是有些慢,所以能够配置一下国内的镜像源,进步一下 pull 速度 阿里云镜像服务参考:https://cr.console.aliyun.com...创立目录mkdir -p /etc/docker创立一个镜像配置文件vi /etc/docker/daemon.json配置文件中增加镜像{ "registry-mirrors":["http://hub-mirror.c.163.com"]}从新加载文件并重启 dockersystemctl daemon-reload // 从新加载文件systemctl restart docker // 重启dockersystemctl enable docker // 开机自启装置 MySQL零碎应用的是 MySQL 数据库,所以要在 Docker 中装置 MySQL ...

June 17, 2021 · 1 min · jiezi

关于docker:把运行在-Docker-容器内的-Microsoft-SQL-服务器部署到-SAP-Kyma-中

在浏览这篇文章之前,Jerry 假如您曾经读过了这篇在 Docker 里运行 Microsoft SQL 服务器。 本地我的项目地址:C:\Code\referenceCode\SAP Kyma教程例子 参考链接:https://developers.sap.com/tu... secret.yaml 定义了数据库的用户名和明码。 pvc.yaml定义了一个 PersistentVolume,用于存储数据库的数据。 deployment.yamldefines the Deployment definition for the MSSQL database as well as a Service used for communication. This definition references both the secret.yaml and pvc.yaml by name. 应用这篇文章如何应用 kubectl 通过命令行的形式操作 SAP Kyma提到的办法,配置好 kubectl 和 SAP Kyma 的连贯。 应用命令行创立名为 dev 的 namespace: kubectl create namespace dev 部署 secret.yaml 和 pvc.yaml: kubectl -n dev apply -f ./k8s/pvc.yaml ...

June 16, 2021 · 2 min · jiezi

关于docker:在-Docker-里运行-Microsoft-SQL-服务器

链接:https://developers.sap.com/tu... 参考代码:https://github.com/SAP-sample... 本地门路:C:\Code\referenceCode\SAP Kyma教程例子 This sample provides the MS SQL database configured with a sample DemoDB database which contains one Orders table populated with two rows of sample data.这个例子展现了如何创立名为 DemoDB 的MSSQL 数据库,以及名为 Orders 的数据库表,以及两行测试数据。 The app/setup.sql file handles the generation of the database, table, and data. app 文件夹下的 setup.sql 负责创立数据库,数据库表和测试数据。 Within the app/init-db.sh file, you can also configure the database user and password.init-db.sh 文件用于配置数据库用户名和明码。 docker 文件夹 FROM:The FROM instruction initializes a new build stage and sets the Base Image for subsequent instructions. As such, a valid Dockerfile must start with a FROM instruction. The image can be any valid image – it is especially easy to start by pulling an image from the Public Repositories.Dockerfile 用于创立 docker 镜像。最初一行命令,执行 app 文件夹上面的 entrypoint.sh 文件。 ...

June 16, 2021 · 2 min · jiezi

关于docker:K8S-生态周报-Docker-v20107-发布修复了死锁和容器启动失败的问题

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Docker v20.10.7 正式公布Docker 在近期也公布了 v20.10.7 版本,这个版本中次要都是偏重在稳定性和安全性上,咱们一起来看看具体有哪些值得关注的内容吧! CLICLI 方面次要是移除掉了始终以来存在的 WARNING: No kernel memory limit support 这个 Warning 信息,同时在 cgroup v2 下也不会再显示 WARNING: No oom kill disable support 的 Warning 信息了。 为什么呢?因为 oom kill disable 在 cgroup v2 下不可用。 如果你在 cgroup v2 下应用了 --oom-kill-disable 选项就会看到如下提醒: ➜ ~ docker info |grep Cgroup Cgroup Driver: systemd Cgroup Version: 2➜ ~ docker run --rm -it --oom-kill-disable -m 6m alpine shWARNING: Your kernel does not support OomKillDisable. OomKillDisable discarded.这里如果要介绍 cgroup v2 那内容就太多了,我在 2019 年承受访谈聊容器技术趋势的时候就做了如下预测: ...

June 15, 2021 · 3 min · jiezi

关于docker:集群镜像实现高效的分布式应用交付

简介:Docker 解决了单个容器的镜像化问题,而 sealer 通过把整个集群打包,实现了分布式软件的 Build Share Run。 作者 | fanux.中弈 什么是集群镜像顾名思义,和操作系统 .iso 镜像或 Docker 镜像相似,集群镜像是用肯定的技术手段把整个集群的所有文件以肯定格局打成的一个资源包。比照单机和集群会发现一些的乏味景象: • 单机有计算、存储、网络等驱动;集群有 CNI/CSI/CRI 实现像是集群的驱动。• 单机有 ubuntu centos 操作系统;集群中能够把 Kubernetes 看成云操作系统。• 单机上能够运行 docker 容器或虚拟机;相当于一个运行的实例,集群上也有运行着 K8s 的实例。• 单机上有虚拟机镜像,docker 镜像;随着云计算技术的倒退,集群上也会形象出相似的镜像技术。以基于 Kubernetes 的集群镜像为例,外面蕴含了除操作系统以外的所有文件:• docker 依赖的二进制与 systemd 配置、dockerd 配置,以及一个公有的容器镜像仓库。• Kubernetes 外围组件二进制、容器镜像、kubelet system 配置等。• 利用须要用到的 yaml 配置或 helm chart,以及利用的容器镜像。• 其它脚本、配置与二进制工具等利用运行须要的所有依赖。 同样,集群镜像运行时必定不是起一个容器或者装在一台机器上,而是这个镜像能够间接装置到多台服务器上或者间接对接到私有云的基础设施上。 sealer 介绍sealer是阿里巴巴开源的集群镜像的一个实现形式,我的项目地址:https://github.com/alibaba/se... Docker 解决了单个容器的镜像化问题,而 sealer 通过把整个集群打包,实现了分布式软件的 Build Share Run!!! 试想咱们要去交付一个 SaaS 利用,它依赖了 MySQL/ES/Redis 这些数据库和中间件,所有货色都在 Kubernetes 上进行编排,如果没有集群镜像时,要做如下操作: 找个工具去装置 K8s 集群helm install mysql es redis... 如果是离线环境可能还须要导入容器镜像kubectl apply yoursaas看似如同也没那么简单,但其实从整个我的项目交付的角度来说,以上操作是面向过程极易出错的。 ...

June 15, 2021 · 3 min · jiezi

关于docker:看完此文妈妈还会担心你Docker入不了门

大家好,我是阿壮,一个有代码洁癖的程序员,集体网站:jonssonyan.com 当初很多企业都在上云,Docker 无疑是云时代的宠儿,像 MySQL,Redis 都能够部署在 Docker 中,从而不便咱们去治理,而且移植性强,打包成镜像,在任何一个装置了 Docker 的服务器上都能够运行。上面介绍 Docker 的装置,根底概念,常用命令,在 Docker 上部署 MySQL Redis,以及打包 jar 包并运行。 什么是 Docker?Docker 翻译过去就是码头工人,是一个开源的利用容器引擎,基于 Go 语言。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 Linux 下装置 Docker卸载旧版本yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine装置 yum-utils 软件包(提供 yum-config-manager 实用程序)yum install -y yum-utils设置稳固的存储库(应用阿里云镜像)yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新缓存yum makecache fast装置最新版本的 Docker Engine 和容器,或转到下一步以装置特定版本yum install docker-ce docker-ce-cli containerd.io启动 Dockersystemctl start docker配置 DockerDocker 默认的镜像源于国内而言是有些慢,所以能够配置一下国内的镜像源,进步一下 pull 速度 ...

June 10, 2021 · 3 min · jiezi

关于docker:Docker-学习

先记录再整顿命令:inspect: 查看容器配置信息等 # 上面命令会输入一个 pretty json 外面都是 container 的信息$ docker inspect <container name/container id> 查看具体某一个配置 # key1 belong to value0 of key0 and key2 belong to value1 of key1 and so on$ docker inspect -f='{{.<key0>[.<key1>][.key2][...]}}' <container name/container id># or $ docker inspect --format='{{.<key0>[.<key1>][.key2][...]}}' <container name/container id># example: # docker inspect -f='{{.NetworkSettings}}' nginx # output: # {{ 0f3f569dce91a16751c170f91ef9c8c128c757f86dff4e39f8ab58ae686f4edb false 0 map[80/tcp:[{0.0.0.0 9002} {:: 9002}]] /var/run/docker/netns/0f3f569dce91 [] []} {553e63fa029a7dc7e123c74b330830033fdcc2a409baae5745e3875d17d6d580 172.17.0.1 0 172.17.0.3 16 02:42:ac:11:00:03} map[bridge:0xc0003f0000]} 格式化输入,上门的 -f 参数输入的数据格式,都是 value, 尽管排序是按程序的,然而咱们不晓得 value 具体对应那个 key. ...

June 8, 2021 · 4 min · jiezi

关于docker:Docker中的RedisRabbitMQ及Nacos的密码修改

Redis的明码批改1、进入 Docker 容器首先,在 Docker 容器中 进入 Redis 客户端,代码如下: [root@localhost ~]# docker exec -it b9e507a86439 redis-cli其中 b9e507a86439 是我 Docker 中的 Redis 容器 ID,应用 docker ps 即可查看本人容器中的 Redis ID而后,呈现认证问题,应该是 Redis 设置了认证明码,输出明码既能够啦(留神明码是字符串模式!) 127.0.0.1:6379> auth "本人设置的明码"看到OK两个字代表曾经胜利进入 Redis 客户端通过设置 Redis 中的配置文件的参数,进而须要用到 auth 明码验证连贯,进步了 Redis 的安全性(特地是本人的云服务器6379端口裸露时) 2、批改明码咱们能够通过以下命令查看是否设置了明码验证: 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "" requirepass这个就是配置 Redis 拜访明码的参数,在默认状况下 requirepass 参数是空的,这就意味着你无需通过明码验证就能够连贯到 Redis 服务。当然,你能够通过以下命令来批改该参数: 127.0.0.1:6379> CONFIG set requirepass "新验证码" OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "新验证码"设置明码后,应用重启命令docker restart redis 则下次当客户端连贯 Redis 服务时就须要明码验证,否则无奈执行命令。 ...

June 7, 2021 · 1 min · jiezi

关于docker:docker在生产环境上的排坑记录更新中

生产环境逐渐容器化的过程中遇到了一些坑,特此记录一下: Docker默认网络模式带来的ip问题这是初步应用docker时遇见最多的问题,在多个组件或中间件上体现,然而实质问题还是因为docker默认的网络模式是bridge,会为以后容器调配格局为172.17.0.X的IP地址。这个IP的特点是在一台宿主机上递增,然而如果同一个服务在多个宿主机上都应用容器部署,很可能会呈现IP地址雷同的状况,对于以IP来辨认终端的一些组件和中间件来说,会呈现问题。 针对此问题,大部分状况下能够设置网络模式为host来解决: --net=host然而如此一来,同一宿主机上就不能搁置多个同服务的容器,因为端口雷同(host模式下不能应用 -p 设置端口),除非批改源码扭转端口,然而这样代价太大。另外对于个别问题还是解决不了。另外也是在初步波及docker,应用默认模式更保险一些。 RocketMQ消费者客户端因为IP雷同导致反复生产问题问题表象 A,B两台宿主机都有一个基于docker的生产客户端,IP地址都为172.17.0.1,在理论生产中呈现了反复生产问题。如下: 当然,在网上搜寻时也发现有的敌人遇到的是不生产的状态,具体为何没有深究。 问题剖析 RocketMQ用一个叫ClientID的概念,来惟一标记一个客户端实例,一个客户端实例对于Broker而言会开拓一个Netty的客户端实例。 而ClientID是由ClientIP+InstanceName形成,如下源码: public String buildMQClientId() { StringBuilder sb = new StringBuilder(); sb.append(this.getClientIP()); sb.append("@"); sb.append(this.getInstanceName()); if (!UtilAll.isBlank(this.unitName)) { sb.append("@"); sb.append(this.unitName); } return sb.toString();} 而instanceName个别咱们时不会设置的,默认的话会取过程号 public void changeInstanceNameToPID() { if (this.instanceName.equals("DEFAULT")) { this.instanceName = String.valueOf(UtilAll.getPid()); }} 故如果一个过程中多个实例(无论Producer还是Consumer)ClientIP和InstanceName都一样,他们将专用一个外部实例(同一套网络连接,线程资源等) 此外,此ClientID在对于Consumer负载平衡的时候起到惟一标识的作用,一旦多个实例(无论不同过程、不通机器、还是同一过程)的多个Consumer实例有一样的ClientID,负载平衡的时候必然RocketMQ任然会把两个实例当作一个client(因为同样一个clientID)。 故为了防止不必要的问题,ClientIP + instance Name的组合倡议惟一,这里我采纳自定义instanceName的形式,在springboot下如下: @Configuration@AutoConfigureBefore(RocketMQAutoConfiguration.class)public class RocketMQCustomFrontConfig { static { System.setProperty("rocketmq.client.name", String.valueOf(System.currentTimeMillis())); }}到此问题解决。 应用nacos作为服务发现导致服务间调用不通问题 同样的起因,导致nacos服务节点ip截然不同,然而因为是虚构ip,所以会影响服务间的调用,解决办法也很简略,我是在docker启动脚本中增加如下配置: --spring.cloud.nacos.discovery.ip=$nacos_discovery_id 当然在springboot环境下配置文件中也能够设置,不过不同环境下就须要批改源码配置文件,所以不做思考。若应用的是其余服务发现组件,都有各自配置反对。 阿里Sentinel下节点状态不对且链路不通问题 Sentinel下的问题要从2个方面思考:ip和端口。基于docker环境,默认状况下: ...

June 7, 2021 · 1 min · jiezi

关于docker:docker磁盘占用过大问题

问题呈现 最近生产环境应用docker容器的机器显著硬盘增长过快,监控飘红。起初并不在意,因为这几台机器是老机器,初始磁盘空间自身不大,失常状况下也是须要隔段时间清理。 然而起初不厌其烦了,基本上每周都要清理一次,毕竟也不是业余运维,所以还是找了工夫认真看了下。 解决过程 失常应用命令查看磁盘占用状况 du -h --max-depth=1 / 筛选过后发现目录 /var/lib/docker/containers 和 /var/lib/docker/overlay2下占用了大量空间,网络上也搜寻了,大部分是让执行docker清理命令,基本不论用。 /var/lib/docker/containers 挑比拟大的目录持续 ls -lht 发现占用空间的其实就是一个log文件,搜寻了一下解决方案: cat /dev/null > *-json.log有条件重启下,不重启也OK。 /var/lib/docker/overlay2 同样进入占用空间较大的目录,最终发现该目录下占用空间较大的都为rocketmq客户端的日志 du -h --max-depth=1 /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f1.1G /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/diff0 /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/work1.7G /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/merged2.8G /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f 并且在diff和merged目录下都存在一份。持续摸索: overlay2目录是docker的分层存储目录,保留理论分层内容。创立容器实现之后,在镜像存储目录/var/lib/Docker/overlay2/会生成容器的初始层和读写层,两者应用雷同标识,初始层前面多了-init。初始层中次要保留初始化容器环境时,与容器相干的环境信息,如容器主机名,主机host信息以及域名服务文件等;读写层用于容器的读写,Docker容器内的过程只对读写层领有写权限,而对其余层文件内容只领有读权限。 应用rocketmq后,默认会在{user.home}\logs\rocketmqlogs 目录下生成大量的mq跟踪日志 随即我抉择一个rocketmq的客户端利用进入容器: docker exec -it xx bash我找了根目录下log目录没有,搜寻下 find -name rocketmq_client.log./root/logs/rocketmqlogs/rocketmq_client.log最终在root上面logs目录找到了。。。才反馈过去用户是root。。 docker启动时我只对/logs做了卷映射,疏忽了其余的日志,所以造成了这个问题。 记录一下,也给有类似问题的同学一些启发。

June 7, 2021 · 1 min · jiezi

关于docker:Docker-Swarm的集群实践

创立集群 在任意节点下通过 docker swarm init 命令创立一个新的 Swarm 集群并退出,且该节点会默认成为 Manager 节点。 docker swarm init --advertise-addr xx.xx.xx.xx 通常,第一个退出集群的治理节点将成为 Leader,起初退出的治理节点都是 Reachable。以后的 Leader 如果挂掉,所有的 Reachable 将从新选举一个新的 Leader。 退出集群 Docker 中内置的集群模式自带了公钥基础设施(PKI)零碎,使得平安部署容器变得简略。集群中的节点应用传输层平安协定(TLS)对集群中其余节点的通信进行身份验证、受权和加密。 默认状况下,通过 docker swarm init 命令创立一个新的 Swarm 集群时,Manager 节点会生成新的根证书颁发机构(CA)和密钥对,用于爱护与退出群集的其余节点之间的通信安全。 Manager 节点会生成两个令牌,供其余节点退出集群时应用:一个 Worker 令牌,一个 Manager 令牌。每个令牌都包含根 CA 证书的摘要和随机生成的密钥。当节点退出群集时,退出的节点应用摘要来验证来自远程管理节点的根 CA 证书。远程管理节点应用密钥来确保退出的节点是批准的节点。 Manager 若要向该集群增加 Manager 节点,治理节点先运行 docker swarm join-token manager 命令查看治理节点的令牌信息。 docker swarm join-token manager 而后在其余Docker节点上运行上述命令退出 Swarm 集群,该节点角色为 Manager。 Worker 通过创立集群时返回的后果能够得悉,要向这个集群增加一个 Worker 节点,运行下图中的命令即可。或者治理节点先运行 docker swarm join-token worker 命令查看工作节点的令牌信息。 ...

June 7, 2021 · 2 min · jiezi

关于docker:CentOS7中Docker-UI可视化工具配置

介绍Portainer 是一个轻量级Web端的Docker治理UI,Portainer够轻松地治理不同的Docker环境(Docker主机或集群)。Portainer的部署和应用非常简略。Portainer能够部署为Linux容器或Windows本机容器,也反对其余平台。Portainer容许您治理所有Docker资源(容器、映像、卷、网络等)!它与独立的Docker引擎和Docker集群模式兼容。 指标 Docker UI治理配置环境 UI可视化配置 1.搜寻镜像docker search portainer 2.拉取镜像docker pull portainer/portainer #拉取镜像docker images #查看镜像 3.创立容器 #应用net默认网络模式docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer#指定net为host网络模式docker run -di --net="host" --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer4.测试拜访 拜访地址:http://192.168.157.110:9000/抉择本机模式染指界面点击进入local查看镜像列表查看容器列表

June 7, 2021 · 1 min · jiezi

关于docker:CentOS7中Docker应用部署MySQLTomcatNginxRedis

指标 Docker利用部署环境CentOS7 #宿主机Docke #开源利用容器引擎 利用部署1. Redis部署1.1 拉取镜像 # 拉取redis镜像docker pull redis1.2 创立容器 # 创立redis容器# 默认net网络模式 docker run -di --name=myredis -p 6379:6379 redis# 指定net网络模式docker run -di --net="host" --name=myredis -p 6379:6379 redis 1.3 操作redis容器 # 进入redis容器docker exec -it myredis /bin/bash# 进入redis装置目录cd /usr/local/bin# 连贯redis./redis-cli1.4 测试后果 1.5 测试后果 2. MySQL部署2.1 拉取镜像 # 拉取MySQL 5.7镜像docker pull centos/mysql-57-centos72.2 创立容器 # 创立mysql5.7容器# 默认net网络模式 docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7# 指定net网络模式docker run -di --net="host" --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7 ...

June 7, 2021 · 1 min · jiezi

关于docker:CentOS7中配置Docker

介绍 Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 指标 在CentOS7中配置docker;相熟docker的应用;装置依赖包; yum install -y yum-utilsyum makecache fast #更新yum软件包索引删除旧版 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine装置Docker1. 设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2. 装置Docker yum install docker-ce docker-ce-cli containerd.io3. 启动命令操作 systemctl status docker (查看服务以后状态)systemctl start docker (启动docker服务)systemctl stop docker (定制docker服务)systemctl restart docker(重启docker服务)4. 查看启动状态systemctl status docker 5. 查看版本信息docker version ...

June 5, 2021 · 1 min · jiezi

关于docker:docker容器数据卷

背景将利用和运行环境打包成一个镜像 为了数据安全,数据不能放在容器中 数据须要长久化存储 卷技术说白了,将容器内目录挂载到Linux中的目录,文件同步的机制 卷的目标:为了做长久化和同步,容器间也能够实现数据共享 应用数据卷 形式一docker run -it -v 宿主机目录:容器内目录 centos /bin/bash 启动之后能够应用 docker inspect 容器id 查看Mounts 请手敲代码!code#执行挂载命令-v➜ ~ docker run -it -d --name centos01 -v /Users/dada/Downloads/docker-centos/etc:/etc centos6080c9748915bd8c64d2cc218ff3f3431a155fd360be60620184eb80ba6a6add#查看运行中的容器列表➜ ~ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6080c9748915 centos "/bin/bash" 3 seconds ago Up 2 seconds centos01#进入容器➜ ~ docker exec -it 6080c9748915 /bin/bash#进入etc 创立文件并写入数据bash-4.4# cd /etc/bash-4.4# touch index.html & echo 'hi! smallForest'>index.html# ls一下bash-4.4# lshostname hosts index.html resolv.conf# 退出容器bash-4.4# exit# 查看容器信息 inspect➜ ~ docker inspect 6080c9748915返回后果巨长,只写Mounts局部"Mounts": [ { "Type": "bind", "Source": "/Users/dada/Downloads/docker-centos/etc", "Destination": "/etc", "Mode": "", "RW": true, "Propagation": "rprivate" } ],# 回到宿主机目录/Users/dada/Downloads/docker-centos/etc。校验index.html是否存在,内容是否是'hi! smallForest'容器进行宿主机批改文件重启后会同步吗?请手敲命令code ...

June 5, 2021 · 5 min · jiezi

关于docker:docker起步

docker长处更疾速交付部署更便捷的降级和扩容缩容更简略的零碎运维更高效的计算资源利用 docker组成client客户端镜像生成容器 镜像好比一个模板容器container docker利用容器技术,独立运行一组利用,通过镜像创立仓库repository 仓库是寄存镜像的,分共有仓库和公有仓库linux dockeruname -r 零碎内核信息docker version 查看docker版本信息docker info 查看docker零碎信息docker 命令 --hele 帮忙信息。 eg:docker run --helpdocker images 查看本机所有镜像列表-a 列出所以-f 格式化-q 只显示镜像iddocker search 搜寻镜像--filter 过滤条件,应用形式看上面codecode ➜ ~ docker search mysql --filter=STARS=5000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10917 [OK] docker pull 下载镜像。eg: docker pulll mysql[:TAG] TAG示意版本号,可选默认latest# 因为本地曾经装置,返回如下信息➜ ~ docker pull mysql:5.75.7: Pulling from library/mysqlDigest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21faStatus: Image is up to date for mysql:5.7docker.io/library/mysql:5.7docker rmi 删除镜像。eg docker rmi 镜像ID或者名称-f 强制删除# 一般删除,有运行中的MySQL5.7容器会报错不让删除➜ ~ docker rmi mysql:5.7# 强制删除<少用>➜ ~ docker rmi -f mysql:5.7#删除所有镜像<少用>➜ ~ docker rmi -f $(docker images -qa)docker run 应用镜像生成容器--name 指定容器名字-d 后盾运行-it 应用交互方式运行-p 执行端口-P 随机指定端口docker run -p 特地阐明-p 容器端口(不对外拜访)-p 宿主机端口:容器端口(罕用,对外拜访)-p ip:宿主机端口:容器端口code 请手敲实例# 启动并进入容器➜ ~ docker run -it centos /bin/bash# 退出容器[root@c540d3ba3402 /]# exitexit# 此时无运行中的容器,起因在于没加-d➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES➜ ~ docker run 过程 ...

June 4, 2021 · 4 min · jiezi

关于docker:必收藏干货Kubernetes集群搭建超详细总结CentOS版

学习Kubernetes的要害一步就是要学会搭建一套k8s集群。在明天的文章中作者将最近新总结的搭建技巧,无偿分享给大家!废话不多说,间接上干货! 01、零碎环境筹备要装置部署Kubernetes集群,首先须要筹备机器,最间接的方法能够到私有云(如阿里云等)申请几台虚拟机。而如果条件容许,拿几台本地物理服务器来组建集群天然是最好不过了。然而这些机器须要满足以下几个条件: 要求64位Linux操作系统,且内核版本要求3.10及以上,能满足装置Docker我的项目所需的要求;机器之间要放弃网络互通,这是将来容器之间网络互通的前提条件;要有外网拜访权限,因为部署的过程中须要拉取相应的镜像,要求可能拜访到gcr.io、quay.io这两个docker registry,因为有小局部镜像须要从这里拉取;单机可用资源倡议2核CPU、8G内存或以上,如果小一点也能够然而能调度的Pod数量就比拟无限了;磁盘空间要求在30GB以上,次要用于存储Docker镜像及相干日志文件;在本次试验中咱们筹备了两台虚拟机,其具体配置如下: 2核CPU、2GB内存,30GB的磁盘空间;Unbantu 20.04 LTS的Sever版本,其Linux内核为5.4.0;内网互通,外网拜访权限不受管制;02、Kubernetes集群部署工具Kubeadm介绍作为典型的分布式系统,Kubernetes的部署始终是困扰初学者进入Kubernetes世界的一大阻碍。在公布晚期Kubernetes的部署次要依赖于社区保护的各种脚本,但这其中会波及二进制编译、配置文件以及kube-apiserver受权配置文件等诸多运维工作。目前各大云服务厂商罕用的Kubernetes部署形式是应用SaltStack、Ansible等运维工具自动化地执行这些繁琐的步骤,但即便这样,这个部署的过程对于初学者来说仍然是十分繁琐的。 正是基于这样的痛点,在志愿者的推动下Kubernetes社区终于发动了kubeadm这一独立的一键部署工具,应用kubeadm咱们能够通过几条简略的指令来疾速地部署一个kubernetes集群。在接下来的内容中,就将具体演示如何应用kubeadm来部署一个简略构造的Kubernetes集群。 03、装置kubeadm及Docker环境正是基于这样的痛点,在志愿者的推动下Kubernetes社区终于发动了kubeadm这一独立的一键部署工具,应用kubeadm咱们能够通过几条简略的指令来疾速地部署一个kubernetes集群。在接下来的内容中,就将具体演示如何应用kubeadm来部署一个简略构造的Kubernetes集群。 后面简略介绍了Kubernetes官网公布一键部署工具kubeadm,只须要增加kubeadm的源,而后间接用yum装置即可,具体操作如下: 1)、编辑操作系统装置源配置文件,增加kubernetes镜像源,命令如下: #增加Docker阿里镜像源[root@centos-linux ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo#装置Docker[root@centos-linux ~]# yum -y install docker-ce-18.09.9-3.el7#启动Docker并设置开机启动[root@centos-linux ~]# systemctl enable docker增加Kubernetes yum镜像源,因为网络起因,也能够换成国内Ubantu镜像源,如阿里云镜像源地址:增加阿里云Kubernetes yum镜像源# cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF  2)、实现上述步骤后就能够通过yum命令装置kubeadm了,如下: [root@centos-linux ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0以后版本是最新版本1.21,这里装置1.20。#查看装置的kubelet版本信息[root@centos-linux ~]# kubectl versionClient Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}The connection to the server localhost:8080 was refused - did you specify the right host or port?在上述装置kubeadm的过程中,kubeadm和kubelet、kubectl、kubernetes-cni这几个kubernetes外围组件的二进制文件也都会被主动装置好。3)、Docker服务启动及限度批改 ...

June 2, 2021 · 5 min · jiezi

关于docker:Docker安装Jenkins实现自动化部署Maven项目

Jenkins version 2.277.4Docker version 20.10.5Jenkins中武官网->https://www.jenkins.io/zh/ 装置Jenkinsdocker 装置一切都是那么简略,留神查看8080是否曾经占用! docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean如果没改端口号的话装置实现后拜访地址-> http://{部署jenkins所在服务IP}:8080 初始化Jenkins详情见官网教程->https://www.jenkins.io/zh/doc... 第一个简略的工作小试牛刀,先创立简略的工作,工作内容:执行服务器的shell脚本。因为jenkins 部署在docker容器内,没方法间接执行宿主机上的shell脚本,须要ssh登录到宿主机上执行。这就须要Publish Over SSH插件。(如果Jenkins不是用docker部署的就不会有这个懊恼)同样的情理,如果jenkins和我的项目不在一台服务器也能够应用这个插件,近程拷贝打包的文件或者执行脚本等。 装置插件首页->系统管理->插件治理->搜寻Publish Over SSH并装置. 配置 Publish Over SSH首页->系统管理->系统配置-> 创立工作首页->新建工作->填写工作名称->抉择:构建一个自在格调的软件我的项目间接在切到【构建】选项卡,点击【增加构建步骤】抉择Send files or execute commands over SSH在SSH service上面抉择刚刚在【系统配置】配置的服务器。Exec command一栏间接输出命令即可,无妨能够试试echo $(pwd)命令。 保留,第一个工作建胜利了,回到工作详情页,点击立刻构建,找到【控制台输入】能够看到执行详情。 创立一个自动化部署maven我的项目的工作原理:jenkins用git插件将我的项目拉下来,用Maven Integration插件打包,用Publish Over SSH插件将打包的jar或者文件夹发送到部署我的项目的服务器,并执行shell脚本启动~ 先决条件: git插件:在初始化的时候就默认装置的;Maven Integration插件:装置办法同上;Maven配置:首页->系统管理->全局工具配置,勾选主动装置,抉择maven版本即可;Publish Over SSH: 创立上一个工作的装置/配置过了;git拉取代码同样创立工作,来到配置页面,切到【源码治理】选项卡配置仓库地址和密钥: 这个时候能够保留并点击立刻构建看看代码是否拉下来。 Maven 打包切到【构建】选项卡,点击【增加构建步骤】抉择“调用顶层 Maven 指标” maven版本抉择在【全局工具配置】外面配置的maven,如果没有就是你不配,不,是你没配!指标一栏填写打包命令:clean install -Dmaven.test.skip=true,或者依据状况填写。 这个时候能够保留并点击立刻构建看看代码是否失常打包。 运行启动脚本代码拉下来了,jar也打包好了,然而jar包在容器外面,能够在【构建】模块增加个Send files or execute commands over SSH,应用Source files(工作的工作空间目录)和Remote directory(登录我的项目服务器的家目录)传输jar文件,然而我部署jenkins的docker和部署我的项目的服务器是同一台,应用命令docker cp 命令就能够将docker容器外面的jar文件拷贝进去,并和启动我的项目的脚本写在一起。就省去了文件传输,间接执行脚本即可。docker cp详见《蛮吉学 Docker》 ...

May 31, 2021 · 1 min · jiezi

关于docker:docker-运行jar

1、新建目录 mkdir kernum(新进文件夹)把jar和配置文件放到外面2、下载java镜像 docker pull java83、创立Dockerfile FROM java:8VOLUME /tmpADD kernum-pos.jar app.jarCOPY wsdl.properties /config/wsdl.propertiesCOPY druid.properties /config/druid.propertiesCOPY base.properties /config/base.propertiesEXPOSE 8081ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]4、创立镜像 进入kernum目录执行命令docker build -t java/demo .5、生成容器 docker run -d -p 8081:8081 --restart=always --name demo java/demo4、命令执行形式 docker run -d -p 8083:8083 --restart=always --name demo java/demo--restart=always(随着docker启动)-p映射端口,冒号后面是我的项目的,前面映射到端口的-v环境,后面的是理论目录,前面是容器目录-name 名称,前面跟着镜像名称和版本前面是运行的命令4、容器常用命令 docker ps -a(查问正在运行的容器)docker logs 容器id (查问容器的id)5、进行容器 docker ps -a (查看容器列表)docker exec -it 容器id /bin/bash(进入容器命令行)docker stop 容器id (进行容器)docker rm 容器id (删除容器)

May 31, 2021 · 1 min · jiezi

关于docker:想要了解知识

来看看dockervue兄弟组件传值bushttps://baijiahao.baidu.com/s...

May 26, 2021 · 1 min · jiezi

关于docker:十分钟掌握Docker基本使用

工夫那么贵重哪有一个小时学习一个新的技能!那么十分钟呢?本文记录工作中须要疾速应用 docker 的几个场景,真正帮你十分钟入门!场景一:理解何为Docker 如果你不太理解Docker,还是本人搜一下吧,本文基于你至多晓得Docker干啥用的;Docker是通过规范的配置文件来发明对立的开发或者生产环境的一个工具,其外围就是镜像(曾经配置好了各种环境)。 场景二:配置Docker国内镜像 没啥好说的,间接上办法 如果你是装置的Mac或者Windows客户端都能够依照图所示配置镜像地址 Linux下: # vi /etc/docker/daemon.json{ "registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]}# 而后依据你是Ubuntu还是Centos等其余零碎,重启docker服务即可场景三:疾速查找、下载你须要的Docker环境 # 查找环境(前面的 `--no-trunc` 是为了残缺输入形容信息)# 你也能够去 `https://hub.docker.com/` 网站搜寻,搜寻性能更弱小docker search mysql --no-trunc# 搜寻某个镜像的tags(这个docker并未提供原生命令,解决方案都是利用docker提供的凋谢api进行搜寻,或者去 `https://hub.docker.com/` 查阅# 本命令来自 `https://stackoverflow.com/questions/28320134/how-can-i-list-all-tags-for-a-docker-image-on-a-remote-registry`)wget -q https://registry.hub.docker.com/v1/repositories/ubuntu/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'# 下载某个镜像 docker pull mysql# 下载某个特定 `tags`(通常是版本号)的镜像,强烈建议制订 `tags` 下载,尤其是生产环境docker pull mysql:8.0# 删除某个镜像docker rmi mysql场景四:基于某个镜像创立、运行并进入容器 # 查看所有容器docker ps -a # -a 参数能够查看已进行运行的容器# 基于某个镜像创立容器并运行docker create -it --name='ubuntu-20' ubuntu # 参数 `-it` 标识了能够反对规范输入输出,通常一起应用 `--name` 为该容器起个名字,强烈建议肯定起一个独立名字docker start ubuntu-20 # 启动该容器docker exec -it ubuntu-20 /bin/bash # 在该容器运行交互命令行工具,即可进入容器# 疾速创立并运行# 这是一条整合命令,相当于下面的三条,特地留神,如果不增加 `-d` 参数,运行后间接进入到容器交互模式,如果此时exit退出,则容器会主动进行,`-d` 是保障后盾运行docker run -it -d --name='ubuntu-20' ubuntu /bin/bash# 容器操作是docker中最简单的性能,须要多多学习钻研场景五:映射本地端口及文件目录 ...

May 26, 2021 · 1 min · jiezi

关于docker:docker安装mycat并实现mysql读写分离和分库分表

1.部署mysql主从复制,参数我的博客《docker部署mysql主从复制》 2.拉取docker镜像 1docker pull longhronshens/mycat-docker 3.mycat相干配置 一、创立配置文件夹 12mkdir -p /usr/local/mycat/confcd /usr/local/mycat/conf 二、vim /usr/local/mycat/conf/server.xml 123456789101112131415161718192021<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mycat:server SYSTEM "server.dtd"><mycat:server xmlns:mycat="http://io.mycat/"> <system> <property name="useSqlStat">0</property> <property name="useGlobleTableCheck">0</property> <property name="sequnceHandlerType">0</property> <property name="processorBufferPoolType">0</property> <property name="handleDistributedTransactions">0</property> <property name="useOffHeapForMerge">1</property> <property name="memoryPageSize">1m</property> <property name="spillsFileBufferSize">1k</property> <property name="useStreamOutput">0</property> <property name="systemReserveMemorySize">384m</property> <property name="useZKSwitch">true</property></system><user name="root"> <property name="password">root</property> <property name="schemas">test</property></user></mycat:server> 三、vim /usr/local/mycat/conf/schema.xml 123456789101112131415161718<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="test" checkSQLschema="false" sqlMaxLimit="100"> <table name="tb_user" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3,dn4" rule="userrule"/> <table name="tb_category" primaryKey="id" dataNode="dn1,dn2,dn3,dn4" rule="categoryrule"/></schema><dataNode name="dn1" dataHost="localhost1" database="db1"/><dataNode name="dn2" dataHost="localhost1" database="db2"/><dataNode name="dn3" dataHost="localhost1" database="db3"/><dataNode name="dn4" dataHost="localhost1" database="db4"/><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="172.17.0.2:3306" user="root" password="123456"> <readHost host="hostS2" url="172.17.0.3:3306" user="root" password="123456"/> </writeHost></dataHost></mycat:schema> 四、vim /usr/local/mycat/conf/rule.xml 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mycat:rule SYSTEM "rule.dtd"><mycat:rule xmlns:mycat="http://io.mycat/"> <tableRule name="userrule"> <rule> <columns>id</columns> <algorithm>func1</algorithm> </rule></tableRule><tableRule name="categoryrule"> <rule> <columns>id</columns> <algorithm>jump-consistent-hash</algorithm> </rule></tableRule><function name="murmur" class="io.mycat.route.function.PartitionByMurmurHash"> <property name="seed">0</property><!-- 默认是0 --> <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 --> <property name="virtualBucketTimes">160 </property></function><function name="crc32slot" class="io.mycat.route.function.PartitionByCRC32PreSlot"> <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 --></function><function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"> <property name="mapFile">partition-hash-int.txt</property></function><function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property></function><function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <property name="count">4</property></function><function name="func1" class="io.mycat.route.function.PartitionByLong"> <property name="partitionCount">8</property> <property name="partitionLength">128</property></function><function name="latestMonth" class="io.mycat.route.function.LatestMonthPartion"> <property name="splitOneDay">24</property></function><function name="partbymonth" class="io.mycat.route.function.PartitionByMonth"> <property name="dateFormat">yyyy-MM-dd</property> <property name="sBeginDate">2015-01-01</property></function><function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod"> <property name="mapFile">partition-range-mod.txt</property></function><function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash"> <property name="totalBuckets">4</property></function></mycat:rule> ...

May 25, 2021 · 1 min · jiezi