关于docker:海纳百川无所不容Win10环境下使用Docker容器式部署前后端分离项目DjangoVuejs

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_179 随着现代化产品研发的一直推动,咱们会发现,简直每个产品线都会蕴含性能各异的服务,而且服务与服务之间存在也会存在着盘根错节的依赖和被依赖关系,这就会带来一个世界性难题,我的项目部署的时候须要运维来手动配制服务之间通信的协定和地址,稍有不慎就会导致服务异样,同时如果服务器因为坏道或者其余起因导致更换物理机,重新部署新环境的老本也会十分之高。因而,咱们就会寄希望于Docker这种的容器技术能够让咱们构建产品所须要的所有的服务可能迅速快捷的重新部署,并且能够依据需要做横向扩大,且可能保障稳固的容灾性,在呈现问题的时候能够利用守护过程主动重启或者启动容灾备份。 本次咱们将在Win10环境下利用Docker容器技术来对前后端拆散我的项目Django+Vue.js进行打包,别离定制化对应的我的项目镜像,应答疾速部署以及高扩大的需要。 首先当然是装置Docker,能够参照这篇视频攻略:win10装置配置Docker并更换国内源。 随后在宿主机装置gunicorn,容器内咱们用异步的形式来启动Django pip3 isntall gunicorn geventDjango我的项目配置settings.py对应的利用: # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'corsheaders', 'rest_framework', 'myapp', 'dwebsocket', 'gunicorn' ]而后在Django我的项目的根目录编写gunicorn的配置文件:gunicorn.conf.py import multiprocessing bind = "0.0.0.0:8000" #绑定的ip与端口 workers = 1 #过程数这里留神一点,ip必须是0.0.0.0,不要写成127.0.0.1,否则外部环境会拜访不到容器内的服务,接下来在我的项目的根目录编写好依赖列表:requirements.txt Django==2.0.4 django-cors-headers==2.5.3 djangorestframework==3.9.3 celery==4.4.2 dwebsocket==0.5.12 redis==3.3.11 pymongo==3.8.0 PyMySQL Pillow pyjwt pycryptodome selenium qiniu gunicorn gevent这里须要留神的是,某些依赖的库最好用==标注出小版本,因为一会在容器内通过pip装置的时候,零碎有可能会主动帮你装置最新版导致一些依赖报错。 上面就是老套路,在根目录编写DockerFile文件: FROM python:3.7 WORKDIR /Project/mydjango COPY requirements.txt ./ RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple COPY . . ENV LANG C.UTF-8 CMD ["gunicorn", "mydjango.wsgi:application","-c","./gunicorn.conf.py"]本次的根底镜像咱们抉择3.7,毕竟2020年了,与时俱进还是很必要的。 ...

November 17, 2020 · 3 min · jiezi

关于docker:Kubernetes笔记五了解Pod容器组

Kubernetes 中, 容器总是以 Pod(容器组)的形式进行调度与运行。因而对 Pod 的了解与把握是学习 Kubernetes 的根底。 了解 PodPod(容器组)是 Kubernetes 中最小的调度单元,每一个Pod都是某个应用程序的一个运行实例。以前咱们的 Web 利用都是以 Tomcat 等 Web 容器过程的模式运行在操作系统中,在 Kubernetes 中,咱们须要将 Web 利用打成镜像,以容器的形式运行在 Pod 中。 Kubernetes 不会间接治理容器,而是通过 Pod 来治理。一个Pod蕴含如下内容: 一个或多个容器, 个别是一个,除非多个容器严密耦合共享资源才放在一个 Pod 中;共享的存储资源(如数据卷),一个 Pod 中的容器是能够共享存储空间的;一个共享的 IP 地址,Pod 中容器之间能够通过 localhost:port 彼此拜访;定义容器该如何运行的选项。Pod 中的容器可包含两种类型: 工作容器:就是咱们通常运行服务过程的容器初始化容器:实现一些初始化操作的容器,初始化容器在工作容器之前运行,所有的初始化容器胜利执行后,才开始启动工作容器治理 Pod创立 Pod在 Kubernetes 中,咱们个别不间接创立 Pod,而是通过控制器来调度治理(Deployment,StatefulSet,DaemonSet 等),这里为了便于理解,先通过 yaml 配置文件的形式定义 Pod 来间接创立 Pod。定义配置文件 pod-test.yaml 如下, apiVersion: v1kind: Podmetadata: name: pod-test # pod 名称 namespace: default # pod 创立的 namespacespec: containers: # pod 中容器定义 - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 8081 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html restartPolicy: OnFailure # 重启策略 volumes: # 数据卷定义 - name: workdir hostPath: path: /tmp type: Directory其中 spec 局部的 containers 定义了该 Pod 中运行的容器,从 containers 的复数模式也能够看出一个 Pod 中是能够运行多个容器的。 ...

November 17, 2020 · 4 min · jiezi

关于docker:在-Kubernetes-Ingress-中支持-WebsocketSocket-服务

Kubernetes Ingress 可将集群外部的 Service 通过 HTTP/HTTPS 的形式裸露供内部拜访,并通过门路匹配规定定义服务的路由。然而 Ingress 对 TCP/UDP 的服务却反对的不那么好。如果咱们服务中有应用 Websocket 或 Socket, 须要裸露给内部拜访,在 Kubernetes 中该如何配置呢? 大抵有两种形式[见参考文档1]: 应用 NodePort, 应用节点 IP 与 NodePort 裸露的端口拜访应用 ClusterIp + Ingress + ConfigMap应用 NodePort 将端口间接裸露,须要节点有外网 IP,且该形式可能绕过现有的 TLS, 存在安全性的问题。 ClusterIp 只能在集群外部拜访,由 Ingress 进行代理对外裸露,但对于 TCP/UDP, Ingress 不反对间接代理, 须要借助 ConfigMap 进行映射。 NodePort 的形式比较简单, 本文介绍 ClusterIp + Ingress + ConfigMap 的形式。 创立 ClusterIp 服务假如有一个 Websocket/Socket 服务,裸露端口 8828, 针对该服务定义 ClusterIp 配置如下(不申明 type, 默认即为 ClusterIp), ...

November 17, 2020 · 2 min · jiezi

关于docker:看完这篇再也不用担心不会写dockerfile了

Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格局。能够通过docker build命令从Dockerfile中构建镜像。用户能够通过对立的语法命令来依据需要进行配置,通过这份对立的配置文件,在不同的文件上进行散发,须要应用时就能够依据配置文件进行自动化构建,这解决了开发人员构建镜像的简单过程。 Dockerfile的应用Dockerfile形容了组装对象的步骤,其中每条指令都是独自运行的。除了FROM指令,其余每条命令都会在上一条指令所生成镜像的根底上执行,执行完后会生成一个新的镜像层,新的镜像层笼罩在原来的镜像之上从而造成了新的镜像。Dockerfile所生成的最终镜像就是在根底镜像下面叠加一层层的镜像层组建的。 Dockerfile指令Dockerfile的根本格局如下: # CommentINSTRUCTION arguments在Dockerfile中,指令(INSTRUCTION)不辨别大小写,然而为了与参数辨别,举荐大写。Docker会程序执行Dockerfile中的指令,第一条指令必须是FROM指令,它用于指定构建镜像的根底镜像。在Dockerfile中以#结尾的行是正文,而在其余地位呈现的#会被当成参数。 Dockerfile中的指令有FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOING、VOLUME、USER、WORKDIR、ONBUILD,谬误的指令会被疏忽。上面将具体解说一些重要的Docker指令。 FROM格局: FROM <image> 或者 FROM <image>:<tag> FROM指令的性能是为前面的指令提供根底镜像,因而Dockerfile必须以FROM指令作为第一条非正文指令。从公共镜像库中拉取镜像很容易,根底镜像能够抉择任何无效的镜像。在一个Dockerfile中FROM指令能够呈现屡次,这样会构建多个镜像。tag的默认值是latest,如果参数image或者tag指定的镜像不存在,则返回谬误。 ENV格局: ENV <key> <value> 或者 ENV <key>=<value> ... ENV指令能够为镜像创立进去的容器申明环境变量。并且在Dockerfile中,ENV指令申明的环境变量会被前面的特定指令(即ENV、ADD、COPY、WORKDIR、EXPOSE、VOLUME、USER)解释应用。 其余指令应用环境变量时,应用格局为$variable_name或者${variable_name}。如果在变量背后增加斜杠\能够本义。如\\$foo或者\\${foo}将会被转换为$foo和${foo},而不是环境变量所保留的值。另外,ONBUILD指令不反对环境替换。 COPY格局: COPY <src> <dest> COPY指令复制<src>所指向的文件或目录,将它增加到新镜像中,复制的文件或目录在镜像中的门路是<dest>。<src>所指定的源能够有多个,但必须是上下文根目录中的相对路径。不能只用形如 COPY ../something /something这样的指令。此外,<src>能够应用通配符指向所有匹配通配符的文件或目录,例如,COPY home* /mydir/ 示意增加所有以"hom"结尾的文件到目录/mydir/中。 <dest>能够是文件或目录,但必须是指标镜像中的绝对路径或者绝对于WORKDIR的相对路径(WORKDIR即Dockerfile中WORKDIR指令指定的门路,用来为其余指令设置工作目录)。若<dest>以反斜杠/结尾则其指向的是目录;否则指向文件。<src>同理。若<dest>是一个文件,则<src>的内容会被写到<dest>中;否则<src>指向的文件或目录中的内容会被复制增加到<dest>目录中。当<src>指定多个源时,<dest>必须是目录。如果<dest>不存在,则门路中不存在的目录会被创立。 ADD格局:ADD <src> <dest> ADD与COPY指令在性能上很类似,都反对复制本地文件到镜像的性能,但ADD指令还反对其余性能。<src>能够是指向网络文件的URL,此时若<dest>指向一个目录,则URL必须是齐全门路,这样能够取得网络文件的文件名filename,该文件会被复制增加到<dest>/<filename>。比方 ADD http://example.com/config.pro... / 会创立文件/config.property。 <src>还能够指向一个本地压缩归档文件,该文件会在复制到容器时会被解压提取,如ADD sxample.tar.xz /。然而若URL中的文件为归档文件则不会被解压提取。 ADD 和 COPY指令尽管性能类似,但个别举荐应用COPY,因为COPY只反对本地文件,相比ADD而言,它更加通明。 EXPOSE格局: EXPOSE <port> [<port>/<protocol>...] EXPOSE指令告诉Docker该容器在运行时侦听指定的网络端口。能够指定端口是侦听TCP还是UDP,如果未指定协定,则默认值为TCP。这个指令仅仅是申明容器打算应用什么端口而已,并不会主动在宿主机进行端口映射,能够在运行的时候通过docker -p指定。 EXPOSE 80/tcpEXPOSE 80/udpUSER格局: USER <user>[:<group] 或者 USER <UID>[:<GID>] USER指令设置了user name和user group(可选)。在它之后的RUN,CMD以及ENTRYPOINT指令都会以设置的user来执行。 ...

November 17, 2020 · 2 min · jiezi

关于docker:解决docker-kubernetes一直处于starting状态问题

前言最近在阿里云下面购买了k8s集群,想在本地kubectl连贯,期间遇到好多问题,记录下来分享给大家。 问题一:本地没有~/.kube目录?我的电脑环境是mac,依照阿里云ACK提供的配置信息如下: 通过 kubectl 连贯 Kubernetes 集群[通过 CloudShell 治理集群](javascript:;)2. 装置和设置 kubectl 客户端。无关详细信息请参见 [装置和设置 kubectl](https://kubernetes.io/docs/tasks/kubectl/install/)。3. 配置集群凭据:将以下内容复制到计算机 $HOME/.kube/config 目录下。......配置实现后,即可应用 kubectl 从计算机拜访 Kubernetes 集群。然而,我发现我本机并没有发现目录~/.kube,到网上找了好多文章都没有很好的解释,要害是我曾经装置了docker,偶然间发现了docker的kubernetes配置,如图: 我点击之后立马就呈现了~/.kube目录,这样就解决了问题一! 问题二:Docker Kubernetes始终处于Starting?问题一的时候我点击Enable Kubernetes之后就始终呈现Starting,如下:于是到网上找各种材料,最终解决形式如下, 1、卸载docker(看具体情况)卸载之后别忘了配置阿里源 { "experimental": true, "debug": true, "registry-mirrors": [ "https://xxx.mirror.aliyuncs.com" ]}2、查看hosts 127.0.0.1 localhost255.255.255.255 broadcasthost::1 localhost#Added by Docker Desktop#To allow the same kube context to work on the host and the container:127.0.0.1 kubernetes.docker.internal#End of section3、删除相干文件 rm -rf ~/.dockerrm -rf ~/.kuberm -rf ~/Library/Group\ Containers/group.com.docker/pki/4、装置相干images文件到k8s-for-docker-desktop下面clone我的项目,在 Mac 上执行如下脚本, ...

November 14, 2020 · 1 min · jiezi

关于docker:Docker-自定义镜像的创建及运行Docker系列文章二

文 | 平哥 日期 | 20201112 形式一:应用DockerFile间接创立自定义镜像根本步骤: 编写Dockerfile文件docker build 生成镜像docker run 创立容器运行Step 1 将我的项目打成jar包并上传在IDEA中创立SpringBoot我的项目,外面只有一个叫做”/”的控制器办法,拜访后页面输入:“Success!”,用Maven进行打包成demojar.jar。提醒:在pom文件中退出如下打包配置: <build> <finalName>demojar</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.gcp.TestDockerBuildApp</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <!--把依赖的包都打包到生成的Jar包中--> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins></build>将打包好的文件上传至服务器的 /usr/loal/docker 目录中。 Step 2 下载JDK的Docker镜像在服务器上下载JDK的docker镜像,我这用的是openjdk:8版本 # docker pull openjdk:8能够利用以下命令进行确认,本地是否有jdk镜像: # docker imagesStep 3 创立构建文件新建一个Docke镜像构建文件:builFile,提醒:要构建到镜像中的jar文件须要和buildFile处于同一个目录。 # vim /usr/local/docker/buildFile在文件中输出如下信息: FROM openjdk:8VOLUME /var/mydatasADD demojar.jar app.jarENTRYPOINT ["java","-jar","/app.jar"]EXPOSE 8080参数阐明:// 指定根底镜像,这个须要依据本人配置的仓库上的版本写FROM openjdk:latest// 长久化目录,容器数据卷,用于数据保留和长久化工作VOLUME /var/mydatas// 指定源包,前者是你的jar包,将宿主机目录下的文件拷贝进镜像且ADD命令会主动解决URL和解压tar压缩包ADD demojar.jar app.jar// 指定容器启动时执行的命令ENTRYPOINT ["java","-jar","/app.jar"]// 对外端口EXPOSE 8080 ...

November 12, 2020 · 1 min · jiezi

关于docker:Docker应用容器引擎的安装与基本操作Docker系列文章一

文 | 平哥 日期 | 20201112 一、Docker简介Docker 是基于 Go 语言实现的开源容器我的项目。冀望达到使我的项目运行环境“一次封装,到处运行”的目标。 学习Docker次要目标是可能做两件事件:1.在Docker装置软件2.把我的项目部署到Docker Docker架构: Docker 是通过装置在宿主机上的Daemon后台程序来接管客户端命令,创立容器实例,从近程镜像仓库核心拉取或创立镜像。 二、Docker装置与启动Docker有windows和linux版本。本次操作以装置在Linux上进行演示的。以下装置步骤基于CentOS8,须要确保该虚拟机能够连贯外网。 1.Docker 装置Step 1 上传安装包Docker的装置能够分为在线装置和本地装置,因为须要连贯Docker官网,网速感人且极易失败,于是我采纳的是本地装置。具体安装包:链接: https://pan.baidu.com/s/1QYwL... 明码: ljsk 将下载好的安装包上传至CentOS中: Step 2 装置依赖和Docker应用 yum localinstall 命令别离装置:1、先装置 containerd.io: # yum localinstall containerd.io-1.2.6-3.3.fc30.x86_64.rpm 2、装置 docker-ce: # yum localinstall -y libcgroup# yum localinstall -y docker-ce-cli-19.03.12-3.el7.x86_64.rpm# yum localinstall -y docker-ce-19.03.12-3.el7.x86_64.rpmStep 3 启动并查看Docker启动命令: # systemctl start docker查看docker信息: # docker info后果如图: Step 4 阿里云镜像加速器配置默认状况下Docker从Docker Hub上下载镜像资源,但速度很慢,能够通过配置国内的镜像加速器来解决。登录阿里云控制台,输出“容器镜像服务”进行搜寻,点击“镜像加速器”:在装置好的Docker的服务器上,依照页面阐明配置daemon.json配置文件并重启即配置实现。 三、Docker镜像操作3.1 列出本地所有镜像命令: # docker images后果如图:后果解释:REPOSITORY:镜像所在的仓库名称TAG:镜像标签(其实就是版本)IMAGE ID:镜像IDCREATED:镜像的创立日期(不是获取该镜像的日期)SIZE:镜像大小 ...

November 12, 2020 · 1 min · jiezi

关于docker:docker-pull-mysql

部署 mysql 默认拉取最新版docker pull mysql 挂载目录 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysqldocker exec -it mysql bashcd /etc/mysql/mysql.conf.d/mysqld.cnfdocker cp  mysql:/etc/mysql/mysql.conf.d/mysqld.cnf  xxxx 挂在目录运行脚本docker run -d -p 3306:3306 --privileged=true -v /usr/local/docker/mysql/data:/var/lib/mysql -v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql进入容器Docker exec -it mysql bashmysql -u root -p### mysql 8 加密形式扭转 localhost 创立用户alter user 'test'@'%' identified with mysql_native_password ;//设置明码alter user 'test'@'%' identified with mysql_native_password by '1111';

November 11, 2020 · 1 min · jiezi

关于docker:Docker-实战总结非常全面收藏了

Docker简介Docker是一个开源的利用容器引擎,开发者能够打包本人的利用到容器外面,而后迁徙到其余机器的docker利用中,能够实现疾速部署。 简略的了解,docker就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不管其外部的货物一样,软件容器充当软件部署的标准单元,其中能够蕴含不同的代码和依赖项。 依照这种形式容器化软件,开发人员和 IT 业余人员只需进行极少批改或不批改,即可将其部署到不同的环境,如果呈现的故障,也能够通过镜像,疾速复原服务。 Docker劣势1.个性劣势2.资源优势 Docker基本概念Client(客户端):是Docker的用户端,能够承受用户命令和配置标识,并与Docker daemon通信。 Images(镜像):是一个只读模板,含创立Docker容器的阐明,它与操作系统的装置光盘有点像。 Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。 Registry(仓库):是一个集中存储与散发镜像的服务。最罕用的Registry是官网的Docker Hub 。 Docker扭转了什么?Docker扭转了云服务,使云服务的共融共通的现实逐渐成为了可能。并且Docker 曾经是云策略的一部分,许多开发者正在打算应用 Docker 将业务迁徙到云端。另外,为了防止被云服务供应商绑定,Docker成为很多开发者的首选。 Docker扭转了产品交付,为产品的整个生命周期提供了一整套的解决方案和流程。 Docker扭转了开发方式,提供了简化的环境配置、封装的运行环境以及对立的环境。并且提供了疾速部署的形式。 Docker扭转了测试,多版本测试变得极为不便,疾速构建测试环境也变得更加简略并且无需开发人员干涉或者搭建。 Docker扭转了运维,环境的一致性让运维变得更加简略,同时热更新的反对让运维不再须要中午加班部署更新,更新能够随时进行。当呈现重大问题时,还能疾速回滚到指定版本。 Docker扭转了架构,自动化扩容反对让架构变得更加简略,分布式系统也更加易于搭建和反对。同时遗留的单体利用也很易于转变为古代利用。 总之,在某种程度上,Docker扭转了产品开发中的一些游戏规则。尽管Docker是一项技术,然而它也带来了新的思维,新的流程和工作办法,Docker在推动行业的倒退,Docker曾经在扭转世界,并且在逐渐的变为事实……关注民工哥技术之路公众号,回复1024获取2TB材料一份,助力大家更好的学习技术。 Docker装置应用操作系统:CentOS 7 1、装置依赖 yum install -y yum-utils device-mapper-persistent-data lvm22、增加软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 指定阿里云镜像源3、装置docker-ce(对系统内核有肯定要求,centos6不反对) yum clean all  yum makecache fast        # 从新生成缓存yum -y install docker-ce docker-ce-cli containerd.io4、设置自启并启动 systemctl enable dockersystemctl start docker5、查看版本 docker version运行示例:Nginx 1、搜寻并下载镜像 docker search nginxdocker pull nginx2、启动一个容器并映射端口到本地 docker run -d -p 8080:80 --name Nginx nginx    # 参数详解见下文3、拜访本地映射端口 Docker常用命令1.镜像管制 搜寻镜像:docker search  [OPTIONS]  TERM上传镜像:docker push  [OPTIONS]  NAME[:TAG]下载镜像:docker pull  [OPTIONS]  NAME[:TAG]提交镜像:docker commit [OPTIONS]  CONTAINER NAME[:TAG]构建镜像:docker build  [OPTIONS]  PATH删除镜像:docker rmi [OPTIONS]  IMAGE  [IMAGE...]减少镜像标签:docker tag SOURCE_IMAGE[:TAG]  TARGET_IMAGE[:TAG]查看所有镜像:docker images  [OPTIONS]  [REPOSITORY[:TAG]]2.容器管制 启动/重启容器:docker start/restart CONTAINER进行/强停容器:docker stop/ kill CONTAINER删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER...]重命名容器:docker rename CONTAINER CONTAINER_NEW进入容器:docker attach CONTAINER执行容器命令:docker exec CONTAINER COMMAND查看容器日志:docker logs [OPTIONS] CONTAINER查看容器列表:docker ps [OPTIONS]3.容器启动 ...

November 8, 2020 · 1 min · jiezi

关于docker:docker网段冲突了怎么办

前言最近ssh登陆公司近程服务器,忽然登不进去,后经排查是因为有个docker容器的网段和公司的网段抵触了,导致登陆不下来。 如何解决docker默认网段是172.17,和公司的网段抵触,因而解决的方法其实也挺简略的,要么换公司网段,要么换docker网段,是个正常人都会抉择换docker网段 解决方案计划一:不改docker网段,创立不和公司网段抵触的docker子网段docker network create --driver=bridge --subnet=192.161.0.0/16 monitor_net运行容器时指定 docker run -it --name <容器名> ---network monitor_net <镜像名在docker-compose同样通过networks指定,形如下 version: '3'networks: monitor: #应用曾经存在的网络 external: name: monitor_net services: prometheus: image: prom/prometheus container_name: prometheus hostname: prometheus privileged: true restart: always volumes: - /usr/local/src/config/prometheus.yml:/etc/prometheus/prometheus.yml - /usr/local/src/config/node_down.yml:/etc/prometheus/node_down.yml ports: - "9091:9090" networks: - monitor links: - alertmanager - node-exporter计划二:批改docker默认网段1、进行dockersystemctl stop docker2、删除原有网桥ip link del docker0 down3、vim /etc/docker/daemon.json,增加形如下内容"bip":"192.161.20.1/24"如果没有daemon.json文件,则新建 文件内容形如下 { "registry-mirrors": ["https://zq2cvqfe.mirror.aliyuncs.com"],"insecure-registries":["192.168.1.30:5002"],"bip":"192.161.20.1/24"}4、重启docker服务systemctl restart docker5、通过ifconfig 查看docker网段是否曾经变更 总结装置docker时,记得批改docker默认,免得和公司的网段抵触 ...

November 6, 2020 · 1 min · jiezi

关于docker:虚拟机中使用docker有时无法连接自定义了ip的容器的问题

通过自定义一个网段, 能够给docker容器指定固定ip, 然而在虚拟机中应用时有时会遇到无奈连贯这些容器的问题, 起初发现是虚构网桥的ip失落了, 容器找不到网关(起因未知),解决办法就是给网桥配个ip就行 [root@centos-vm ~]# docker network lsNETWORK ID NAME DRIVER SCOPE1559f981add5 bridge bridge localaaee0746615d host host local2b9ef86b6fb0 none null local2d6e106ec327 vmnet bridge local0e174a89f6c6 vmnet1 bridge localbec0056af5ea vmnet2 bridge local这里要批改vmnet这个网桥 [root@centos-vm ~]# ifconfig br-2d6e106ec327 172.20.0.1 netmask 255.255.0.0这样就ok了

November 6, 2020 · 1 min · jiezi

关于docker:记一次dockercompose启动的内部服务响应超慢的问题

docker-compose启动的外部服务首页进去耗时用了10几秒,真是被震惊了,首页用到的服务是3个。起初发现是因为docker的dns解析问题导致的。 vim /etc/systemd/system/docker.service.d/docker-dns.conf本来ndot这里是2,什么意思呢?示意域名申请中点的个数,例如:www.baidu.com,ndot就是2,蕴含2个点。而我的服务中呢,就不是严格依照域名的形式来写的,都是一个单词,像php这种。那这会产生什么呢?php中ndot是0,比原始配置的2小,会依照dns-search的配置拼上默认的svc.cluster.local,而后按php.svc.cluster.local这个名字去找服务了,后果找不到,按opt里的配置,超时2s,重试2次,之后再依照我本来的服务名去找,后果找到了,一个服务这就4s过来了,而后我所有的服务都没有点。就呵呵了。改完之后重启docker守护过程,再重启docker服务。ok了,变毫秒响应了!

November 6, 2020 · 1 min · jiezi

关于docker:Docker-hung住问题解析系列一pipe容量不够

本文来自OPPO互联网根底技术团队,转载请注名作者。同时欢送关注咱们的公众号:OPPO_tech,与你分享OPPO前沿互联网技术及流动。背景:这个是之前遇到的老问题,最近docker社区外面其他人报了这问题临时还没解决。 issue的链接是:https://github.com/containerd... 上面列一下咱们是怎么排查并解这个问题的。 一、故障景象Oppo云智能监控发现lxcfs 服务不是处于工作态超过配置的阈值: # systemctl status lxcfs● lxcfs.service - FUSE filesystem for LXCLoaded: loaded (/usr/lib/systemd/system/lxcfs.service; enabled; vendor preset: disabled)Active: activating (start-post) since Tue 2020-06-23 14:37:50 CST; 5min ago---这个是6月份的案例,非active (running) 状态Docs: man:lxcfs(1)Process: 415455 ExecStopPost=/bin/sh -c if mount |grep "baymax\/lxcfs"; then fusermount -u /var/lib/baymax/lxcfs; fi (code=exited, status=0/SUCCESS)Main PID: 415526 (lxcfs); : 415529 (lxcfs-remount-c)Tasks: 43Memory: 28.9MCGroup: /system.slice/lxcfs.service├─415526 /usr/bin/lxcfs -o nonempty /var/lib/baymax/lxcfs/└─control├─415529 /bin/sh /usr/bin/lxcfs-remount-containers├─416923 /bin/sh /usr/bin/lxcfs-remount-containers└─419090 docker exec 1eb2f723b69e sh -c \ export f=/proc/cpuinfo && test -f /var/lib/baymax/lxcfs/$f && (umount $f; mount --bind...二、故障景象剖析查看对应的过程树,发现 1eb2f723b69e 容器的runc阻塞没有返回。 ...

November 5, 2020 · 4 min · jiezi

关于docker:利用docker轻松搭建RedisCluster集群环境

简介Redis Cluster是Redis官网的一个高可用分布式解决方案,其长处是高可用,毛病是不能保证数据强统一。在这里应用docker容器来搭建一套6节点(3主,3从)Redis-Cluster集群环境。 环境筹备操作系统版本:CentOS Linux release 7.6.1810 (Core) docker版本:19.03.13服务器IP地址:192.168.112.136redis版本:5.0.9redis实例端口:8001--8006 docker装置首先须要在CentOS零碎上装置好docker软件,目前docker软件分为社区版ce和企业版ee,企业版是须要免费的,所以在这里应用社区版,要装置docker软件,CentOS零碎的内核版本高于 3.10。 上面是docker装置步骤 yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce启动并退出开机启动systemctl start dockersystemctl enable docker因为docker默认是从国外拉取镜像,速度会比较慢,所以须要配置docker从国内的镜像网站拉取镜像,其配置步骤如下所示 将国内镜像网站增加到daemon.json配置文件 >/etc/docker/daemon.json{ "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://reg-mirror.qiniu.com", "https://mirror.ccs.tencentyun.com" ]}{ "registry-mirrors": ["https://mirror.baidubce.com"]}增加实现之后,须要重启docker服务器,使配置失效 systemctl daemon-reloadsystemctl restart dockerdocker服务器重启之后,应用docker info命令,查看配置是否失效 redis镜像拉取在docker-hub官网,有很多版本的redis镜像可供选择,在这里,抉择redis:5.0.9-buster进行拉取 [root@mysql ~]# docker pull redis:5.0.9-buster[root@mysql ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEredis 5.0.9-buster c440306287f4 7 days ago 98.3MB创立redis目录和配置文件因为这里须要配置6个redis实例的配置文件,所以在这里,能够先创立一个模板配置文件,之后应用代码批量替换的形式来创立每个redis的配置文件。 创立模板文件 创立目录mkdir -p /data/docker_redis/编写redis_cluster.conf.template文件vi redis_cluster.conf.templateport ${PORT}requirepass 1234masterauth 1234protected-mode nodaemonize noappendonly yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000cluster-announce-ip 192.168.112.136cluster-announce-port ${PORT}cluster-announce-bus-port 1${PORT}在这里须要解说2个参数cluster-announce-port:此端口为redis提供服务端口,用于利用客户端连贯cluster-announce-bus-port:此端口用于redis集群进行故障检测、配置更新、故障转移受权和外部通信应用,不用于利用客户端连贯应用。 ...

November 5, 2020 · 4 min · jiezi

关于docker:Docker常用镜像安装

Docker罕用镜像装置,Hadoop、Elasticsearch、Kibana、PostgreSQL、Redis、Nginx、Activemq。1 Hadoop镜像装置1.1 下载Docker镜像kiwenlau镜像较小,结构工夫快,镜像层数少,hadoop2.7.2版本 docker pull kiwenlau/hadoop:1.01.2 克隆仓库克隆仓库到以后文件夹(能够自行创立并切换到相应文件夹) mkdir -p /home/hadoop-dockercd /home/hadoop-dockergit clone https://github.com/kiwenlau/hadoop-cluster-docker1.3 桥接网络默认是 1 个主节点,2 个从节点,能够依据性能调整为 N 节点 docker network create --driver=bridge hadoop1.4 运行hadoop容器cd hadoop-cluster-docker./start-container.sh1.5 启动hadoop./start-hadoop.sh1.6 网页远程管理hadoop浏览器拜访Name Node: http://192.168.99.100:50070Resource Manager: http://192.168.99.100:8088(docker宿主机的ip默认为192.168.99.100) 1.7 进入hadoop master容器docker exec -it hadoop-master bash1.8 敞开hadoopdocker stop hadoop-masterdocker stop hadoop-slave1docker stop hadoop-slave2 2 Elasticsearch镜像装置2.1 下载镜像,指定6.4.2版本docker pull elasticsearch:6.4.22.2 启动前先在宿主机批改虚拟内存大小ES启动报错,max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],需批改内存大小 长期批改:cat /proc/sys/vm/max_map_countsudo sysctl -w vm.max_map_count=262144永恒批改:在/etc/sysctl.conf 文件最初增加 ...

November 4, 2020 · 2 min · jiezi

关于docker:k8s常用命名

依据pod名称找到容器uuidkubectl get pod ${pod_name} -n ${namespace} -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}' 依据容器UUID 找到具体piddocker inspect -f {{.State.Pid}} $pod 进入容器空间nsenter -n -t ${pid} 如下图所示:

November 3, 2020 · 1 min · jiezi

关于docker:使用docker搭建酷瓜云教育系统环境指南

为酷瓜云课堂(腾讯云版) course-tencent-cloud 提供环境反对 装置 docker 和 docker-compose装置 docker, 官网文档: install-docker 下载 docker sudo curl -sSL https://get.daocloud.io/docker | sh更改 docker 仓库的默认地址 批改 /etc/docker/daemon.json 文件(没有请自行创立) { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ]}启动 docker sudo service docker start装置 docker-compose,官网文档: install-compose 下载 docker-compose sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose给 docker-compose 减少执行权限 sudo chmod +x /usr/local/bin/docker-compose下载相干代码假设存在目录 /home/koogua 通过 git clone 下载构建代码,原名字太长,咱们用一个短名字 cd /home/kooguagit clone https://gitee.com/koogua/course-tencent-cloud-docker.git ctc-docker通过 git clone 下载我的项目代码,原名字太长,咱们用一个短名字 cd /home/koogua/ctc-docker/htmlgit clone https://gitee.com/koogua/course-tencent-cloud.git ctc配置运行环境(1)批改构建配置 ...

October 31, 2020 · 1 min · jiezi

关于docker:推荐-11-个极易上手的-Docker-实践项目

Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的镜像中,而后公布到任何风行的 Linux或Windows 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口。给老手们举荐11个极易上手的Docker实际我的项目。 spug地址: http s:// github.com/openspug/spug star: 3.8kfork: 769应用 Python+Vue 实现的开源运维平台,前后端拆散不便二次开发。该我的项目基于 Docker 镜像公布部署,不便装置和降级。反对运维常见性能:主机治理、工作打算治理、公布部署、监控告警等。 ctop地址: http s:// github.com/bcicen/ctop star: 10.2kfork: 388实现了类 top 命令展现成果的 docker 容器监控工具。 drone地址: http s:// github.com/drone/drone star: 21.3kfork: 2.1k一个基于 Docker 的继续集成平台,应用 Go 语言编写。 docui地址: http s:// github.com/skanehira/docui star: 1.8kfork: 74终端 Docker 管理工具,自带一个终端界面。应用该工具能够不便的通过界面治理 docker 不必再记那些命令。装置命令: docker-slim地址: http s:// github.com/docker-slim/docker-slim star: 8.8kfork: 306主动缩减 docker 镜像的体积的工具。大幅度缩减 docker 镜像的体积,不便散发,应用命令 docker-slim build --http-probe your-name/your-app。比方 Node.js 镜像缩减后的比照: ...

October 30, 2020 · 1 min · jiezi

关于docker:Alibaba-Cloud-Toolkit-创建镜像并push到-阿里云镜像仓库

书接 docker打包maven我的项目推送到阿里云镜像仓库 明天记录一下用 Alibaba Cloud Toolkit 创立镜像并push到 阿里云镜像仓库 的步骤 maven setting.xml 写入 阿里云镜像仓库 信息 提前创立命名空间和镜像仓库 intellij idea 设置-docker 中设置本地docker地址ps: 若点击 test connect报错,mac环境下执行 docker run -it -d --name=socat \ -p 2375:2375 \ -v /var/run/docker.sock:/var/run/docker.sock \ bobrik/socat \ TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock4.pom.xml 增加下列信息 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <docker.repostory>registry.cn-hangzhou.aliyuncs.com</docker.repostory> <docker.registry.name>huangzx3</docker.registry.name></properties><plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <configuration> <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName> <serverId>docker-aliyun</serverId> <registryUrl>${docker.repostory}</registryUrl> </configuration></plugin>ps:<serverId>标签的值要与setting.xml中的<id>标签相等<docker.registry.name> 为创立的命名空间<project.artifactId> 为创立的镜像仓库名5.创立Dockerfile文件 FROM openjdk:8u151-jdkADD target/gateway-test-1.0.0-SNAPSHOT.jar app.jarRUN bash -c 'touch /app.jar'EXPOSE 8761ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]6.创立 intellij idea alibaba cloud toolkit 推送docker程序 ...

October 30, 2020 · 1 min · jiezi

关于docker:如何优雅地使用-Docker

如何优雅地应用 Docker很久很久以前,就已经尝试过应用 Docker 。然而因为没有足够的能源学习,导致屡次大功告成(就像学 vim 一样)。终于,在想要应用 gitbook 转换开源书籍时,被放弃保护的 gitbook-cli 给教育了。因而重燃起学习 Docker 的能源。 原文公布于 集体博客同步备份至知否、掘金、知乎、腾讯云、微信公众号、哔哩哔哩 如果有谬误斧正或探讨,倡议在原博客评论,多平台可能无奈保障及时回复。同时无奈保障各平台内容放弃最新。 Docker 是什么容器和虚拟机容器和虚拟机不同,或者说除了看上去像,他们齐全是两个没有关系的货色。 虚拟机是在计算机中模仿另一个计算机的技术,重点在于模仿和另一个计算机。因而虚拟机须要先将物理机的硬件进行封装,并部署一个独立的操作系统。独立的操作系统调用模仿的硬件,实现各种性能。对于运行在虚拟机内的零碎来说,它仿佛就在一个真正的物理机上运行,不会受到过多的限度。 沙盒,其用处是隔离运行环境,而非模仿计算机。因而它不须要虚拟化硬件,也不须要装置独立的操作系统。晚期的沙盒(如 Sandboxie)往往用于运行一些不被信赖的软件,在计算机平安等方面大放异彩。运行在沙盒中的软件,即便是攻击性很强的病毒,依然很难危害到物理机(但就如同虚拟机一样,沙盒也存在被穿透的危险)。能够将其了解成依然执行在物理机的宿主零碎之中,然而外部所有程序的零碎调用都被沙盒截取(就像 proxychains 能够批改任意子过程的网络连接一样)替换为本人的虚构的零碎调用。当外部的程序须要写出、读入一个文件(狭义上所有货色都是文件)时,实际上操作的是虚构的文件并不会影响宿主零碎。在较新版本的 Windows 中,有一个叫做 Sandbox 的利用,点击后会弹出一个窗口,窗口外部是一个 Windows 零碎,这就是一个 Windows 的沙盒。 而容器则相似于沙盒的增强版,其容许通过配置有目的性地容许某些穿透操作(如将容器端口映射到宿主零碎、拜访宿主零碎的某个目录)。同时,也容许在容器中部署一个与宿主零碎类似但不同的操作系统(这里次要指能够诸如在 Arch Linux 应用 Ubuntu 镜像,然而如果是 Windows,其无奈间接应用 Linux 镜像,须要先应用 Hyper-V 虚构一个 Linux)。 所以,绝对于虚拟机,容器更为轻量级(只是替换子过程的零碎调用,而非模仿硬件且装置残缺的操作系统);绝对于沙盒,容器可操作性更多(能够有选择性地容许与宿主零碎进行交互)。因而也能够将沙盒了解为一种非凡的容器。这也就是 Docker 在开发中受到宽泛推崇的起因,它能够隔离出一个自定义环境、部署快、容许有选择地穿透。刚好满足开发和部署过程中容易遇到的环境不统一问题。 Docker 的分层Docker 在上述容器的根底上,还有额定的一些长处。在 Docker 中,操作是分层的。试想,你是一个前端工程师,你有两个我的项目须要开发——React 我的项目、Vue 我的项目。假如他们都运行于 Ubuntu,并且应用雷同版本的 NodeJS。如果应用下述的图中的链式关系,用户须要保护两份 Ubuntu 环境、两份 NodeJS 环境。而在 Docker 中,对于这些共有的内容,将会将其划分为公共的层。也即,他们都基于 Ubuntu 下的 NodeJS 镜像生成,而非从头开始生成。将会共用后面独特须要的局部。 目前很多镜像实际上都会应用 Ubuntu 作为操作系统,并且应用官网的一些环境作为开发环境。因而用户可能会应用很多的 Docker 镜像来部署本人的服务, 但实际上因为他们在底层共用了雷同镜像,因而空间占用近似于部署在物理机(只节约了局部 Docker 自身所占用的空间和资源) ...

October 30, 2020 · 3 min · jiezi

关于docker:docker-搭建redis主从复制

首先从dockerhub上搜寻redis而后行将docker pull到本地 docker pull redis ,待同步完镜像后。咱们须要对容器进行端口映射,以及文件映射,让redis读取本地的redis.conf文件。redis.conf问价能够去redis官网下载一份redis,而后提取。咱们 批改好redis.conf文件,并放到咱们映射的门路下,待容器启动就会加载。master节点批改bind,这个参数是用来绑定能够拜访该redis的ip地址。slave节点也是批改这个,而后还要批改replicaof masterip port 参数,masterip 就是master节点的IP,port是他的端口。而后就是运行docker镜像啦。docker run -v ~/workspace/redis/master/config/redis.conf:/usr/local/etc/redis/redis.conf -v ~/workspace/redis/master:/data -p 6379:6379 --name master redis redis-server /usr/local/etc/redis/redis.conf 参数 -v是将后面的宿主机的地址映射到容器中的门路。 -p 是将主机端口映射到容器端口。而后咱们批改容器映射到主机的端口。也就是-p。--name 是容器的名字。咱们启动容器。这是咱们的master节点。同样的,咱们批改启动容器的命令,启动另外两个redis节点。批改配置文件redis.conf 和 --name ,以及端口映射。这样就好了。然而我在搭建的时候遇到了如下的问题: 1:S 30 Oct 2020 00:24:28.379 * MASTER <-> REPLICA sync started1:S 30 Oct 2020 00:24:28.380 * Non blocking connect for SYNC fired the event.1:S 30 Oct 2020 00:24:28.380 * Master replied to PING, replication can continue...1:S 30 Oct 2020 00:24:28.380 * Partial resynchronization not possible (no cached master)1:S 30 Oct 2020 00:24:28.380 * Master is currently unable to PSYNC but should be in the future: -NOMASTERLINK Can't SYNC while not connected with my master输出docker inspect master,查看容器的信息; ...

October 30, 2020 · 1 min · jiezi

关于docker:CentOS7-安装-dockerawvs

网上查找了装置教程,间接装置胜利后awvs无奈运行扫描,不明起因,后又查找到文章说docker装置能够,于是进行了尝试,的确能够,感激大神。这里记录一下我遇到的问题。1、装置docker(不做介绍)2、pull拉取docker-awvs下载镜像 docker pull secfa/docker-awvs3、将docker的3443端口映射到物理机端口,我用的13443端口 docker run -it -d -p 13443:3443 secfa/docker-awvs4、 拜访服务器IP:端口进行拜访 awvs13 username: admin@admin.comawvs13 password: Admin123AWVS版本:13.0.200217097我不晓得为什么他人的文档能够间接服务器IP:端口进行拜访,反正我的是不行,查找了很多文档,最初配置docker代理拜访后能力失常拜访。创立文件夹 /etc/systemd/system/docker.service.d创立文件 /etc/systemd/system/docker.service.d/http-proxy.conf增加行:ip:port需更换成本人的 [Service]  Environment="HTTP_PROXY=http://ip:port/" Environment="HTTPS_PROXY=https://ip:port/"重启docker sudo systemctl daemon-reload sudo systemctl restart docker重启后从新执行步骤3胜利!

October 26, 2020 · 1 min · jiezi

关于docker:Docker安装运行Mysql-5731容器并修改数据库密码

一、装置Docker参见文章:https://blog.csdn.net/y153441... 二、拉取Mysql 5.7.31镜像docker pull mysql:5.7.31三、运行Mysql 5.7.31docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31参数解析:-d: 后盾运行容器,并返回容器ID--name myMysql: 为容器指定一个名称-p: 指定端口映射,格局为:主机(宿主)端口:容器端口-v: 绑定一个卷,主机的目录/data/mysql 映射到容器的 /var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456: 设置环境变量,明码设置为123456mysql:5.7.31:应用镜像mysql:5.7.31 四、批改数据库明码1.此时运行 docker ps 能够看到容器正在运行2.进入到容器命令 docker exec -it [容器ID] /bin/bash3.输出数据库账号密码命令 mysql -uroot -p4.进入界面后更改root明码(123456为我的新密码 ,此处明码由您决定) update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';5.刷新缓存 flush privileges;6.退出mysql exit7.而后重进mysql,用批改后的明码登录

October 25, 2020 · 1 min · jiezi

关于docker:docker部署禅道

0x01 装置通过禅道官网进行docker镜像的装置https://www.zentao.net/book/z...docker辅助查看命令 docker image ls //查看所有docker镜像docker network ls //查看容器网路docker ps //查看容器是否运行胜利

October 23, 2020 · 1 min · jiezi

关于docker:Rancher正式入驻Gitee进一步提升国内用户体验

随着越来越多的IT部门寻求利用云来实现翻新并推动数字化转型,Kubernetes 已迅速成为企业 IT 策略的外围支柱。Rancher 自成立以来,便是开源软件和容器治理解决方案的领导者,历经数年的倒退,现已成为业界利用最为宽泛的开源 Kubernetes 治理平台。 项目名称: Rancher 我的项目作者: Rancher 开源许可协定: Apache-2.0 我的项目地址:https://gitee.com/rancher/rancher 我的项目简介Rancher 是一个开源的企业级多集群 Kubernetes 治理平台,实现了 Kubernetes 集群在混合云+本地数据中心的集中部署与治理,因其操作体验的直观、极简备受用户青眼。 Rancher 为采纳容器的团队提供了残缺的软件堆栈,解决了跨任何基础设施架构治理多个 Kubernetes 集群的运维和平安挑战,同时为 DevOps 团队提供了用于运行容器化工作负载的集成工具。 我的项目架构Rancher Server 的架构由认证代理(Authentication Proxy)、Rancher API Server、集群控制器(Cluster Controller)、etcd 节点和集群 Agent(Cluster Agent) 组成。除了集群 Agent 以外,其余组件都部署在 Rancher Server 中。 我的项目特点能够在两分钟内装置 Kubernetes一键启动利用(90 个风行的 Docker 利用)部署和治理 Docker 更容易全面的生产级容器治理平台能够在生产环境上疾速部署容器弱小的主动部署和经营容器技术模块化基础设施服务丰盛的编排工具Rancher 反对多种认证机制Rancher 的劣势是什么对立的多集群应用程序治理平台Rancher不仅能够集中管理部署在任何基础设施上的Kubernetes集群,还能够履行对立的集中式身份验证和访问控制。因为无奈确定资源运行的地位,您能够轻松地在不同的基础设施之间调用集群,并在它们之间进行资源迁徙。 为初学者和高级用户设计通过 Rancher,开发者无需放心编写 YAML 的问题,便可立刻从 Kubernetes 中收益,开发者能够疾速在生产环境中创立应用程序并将它们连贯在一起。在开始之前,开发者甚至不须要理解 Kubernetes 的任何常识。 100%齐全开源Rancher 在有着衰弱商业模式的同时,依然动摇地拥戴开源,为寰球的开发者齐全凋谢我的项目代码。目前 Rancher 也曾经入驻 Gitee,欢送更多国内的开发者们参加 Rancher 开源社区的奉献。 ...

October 23, 2020 · 1 min · jiezi

关于docker:docker学习

docker中有这样几个概念: dockerfileimagecontainer实际上你能够简略的把image了解为可执行程序,container就是运行起来的过程。 那么写程序须要源代码,那么“写”image就须要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。 因而咱们只须要在dockerfile中指定须要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就能够运行这个image了,这就是docker run命令,image运行起来后就是docker container。

October 19, 2020 · 1 min · jiezi

关于docker:docker基础使用命令手册和操作附带说明

装置根本配置装置办法1-脚本装置在测试或开发环境中 Docker 官网为了简化装置流程,提供了一套便捷的装置脚本,CentOS零碎上能够应用这套脚本装置: # 在理论过程中get-docker.sh文件可能curl很慢。能够浏览器间接关上get.docker.com,将期复制下来,再创立get-docker.sh,将复制的内容保留进去。$ curl -fsSL get.docker.com -o get-docker.sh$ sudo sh get-docker.sh --mirror Aliyun办法2-一般命令行装置# 1、更新update到最新的版本~ yum update# 2、卸载老版本docker~ yum remove docker docker-common docker-selinux docker-engine# 3、装置须要的软件包~ yum install -y yum-utils device-mapper-persistent-data lvm2# 4、设置yum源~ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 5、查看docker版本~ yum list docker-ce --showduplicates|sort -r# 6、装置docker~ yum install docker-ce-18.03.1.ce -y# 7、启动docker~ systemctl start docker# 8、退出开机自启~ systemctl enable docker# 9、配置国内镜像,集体感觉国内镜像用专用的阿里云比拟好。可看下方阿里云镜像源获取~ vi /etc/docker/daemon.json{"registry-mirrors": ["https://cr.console.aliyun.com/"]}~ ps -aux | grep docker设置阿里云镜像多说无益,间接截图 dockerhub账户关联这个有点相似于composer的仓库地址就是用来存储咱们散会人员的镜像地址的;官网:https://hub.docker.com本人注册一个账号,这个过程我就跳过。 ~ docker loginUsername: haokeed(对应dockerhub的账号)Password:Login Successded# 异样!# 在下面执行的代码可能呈现如下异样 rror response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifest# 这个问题的异样次要是# 1. 解析ip不可用# 2. 是因为dns域名没有解析的起因;# 解决:~ yum install bind-utils~ dig @114.114.114.114 registry-1.docker.io; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @114.114.114.114 registry-1.docker.io; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57840;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 512;; QUESTION SECTION:;registry-1.docker.io. IN A;; ANSWER SECTION:registry-1.docker.io. 33 IN A 34.205.88.205registry-1.docker.io. 33 IN A 35.169.133.189registry-1.docker.io. 33 IN A 34.202.247.184registry-1.docker.io. 33 IN A 3.224.11.4registry-1.docker.io. 33 IN A 3.82.34.201registry-1.docker.io. 33 IN A 34.195.36.112registry-1.docker.io. 33 IN A 3.221.133.86registry-1.docker.io. 33 IN A 3.224.75.242;; Query time: 26 msec;; SERVER: 114.114.114.114#53(114.114.114.114);; WHEN: 三 4月 22 04:41:31 CST 2020;; MSG SIZE rcvd: 177~ vi /etc/hosts34.205.88.205 registry-1.docker.io~ systemctl restart docker登入胜利之后,应用push命令就能够上传镜像,如果不指定tag则本地的镜像都会上传。如下实例:留神docker hub的push要求是如下格局 ...

October 19, 2020 · 3 min · jiezi

关于docker:10-个冷门但又非常实用的-Docker-使用技巧

在平时的工作中,docker 接触得很多,除了常常应用的 docker run ,docker stop 等命令,docker 还有很多非常有用然而却不常常应用的命令,上面就来总结一下: 1. docker top这个命令是用来查看一个容器外面的过程信息的,比方你想查看一个 nginx 容器外面有几个 nginx 过程的时候,就能够这么做: docker top 3b307a09d20dUID      PID    PPID    C    STIME  TTY    TIME       CMDroot     805    787     0    Jul13   ?   00:00:00  nginx: master process nginx -g daemon off;systemd+ 941     805     0   Jul13    ?   00:03:18  nginx: worker process2. docker load && docker save我个别应用这两个命令去下载打包 Kubernetes 的镜像,因为你晓得的国内的网速并不像国外那么快。 docker save 能够把一个镜像保留到 tar 文件中,你能够这么做: ~ docker save registry:2.7.1 >registry-2.7.1.tar#同时 docker load 能够把镜像从 tar 文件导入到 docker 中~ docker load < registry-2.7.1.tar3. docker search这个命令能够帮忙你在命令行中不便的搜寻 DockerHub 中的镜像,比方: ~ docker search nginxNAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATEDnginx                              Official build of Nginx.                        13519               [OK]jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1846                                    [OK]richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   780                                     [OK]linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   123bitnami/nginx                      Bitnami nginx Docker Image                      87                                      [OK]tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   85                                      [OK]jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   73alfg/nginx-rtmp                    NGINX, nginx-rtmp-module and FFmpeg from sou…   71                                      [OK]nginxdemos/hello                   NGINX webserver that serves a simple page co…   57                                      [OK]jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        53                                      [OK]nginx/nginx-ingress                NGINX Ingress Controller for Kubernetes         37......当然这个性能在国内可能不会特地好用,因为...... 4. docker events这个命令能够帮忙你实时获取 docker 的各种事件信息,比方创立了一个容器什么的。 ~ docker events2020-07-28T21:28:46.000403018+08:00 image load sha256:432bf69f0427b52cad10897342eaf23521b7d973566354118e9a59c4d31b5fae (name=sha256:432bf69f0427b52cad10897342eaf23521b7d973566354118e9a59c4d31b5fae)5. docker update当你 docker run 了之后却发现外面有一些参数并不是你想要的状态比方你设置的 nginx 容器 cpu 或者内存太小,这个时候你就能够应用 docker update 去批改这些参数。 ~ docker update nginx --cpus 26. docker history当你批改了一个镜像,然而遗记了每一层的批改命令,或者你想查看一个镜像是怎么构建的时候就能够应用这个命令,比方: ~ docker history  traefik:v2.1.6IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT5212a87ddaba        5 months ago        /bin/sh -c #(nop)  LABEL org.opencontainers.…   0B<missing>           5 months ago        /bin/sh -c #(nop)  CMD ["traefik"]              0B<missing>           5 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/entrypoint.…   0B<missing>           5 months ago        /bin/sh -c #(nop)  EXPOSE 80                    0B<missing>           5 months ago        /bin/sh -c #(nop) COPY file:59a219a1fb7a9dc8…   419B<missing>           5 months ago        /bin/sh -c set -ex;  apkArch="$(apk --print-…   52.9MB<missing>           5 months ago        /bin/sh -c apk --no-cache add ca-certificate…   1.85MB<missing>           6 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B<missing>           6 months ago        /bin/sh -c #(nop) ADD file:a1906f14a4e217a49…   4.81MB7. docker wait这个命令能够查看容器的退出状态,比方: ~ docker wait 7f7f0522a7d00这样你就能够晓得这个容器是失常退出的还是异样退出的了。 8. docker pause && docker unpause当你运行了一个容器然而想要暂停它运行的时候,你就能够应用这个命令。 ...

October 18, 2020 · 1 min · jiezi

关于docker:会用Docker的人都别装了这多简单呐

学术又官网的说法Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的Linux机器或Windows 机器上,也能够实现虚拟化,容器是齐全应用沙箱机制,相互之间不会有任何接口。 没用过的人能看懂这段话? 用过的人为什么要看这段话?还是要本人入手。 试用完感触试用了一下,就是下载运行官网制作的MySQL镜像,没自建镜像仓库,没制作镜像,用完感觉性能像是yum外加微型vmware。 docker就是装置自带ENV软件包的yum右边的MySQL启动后,和服务器环境相互作用,像把一个新生儿放在了混合病房。 左边的MySQL启动后,自带一套环境变量,和服务器环境互不影响,像把一个新生儿放进了保温箱,保温箱有本人的温度湿度氧气,保温箱再放进病房里。 像yum咱们想装置某个软件,间接yum install 软件,如果yum源服务器有安装包,主动就装置上了,而后启动软件开始工作。 docker形式相似的,咱们想应用某个软件并且要求它以docker形式运行,那么先要docker search命令看docker仓库(官网仓库有大量软件镜像能够间接应用)是否有该软件的镜像, 有的话先将镜像pull到本地,而后run镜像,软件就开始工作了。这些镜像具备Build once,Run anyWhere的劣势,和java机制很像。run起来的镜像被称作容器container,查看镜像用docker images命令,查看容器用docker ps命令。 像vmware微型vmware是指,docker启动某个软件的镜像后,就相当于启动的这个软件,不同的是这个软件好像运行在一个和操作系统隔离的环境中,这个环境有本人的环境变量,并且它的环境变量不影响操作系统,只对本镜像内的软件无效,就如同每个软件都运行在各自的vmware虚拟机中,虚拟机之间互不影响。例如同一操作系统中有docker MySQL(docker启动的MySQL镜像)和docker nginx两个过程在工作,两个过程齐全互不干涉,MySQL运行在给它配置好的环境里,nginx运行在给它配置好的环境里,一个的死活和变动和另一个无关,也和操作系统无关。 说容易,我做一遍试试装置Docker下载libcgroup搜寻“libcgroup rpm” 。 RedHat零碎就抉择centos的安装包,下载 libcgroup-0.41-21.el7.x86_64.rpm。ftp上传到Redhat服务器。 装置libcgroup[root@bogon dockerab]# rpm -ivh libcgroup-0.41-21.el7.x86_64.rpm Preparing... ################################# [100%]Updating / installing...1:libcgroup-0.41-21.el7 ################################# [100%]下载docker包[root@basicserver dockertest]# wget https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm--2020-06-17 08:34:52-- https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpmResolving get.docker.com... 99.86.193.96, 99.86.193.12, 99.86.193.128, ...Connecting to get.docker.com|99.86.193.96|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 4762280 (4.5M) [binary/octet-stream]Saving to: docker-engine-1.7.1-1.el6.x86_64.rpm16% [============> ] 801,777 35.5K/s eta 1m 49s 装置docker[root@basicserver dockertest]# rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpmPreparing... ########################################### [100%] 1:docker-engine ########################################### [100%]启动docker服务[root@basicserver dockertest]# service docker startStarting cgconfig service: [ OK ]Starting docker: [ OK ]起个MySQLDocker启动了,相当于有了yum命令而已。yum当然要用来装置各种软件啦。 ...

October 18, 2020 · 2 min · jiezi

关于docker:当-Docker-容器无法正常启动时如何修改配置文件

在容器无奈失常启动的状况下,如何批改其配置文件? 问题形容:因为谬误的配置文件导致容器运行异样,无奈失常启动,通常状况下只有进入容器能力批改配置文件,所以在不能进入容器的状况下该怎么办呢? 这种状况下,有两种形式去批改: Docker 容器的配置文件个别在 /var/lib/docker/overlay/目录下,能够找到该目录下对应的配置文件进行批改。把容器中的配置文件复制到主机中,批改完之后,再挪动到容器中。形式一查问日志docker logs <容器名称/容器id>ERROR: mysqld failed while attempting to check configcommand was: "mysqld --verbose --help"2020-09-03T12:15:54.644699Z 0 [ERROR] unknown variable 'realy-log=slave-relay-bin'2020-09-03T12:15:54.650119Z 0 [ERROR] Aborting因为异样日志能够得悉是因为我将relay-log 写成了 realy 导致容器无奈失常启动。 查找文件$ find / -name mysqld.cnf/var/lib/docker/overlay2/02e1644bc1a4dc1adc9a0300e1815f364416570d69b715fb3b7de0a06cf0c495/diff/etc/mysql/mysql.conf.d/mysqld.cnf/var/lib/docker/overlay2/02e1644bc1a4dc1adc9a0300e1815f364416570d69b715fb3b7de0a06cf0c495/merged/etc/mysql/mysql.conf.d/mysqld.cnf/var/lib/docker/overlay2/4f128d7fb1200f722b0d2cfe3606149fe72987a7a16bc78551a2b1fe6c6c6572/diff/etc/mysql/mysql.conf.d/mysqld.cnf/var/lib/docker/overlay2/a68f1af4adf982b037f1bd37d61082fde1fa2b0e26ea0e2fe146edcb69b198ea/diff/etc/mysql/mysql.conf.d/mysqld.cnf这里可能会呈现多个配置文件,这是因为每一次重启Mysql 容器都会保留一个配置文件,所以实践上,间接批改第一个配置文件,就是以后Mysql 所应用的配置文件。 批改配置文件重启容器即可。形式二如果第一种形式没失效,那能够尝试第二种形式。 复制容器中的配置文件到主机:# 语法:docker cp <容器名称/容器id>:<配置文件在容器中的门路> <须要复制到主机的门路>$ docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf ~/mysqld.cnf批改主机中的配置文件将该配置文件mv 到容器中:# 语法:docker cp <配置文件在主机中的门路> <容器名称/容器id>:<配置文件在容器中的门路>$ docker cp ~/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf 重启配置文件即可。总结:两种形式均能够无效解决上述问题,当然这类形式仅实用于容器是因谬误的配置文件导致无奈失常启动的状况。 参考链接Docker批改无奈启动的容器的配置文件

October 16, 2020 · 1 min · jiezi

关于docker:在企业的降本增效诉求下Cube如何助力科盾业务容器化一步到位

前言 以Docker为代表的容器技术缩短了企业应用从开发、构建到公布、运行的整个生命周期。Gartner揣测到2022年将会有75%的全球化企业将在生产中应用容器化的利用(以后约为30%)。因为Docker往往难以独立撑持起大规模容器化部署,因而诞生了Kubernetes等容器编排工具,解决了大规模容器的组织和治理难题。 但事实上,Kubernetes的应用体系还是非常复杂的,对于企业的开发运维人员而言,须要具备肯定的网络、存储、零碎等方面的技术能力。同时在Kubernetes 集群的部署过程中,也须要面临多节点集群搭建保护、网络和存储的抉择配置等难题。上述问题是企业在大规模利用的容器化部署和容器编排中不可避免的,科盾亦面临同样的窘境。 科盾为什么抉择容器化? 深圳市科盾科技有限公司(下文简称科盾)是全国当先的互联网大数据服务商,是一家专一于网络空间治理畛域科研及利用开发的国家高新技术企业,致力于为网安、网信、政府及大中型企业提供大数据互联网舆情监测、网络情报开掘和企业商情监测等服务,以便及时、精准、全面把握互联网舆情信息,疾速化解舆情危机。同时全面获取网络情报线索和市场竞争情报,为政府机构打击网络违法犯罪、企业进步市场竞争力提供高科技利器。舆情剖析的数据起源简直笼罩所有互联网平台的公开信息,包含常见的资讯网站和社交媒体、自媒体、短视频等平台。因而构建一套残缺精准的舆情监测零碎,不仅须要弱小的数据采集能力,还须要具备弱小的数据分析、价值开掘能力,给底层的IT架构带来微小的技术挑战。 在实现微服务及容器化部署之前,科盾是间接将利用部署在服务器上的,开发运维人员破费大量工夫在开发、测试和生产环境的配置上,还要解决日常呈现的网络、日志、监控等问题。随着公司业务的扩大,整个零碎越来越庞杂,且依赖简单、数据没有隔离、逻辑反复,于是科盾将其业务进行了微服务架构的革新。 科盾采纳了 SpringCloud 微服务体系及 Eureka 服务注册核心,将整体业务架构分为任务调度、数据采集、数据存储、数据处理等多个环节,其整体业务架构图如下: 任务调度零碎依据注册的数据采集节点信息,调度无效的采集指标给数据采集节点,数据采集节点依据算法对指标解决后,将数据后果传输依据其内容类型,传输给基于 MySQL、MongoDB、HBase、Elasticsearch、对象存储等服务的存储队列,再由解决链进行数据荡涤、资源文件拆分下载、模型预测、各个子系统业务标签、数据推送服务等。 在微服务阶段,随着利用数量的减少,一次公布往往波及了多个利用,这对团队的自动化运维程度提出了更高的要求。于是,团队开始对利用进行容器化革新。各个模块打包封装成镜像,就能够在任意平台上运行,轻松实现业务的迁徙和扩大;无需反复配置环境,配合Gitlab就能够十分不便的进行继续交付和部署,还能够对利用之间进行隔离。 Cube比容器更快更轻 应用容器后的确解决了科盾先前面临的交付效率、运维老本和环境一致性等问题,但自建Docker服务仍存在一些问题,例如:• 需购买固定资源规格的主机,老本投入比拟高;• 只能通过主机进行挂载,操作繁琐;• 只反对繁多IP,绑定额定的IP非常繁琐;• 遇到故障时须要额定装置管制调度零碎进行重启;• 只能通过namespace和cgroup进行弱隔离;• 须要应用docker命令进行创立,学习老本较高。 通过UCloud容器实例Cube,用户只须要提供打包好的容器镜像,即可实现在数秒之内,实现批量部署容器化利用,而不须要事后购买主机或K8S集群,并且只需为容器理论运行耗费的资源付费。 此外Cube还具备以下劣势:• 网络上应用 UCloud VPC网络进行内网服务,与 UCloud 其余云产品买通;• 存储间接应用云盘进行挂载应用,读写性能高,操作便捷;• Cube管制调度零碎为容器主动重启,自愈能力强;• UCloud海量资源撑持,超大集群防止繁多节点故障;• 应用Firecracker虚拟化技术实现虚拟机级别的强隔离。 基于Cube的劣势,科盾已将其数据采集节点迁徙到了Cube,日志收集计划由原来的宿主机本地映射存取,改为发送到Kafka队列。因为容器化利用的特质,科盾无需对业务进行革新,间接采纳原有镜像即可在 Cube 上部署利用,实现平滑迁徙。而 Kafka 的利用,也晋升了日志收集、治理的效率。 Cube 帮忙科盾实现了业务的疾速回滚和横向扩大。后续,科盾打算引入K8S集群,并将更多数据处理链等上的服务迁徙至Cube。 总结 科盾的业务架构从传统的服务器部署模式到微服务架构、容器化革新,再到抉择UCloud容器实例服务Cube的迁徙,是企业升高资源老本、晋升开发运维效率的摸索之路,也贴合云原生技术崛起的脉络。无论是容器Docker、Kubernetes还是Serverless架构的Cube,最终都会回归到为企业降本增效的外围价值。 ** ** 如果您对Cube产品感兴趣,欢送扫码退出Cube测试交换群! https://u.wechat.com/ELATXrQmIDI2cCgzioMgl88 (二维码自动识别) 流动预报 想理解无关Cube产品背地的技术架构以及无服务器化容器的技术实现细节,欢送关注10月23日UCloud TIC大会技术论坛直播(点击浏览原文查看详情),届时将由UCloud容器云研发负责人张苗磊带来精彩分享,敬请关注!

October 16, 2020 · 1 min · jiezi

关于docker:Kubernetes一-kubernetes-简介

此文章为学习了张磊《深刻刨析Kubernetes》的总结浏览此文章须要有肯定的docker和linux根底一.什么是kubernetes官网中文文档:https://www.kubernetes.org.cn/docs kubernetes能做什么? 编排调度容器云集群治理提供运维能力:网关、程度扩大、监控、备份、灾备等(初学简化概念,实操后再精密补充) 二.Kubernetes组成 master:管制节点 kube-apiserver:负责API服务kube-scheduler:负责调度kube-controller-manager:负责容器编排etcd:负责集群的长久化数据存储node:计算节点 Networkingkubeletcontainer runtimevolume plugindevice pluginlinux oskubelet:是计算节点的外围局部,次要负责同容器运行时(比方Docker我的项目)打交道。交互依赖CRI(container runtime interface)的近程调用接口,这个接口定义了容器运行时的各项外围操作,比方一个容器所须要的所有参数。所以只有这个镜像是规范的容器镜像,就能够通过CRI接入到Kubernetes我的项目中。OCI:容器运行时,个别通过OCI这个容器运行时标准同底层的linux操作系统进行交互,即把CRI的申请转换成对linux零碎的调用(Namespace Cgroups)。gRPC:kubelet通过该协定于Device Plugin的插件进行交互,是kubernetes治理GPU等宿主机物理设施的次要组件。

October 14, 2020 · 1 min · jiezi

关于docker:k8s-常用命令qbit

帮忙kubectl help版本信息[root@host ~]# kubectl versionClient Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:52:00Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}显示集群信息(查看 master 节点)root@host ~]# kubectl cluster-info Kubernetes master is running at https://192.168.31.27:6443KubeDNS is running at https://192.168.31.27:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy查看节点列表[root@host68 ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONhost68 Ready master 131d v1.18.3host69 Ready <none> 70d v1.18.6host70 Ready <none> 38d v1.18.3host71 Ready <none> 70d v1.18.6host72 Ready <none> 66d v1.18.3host73 Ready <none> 66d v1.18.3host74 Ready <none> 126d v1.18.3查看所有 pod 和 namespace[root@vip-068 ~]# kubectl get pods --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEdefault gitlab-86hgh 1/1 Running 0 124ddefault mysql-qqghr 1/1 Running 0 129des es-46tml 1/1 Running 0 37des es-5twv5 1/1 Running 1 37des es-g4tnp 1/1 Running 0 29des es-vx9r9 1/1 Running 0 30des es-xj8kk 1/1 Running 0 27d列出所有 node 和 podkubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName --all-namespaces查看某个 pod 外面的容器[root@host68 ~]# kubectl -n es get pod es-46tml -o jsonpath="{.spec['containers','initContainers'][*].name}"es# 或者kubectl -n es describe pod es-46tml列出某个容器外面的目录# 命令kubectl -n <namespace> -c <container> exec <pod_name> -- ls -la /# 示例kubectl -n es -c es exec es-46tml -- ls -la /usr/share/elasticsearch/config[root@host68 ~]# kubectl -n es -c es exec es-46tml -- ls -la /usr/share/elasticsearch/configtotal 1360drwxrwxr-x 1 elasticsearch root 4096 Oct 12 13:28 .drwxrwxr-x 1 elasticsearch root 4096 Sep 5 06:03 ..-rw-rw---- 1 elasticsearch root 199 Sep 5 06:03 elasticsearch.keystore-rw-rw---- 1 elasticsearch root 53 May 28 16:33 elasticsearch.yml-rw-rw---- 1 elasticsearch root 2301 May 28 16:28 jvm.optionsdrwxrwxr-x 2 elasticsearch root 4096 May 28 16:31 jvm.options.d-rw-rw---- 1 elasticsearch root 7860 May 28 16:33 log4j2.properties-rw-rw---- 1 elasticsearch root 473 May 28 16:32 role_mapping.yml-rw-rw---- 1 elasticsearch root 197 May 28 16:32 roles.yml-rw-r--r-- 1 root root 1345763 Oct 12 13:28 synonym.txt-rw-rw---- 1 elasticsearch root 0 May 28 16:32 users-rw-rw---- 1 elasticsearch root 0 May 28 16:32 users_roles删除容器外面的文件kubectl -n es -c es exec es-46tml -- rm /usr/share/elasticsearch/config/synonym.txt创立目录kubectl -n es -c es exec es-46tml -- mkdir /usr/share/elasticsearch/config/analysis拷贝文件到容器目录# 拷贝kubectl -n es -c es cp synonym.txt es-46tml:/usr/share/elasticsearch/config/analysis# 查看[root@host68 test]# kubectl -n es -c es exec es-46tml -- ls -la /usr/share/elasticsearch/config/analysistotal 1324drwxr-xr-x 2 root root 4096 Oct 13 05:57 .drwxrwxr-x 1 elasticsearch root 4096 Oct 13 05:56 ..-rw-r--r-- 1 root root 1345763 Oct 13 05:57 synonym.txtqbit snap

October 13, 2020 · 2 min · jiezi

关于docker:Docker第五部分15个-Docker-命令

原文作者:Jeff Hale原文地址:https://towardsdatascience.com/15-docker-commands-you-should-know-970ea5203421 翻译:付新圆 在这篇文章中,咱们将学习15个Dockers CLI命令。如果你还不理解Docker,请查看这个系列的其余局部进行学习,Docker概念,生态系统,Dockerfile,Docker映像。 Docker 命令约有十亿个(给或承受十亿个)。Docker 文档范畴很宽泛,但当您刚入门时,文档会十分宏大让你手足无措。在这篇文章中,我将重点介绍运行Docker的要害命令。 图:水果主题 之前的文章咱们都把文章的主题隐喻成食物,这里让咱们应用水果主题。蔬菜在对于减肥的文章中提供了养分。当初,美味的水果将为咱们提供养分,因为咱们学习的是要害 Docker 命令。 概述回忆一下,Docker 映像是由 Dockerfile +任何必要的依赖项组成的,还要记得 Docker 容器是一个 Docker 映像。若要应用 Docker 命令,首先须要晓得您解决的是映像还是容器。 Docker 映像要么存在,要么不存在;Docker 容器要么存在,要么不存在;存在的 Docker 容器要么正在运行,要么未运行。当您晓得正在解决什么,就能够找到适宜该工作的命令。 共同点以下是对于Docker命令须要理解的一些信息: Docker CLI 治理命令从Docker开始,而后是空间,而后是治理类别,而后是空间,而后是命令。例如,dockerdocker container stop进行一个容器。援用特定容器或图像的命令须要该容器或映像的名称或 ID。例如, docker container run my_app 是生成和运行名为 "my_app"的命令。在整个示例中,我将应用 my_container  这个名称来示意泛型容器,my_image,my_tag等等也一样。 如果实用,我将独自提供命令,而后应用公共标记。后面有两个破折号的标记是该标记的全名。具备一个破折号的标记是残缺标记名称的快捷方式。例如, -p是--port缩写的标记。 图:标记提供命令选项 指标是将这些命令和标记留在您的记忆中,并作为本指南的参考。本指南实用于Linux和Docker Engine 18.09.1版和API 1.39版。 首先,咱们将查看容器的命令,而后再查看图像的命令。下一篇文章将介绍卷。上面是15个命令的列表 – 加上3个附加命令! 容器应用docker container my_command create— 从图像创立容器 start— 启动现有容器 run—创立新容器并启动它 ls— 列出正在运行的容器 inspect— 查看无关容器的大量信息 logs— 打印日志 ...

October 10, 2020 · 2 min · jiezi

关于docker:使用Dockerfile构建自己的tomcat镜像

1、筹备创立好本人的目录[root@paperchen paperchen]# pwd/home/paperchen[root@paperchen paperchen]# mkdir -p build/tomcat[root@paperchen tomcat]# pwd/home/paperchen/build/tomcat2、在上述pwd的目录,即tomcat目录中创立文件等touch readme.txt vim Dockerfile # vim DockerfileFROM centosMAINTAINER paperchen<609120776@qq.com># 把宿主机以后上下文的readme.txt拷贝到容器/usr/local/门路下COPY readme.txt /usr/local/cincontainer.txt# 把java和tomcat增加到容器中(会主动解压)ADD jdk-8u201-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.24.tar.gz /usr/local/# 装置vim编辑器RUN yum -y install vim# 设置启动拜访的初始地位,即工作目录,登录落脚点ENV MYPATH /usr/localWORKDIR $MYPATH# 配置java和tomcat的环境变量ENV JAVA_HOME /usr/local/jdk1.8.0_201ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINE_HOME /usr/local/apache-tomcat-9.0.24ENV CATALINE_BASE /usr/local/apache-tomcat-9.0.24ENV PATH $PATH:$JAVA_HOME/bin:$CATALINE_HOME/lib:$CATALINE_HOME/binEXPOSE 8080# 容器启动后要执行的命令CMD /usr/local/apache-tomcat-9.0.24/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.24/bin/logs/catalina.out3、以后tomcat目录下的所有文件内容 [root@paperchen tomcat]# ls -lltotal 197996-rw-r--r-- 1 root root 10914435 Oct 6 08:46 apache-tomcat-9.0.24.tar.gz-rw-r--r-- 1 root root 646 Oct 6 09:20 Dockerfile-rw-r--r-- 1 root root 191817140 Oct 6 09:06 jdk-8u201-linux-x64.tar.gz-rw-r--r-- 1 root root 0 Oct 6 08:44 readme.txt4、在tomcat下构建镜像、查看镜像当dockerfile文件间接命名为Dockerfile,且在同一目录下时能够省略-f dockerfile文件门路 ...

October 6, 2020 · 2 min · jiezi

关于docker:玩转dnmp之MySQL实现主从复制操作

文章回顾后面几篇文章别离介绍了dnmp的相干文章,明天来分享一篇无关MySQL主从复制的文章,次要是介绍环境的搭建,具体配置在前面文章继续更新。 应用dnmp搭建一套集成开发环境2.玩转dnmp之自定义PHP容器 3.玩转dnmp之端口配置 4.玩转dnmp之自定义容器 批改环境配置批改环境配置,咱们要波及到两个配置文件,一个是.env文件,一个是docker-compose.yml文件。 批改.env文件找到MySQL5的配置信息,将该配置信息复制一份,批改一下端口号和配置文件。批改端口切忌不要和存在映射的端口统一,防止抵触,导致容器创立失败。 批改docker-compose.yml文件。找到MySQL5的文件信息,将.env对应的配置信息修到.yml文件即可。 启动容器启动容器,应用上面的命令docker-compose up容器就主动创立胜利了。 该命令必须在docker-compose.yml目录上面执行,否则是找不到该文件的。测试容器测试容器,咱们间接应用docker ps 即可查看以后正在运行的容器。呈现如下截图信息,即示意容器出于失常运行的状态了。

October 5, 2020 · 1 min · jiezi

关于docker:利用DockerHub在Centos77环境下部署Nginx反向代理GunicornFlask独立架构

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10零碎下利用Docker部署Gunicorn+Flask打造独立镜像,是在Win10简略玩了一下Docker的镜像打包,属实玩票,娱乐属性较高。要是想真刀真枪的在生产环境部署还得是Centos。 本次应用Nginx反向代理Flask服务,为什么要加一层Nginx呢?因为Nginx能够间接解决动态文件申请而不必通过应用服务器,防止占用贵重的运算资源,并且能够缓存动态资源,使拜访动态资源的速度无效进步。同时它能够排汇一些刹时的高并发申请,让Nginx先放弃住连贯(缓存http申请),而后后端缓缓消化掉这些并发。当然了,最重要的一点就是Nginx能够提供负载平衡策略,这样咱们的应用服务就能够横向扩大,分担压力了。 大体架构如下: 首先出场的是贵为Docker三大外围之一的DockerHub(仓库),咱们能够将打包好的镜像收费push到下面,就这样就能够随时pull本人的镜像,注册地址:https://hub.docker.com/ 激活账号当前,创立仓库,这一步和github创立代码仓库差不太多。 填写仓库信息具体为仓库名称、形容以及是否公开或者公有。 创立胜利之后,它就会呈现在镜像列表中 此时咱们须要对本地的镜像重命名,这里重命名为zcxey2911/myflask。因为要与dockerhub上的仓库对应。如果名称不对应是无奈将本地镜像push到线上仓库中。 docker tag myflask zcxey2911/myflask 之后在命令行输出命令 docker login用DockerHub的账号和明码登录 登录胜利之后,用命令把本地镜像push到hub中 docker push zcxey2911/myflask留神这里的镜像名称必须和hub中的仓库名称统一,否则将会抛出谬误。 上传胜利后,就能够在DockerHub中看到它了,此时就能随便pull操作了 前置操作曾经结束,此时,登录你的云服务器,这里以百度云的Centos7.7为例子,进入服务器后装置Docker服务 #降级yum sudo yum update #卸载旧版本docker sudo yum remove docker docker-common docker-selinux docker-engine #装置依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #设置源 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum makecache fast #装置docker sudo yum install docker-ce #启动服务 sudo systemctl start docker装置实现后键入 docker -v ...

September 30, 2020 · 1 min · jiezi

关于docker:Docker容器网络实现篇

后面介绍了:Docker容器网络-根底篇 前文说到容器网络对Linux虚拟化技术的依赖,这一篇章咱们将一探到底,看看Docker到底是怎么做的。通常,Linux容器的网络是被隔离在它本人的Network Namespace中,其中就包含:网卡(Network Interface)、回环设施(Loopback Device)、路由表(Routing Table)和iptables规定。对于一个过程来说,这些因素,就形成了它发动和响应网络申请的根本环境。 管中窥豹咱们在执行docker run -d --name xxx之后,进入容器外部: ## docker ps 可查看所有docker## 进入容器docker exec -it 228ae947b20e /bin/bash并执行 ifconfig: $ ifconfigeth0 Link encap:Ethernet HWaddr 22:A4:C8:79:DD:1A inet addr:192.168.65.28 Bcast:咱们看到一张叫eth0的网卡,它正是一个Veth Pair设施在容器的这一端。 咱们再通过 route 查看该容器的路由表: $ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use If咱们能够看到这个eth0是这个容器的默认路由设施。咱们也能够通过第二条路由规定,看到所有对 169.254.1.1/16 网段的申请都会交由eth0来解决。 而Veth Pair 设施的另一端,则在宿主机上,咱们同样也能够通过查看宿主机的网络设备来查看它: $ ifconfig......eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.241.192 netmask 255.255.240.0 broadcast 172.16.255.255 ether 00:16:3e:0a:f3:75 txqueuelen 1000 (Ethernet) RX packets 3168620550 bytes 727592674740 (677.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2937180637 bytes 8661914052727 (7.8 TiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0......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:16:58:92:43 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......vethd08be47: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 16:37:8d:fe:36:eb txqueuelen 0 (Ethernet) RX packets 193 bytes 22658 (22.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 134 bytes 23655 (23.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0......在宿主机上,容器对应的Veth Pair设施是一张虚构网卡,咱们再用brctl show命令查看网桥: ...

September 30, 2020 · 2 min · jiezi

关于docker:基于Docker在Win10平台搭建Ruby-on-Rails-60框架开发环境

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_170 2020年,“非驰名Web框架”--Ruby on Rails曾经15岁了。在往年,Rails 6.0趋于欠缺,除了拿掉厌恶的Jquery,Webpacker 也成为默认前端打包计划,Sprockets 开始软着陆,将来很可能会和Jquery一样被彻底废除,这就是历史的过程。 因为历史起因,自身就由Ruby撰写的HomeBrew在Mac os零碎上大行其道,所以大部分Rails程序员的主力电脑都是Mac book pro,而应用Windows零碎的用户就没那么好运了,比方Rails 6.0开始启用Webpacker,这就须要用户装置yarn,由此带来一系列的连锁反应,还有令人失望的Win10零碎下的CoffeeScript问题,这也是Rails包含Jekyll时常令人诟病因素之一:搭个环境都这么吃力,我为啥不必Django、Laravel亦或者是Springboot呢?为什么非得受这份罪呢?因为.......酷爱,本次咱们应用Docker来简化Rails环境的搭建,让它可能在各个操作系统下做到无缝开发。 当然了,第一步还是装置Docker,没有装置的敌人请参照:win10零碎下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑)。 而后在电脑内建设一个rails我的项目的目录 mkdir myr cd myr第三步,拉取根底镜像,该镜像内置了ruby2.5.1和node11为咱们装置Rails6.0打好根底 docker pull starefossen/ruby-node拉取镜像胜利后,启动容器并且进入命令行,记住用挂载命令把当前目录共享到Docker容器外部,不会设置共享文件夹的同学能够参照这篇文章:上穷碧落下凡尘:Win10零碎下基于Docker配置Elasticsearch7配合Python3进行全文检索交互 docker run --rm -v /myr:/usr/src -w /usr/src -ti starefossen/ruby-node /bin/bash因为在容器外部曾经装置好ruby2.5.1,所以gem也随之装置好,那么咱们能够在容易外部装置Rails gem install -v 6.0.2 rails这里用-v参数可管制版本号。 在容器内装置Rails6.0胜利之后,间接在容器内建设我的项目 rails new .我的项目建设好当前,你会发现在windows目录会同步呈现Rails我的项目文件 此时,在容器命令行内输出exit退出容器,此时容器就会进行并且删除,这个容器也实现了它的历史工作,它的存在就是帮咱们创立好一个Rails我的项目,并且通过共享文件的模式在宿主机同步。 下一步,为了能在宿主机运行咱们的Rails服务,须要一个Dockerfile文件来定制咱们本人的镜像 FROM starefossen/ruby-node # 设置我的项目目录 WORKDIR /usr/src/app # 设置配置文件 COPY Gemfile* ./ RUN bundle install # 拷贝文件 COPY . ./ # 裸露端口 EXPOSE 3000 # 启动服务命令 CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]写好Dockerfile之后,咱们就能够打造一个全新的镜像,这个镜像用来运行咱们曾经建设好的Rails我的项目。 ...

September 30, 2020 · 1 min · jiezi

关于docker:心动不如行动基于Docker安装关系型数据库PostgrelSQL替代Mysql

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_171 最近“全栈数据库”的概念甚嚣尘上,配角就是PostgrelSQL,它最近这几年的技术倒退不堪称不猛,笼罩OLTP、OLAP、NoSQL、搜寻、图像等利用场景,实实在在的全栈性倒退。帮忙公司解决了数据孤岛、数据平台多、同步一致性、提早,软硬件成本增加等业务痛点,在互联网、金融、物联网、传统企业等畛域失去了宽泛的利用。PostgreSQL的利用场景丰盛,不亚于商用数据库Oracle,常被业界称为“开源界的Oracle”。 至于Mysql大家都很相熟,很多公司因为人才储备和数据量大的起因,个别是Hadoop+Mysql的模式,Hadoop计算大量原始数据,而后按维度汇总后的展现数据存储在Mysql上,然而Mysql也有很多的“坑”:比方驰名的Emoji表情坑,由此引申进去的utf8mb4的坑(隐式类型转换陷阱),性能低到发指的乐观锁机制,不反对多表单序列中取 id,不反对over子句,简直没有性能可言的子查问........有点罄竹难书的意思,更多的“罪状”详见:见鬼的抉择:Mysql。而这些问题,在PostgrelSQL中失去了改善,本次咱们在Win10平台利用Docker装置PostgrelSQL,并且初步感受一下它的魅力。 第一步当然是装置Docker,不相熟的同学请参照:win10零碎下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑)。 随后拉取镜像,这里咱们抉择绝对稳固的PostgrelSQL11.1。 docker pull postgres:11.1拉取胜利后,输出命令查看镜像 docker images能够看到,它的镜像十分小,大略300m左右,比Mysql小很多。 而后咱们就能够将容器启动了,输出命令 docker run -d --name dev-postgres -e POSTGRES_PASSWORD=root -p 6432:5432 postgres:11.1这里POSTGRES_PASSWORD是PostgrelSQL的用户明码,本人制订一个就能够了,默认端口号是5432,因为笔者的宿主机上曾经装置好一个PostgrelSQL服务端,所以这里通过端口映射改成了6432。 输出命令 docker ps来查看容器运行状态 没有问题,当初咱们进入命令行操作一下。 docker exec -it dev-postgres bashpsql -h localhost -U postgres这样就能够进入容器外部的命令行,在命令行输出PostgrelSQL的命令l 就能够查看数据库列表。 建设数据库 CREATE DATABASE mytest;应用数据库 \c mytest建设一张表 CREATE TABLE "public"."article" ( "id" int4 NOT NULL, "content" text, PRIMARY KEY ("id") ) WITH (OIDS=FALSE);列出所有表 \d如果不习惯应用命令行,也能够用可视化工具来进行链接,比方Navicat 留神默认用户是postgres,值得一提的是,应用navicat无奈像Mysql一样手动设置属性自增长(auto-increment),PostgrelSQL应用的是序列的模式来实现自增长: CREATE SEQUENCE serial START 1;这里创立好的序列是从1开始计数。 ...

September 30, 2020 · 2 min · jiezi

关于docker:dockerlatest-和-dockerdind-镜像区别

咱们在编写 CI 时通过申明镜像作为 job 的执行环境,每个 job 都在一个污浊的容器中执行。有时,咱们须要一个 docker 容器环境来执行 docker build、docker push 等操作。查看官网的 docker 镜像,咱们发现存在两个次要的版本:docker:latest、docker:dind 和 docker:git。 docker:dind该镜像蕴含 Docker 客户端(命令行工具)和 Docker daemon。 通过 docker history docker:dind 命令咱们发现 docker:dind 是在 docker:latest 根底上又装置了 Docker daemon,并且最初两个构建命令为: IMAGE CREATED CREATED BY SIZE COMMENT66dc2d45749a 8 weeks ago /bin/sh -c #(nop) CMD [] 0B <missing> 8 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["dockerd-entr… 0B ...在 run 该镜像时,不能指定 sh CMD 参数,dockerd-entrypoint.sh 命令接管到该参数并不会启动 Docker daemon。想要正确启动容器里的 Docker daemon 并且进入容器须要分步进行: ...

September 26, 2020 · 2 min · jiezi

关于docker:突破-DockerHub-限制全镜像加速服务

最近 DockerHub 批改了定价,对于收费帐号会限度 200 pulls/6小时,对于匿名帐号则限度 100 pulls/6小时。 本文我来介绍下如何应用 Cache 来应对此问题。背景DockerHub 是全世界最早也是最大的容器镜像仓库,托管着泛滥操作系统发行版及各类软件的 Docker 镜像。 在推动业务容器化的过程中,不可避免的,咱们会须要应用来自 DockerHub 上的容器镜像。 无论是在集体本地环境中应用,还是用于跑测试服务 以下是两种次要的解决方案: 构建一些公共根底镜像,寄存在企业的公有镜像仓库中给业务方应用: 这种计划下,如果业务方偶然须要一些小众的/非根底的镜像,可能只是长期测试应用,那通常状况下是没必要将此类镜像作为根底镜像保护的。 后果可能是: 应用中间接从 DockerHub pull 镜像,网络状况不佳时,就是无尽的期待;先 pull 镜像,而后 docker tag 重 tag 后, push 到企业的公有镜像仓库中。这种状况下,如果没有较好的镜像治理规定,那么镜像仓库中就会存在各种无意义的镜像,造成存储资源的节约。为 docker daemon 配置 Proxy 进行减速: 泛滥国内镜像减速服务,仅提供 Docker 官网镜像的减速服务,集体/组织下的镜像不提供减速服务;即便在不同节点上,下载雷同的镜像,依然须要通过网络减速,会产生额定的海内带宽老本;并且近期 DockerHub 批改了其服务价格, 对于收费用户,进行了如下限度: 未登录用户,每 6 小时只容许 pull 100 次已登录用户,每 6 小时只容许 pull 200 次如果咱们持续应用上述两种模式的话,因为进口 IP 是绝对固定的,所以很容易触发 DockerHub 的配额限度。 此限度将于 11 月 1 日正式全面实施。 为了能 晋升效率 ,以及 节约减速带宽老本 ,企业外部/集体就十分须要一个 DockerHub 全镜像减速服务了,也就是咱们常说的 pull through cache。 ...

September 22, 2020 · 3 min · jiezi

关于docker:玩转dnmp之自定义容器

文章简介在后面几篇文章中,咱们应用dnmp搭建了一个残缺的docker开发环境。这篇文章接着分享如何在dnmp的根底上搭建一个自定义的PHP容器,实现多版本的PHP容器。 后期筹备首先咱们下载dnmp仓库。复制docker-compose.sample.yml文件为docker-compose.yml cp docker-compose.sample.yml docker-compose.yml复制env.sample为.env cp env.sample ./env批改配置首先咱们依据须要在.env文件中配置好PHP容器须要映射的端口等信息。增加如下配置(可放在任意地位): ## PHP73#PHP73_VERSION=7.3.22PHP73_PHP_CONF_FILE=./services/php73/php.iniPHP73_FPM_CONF_FILE=./services/php73/php-fpm.confPHP73_LOG_DIR=./logs/phpPHP73_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcachePHP_SWOOLE1_PORT=9504PHP_SWOOLE2_PORT=9505PHP_SWOOLE3_PORT=9506PHP_SWOOLE4_PORT=9507PHP_SWOOLE5_PORT=9508PHP_SWOOLE6_PORT=9509这里的swoole能够依据本人的须要定义,比方你只须要映射一个端口9505,间接值配置一个9504。只须要与上面的.docker-compose.yml一一对应起来即可。接下来,配置doker-compose.yml文件。只须要增加如下内容即可: php73: build: context: ./services/php args: PHP_VERSION: php:${PHP73_VERSION}-fpm-alpine CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} PHP_EXTENSIONS: ${PHP56_EXTENSIONS} TZ: "$TZ" container_name: php73 ports: - "${PHP_SWOOLE1_PORT}:9504" - "${PHP_SWOOLE2_PORT}:9505" - "${PHP_SWOOLE3_PORT}:9506" - "${PHP_SWOOLE4_PORT}:9507" - "${PHP_SWOOLE5_PORT}:9508" - "${PHP_SWOOLE6_PORT}:9509"这里的container_name能够依据本人的须要来配置,倡议依据你的PHP版本号定义容器名字。装置容器通过下面简略的配置,咱们接下来运行如下命令,就能够搭建一个残缺的PHP容器了: docker-compose up装置完之后,查看成果: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0e1376e67300 dnmp_php73 "docker-php-entrypoi…" 35 hours ago Up 42 minutes 9000/tcp, 0.0.0.0:9504-9509->9504-9509/tcp php73证实咱们的自定义容器装置胜利了,接下来,咱们就配置nginx如何应用该容器。 应用容器应用该容器超级简略,只须要在nginx配置时,指向咱们创立好的容器即可。 server { listen 80; server_name baidu.com; root /www/mini-program-server/web; index index.php index.html; access_log /var/log/nginx/nginx.baidu.error.log; error_log /var/log/nginx/nginx.baidu.access.log; include rewrite/thinkphp.conf; location ~ \.php$ { # 只须要将这里的PHP73写成咱们创立好的容器名称即可。 fastcgi_pass php73:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}最终论断通过该形式,咱们创立其余的容器也是相似的形式,只有配置好即可。 ...

September 20, 2020 · 1 min · jiezi

关于docker:Docker-docker-初次见面请多多关注

# 基本概念,名词或术语对于Docker的灵魂三问 Docker 是什么? Docker提供简略易用的容器应用接口 属于 Linux 容器的一种封装。简略来说Docker能够让开发者打包他们的利用以及依赖包到一个可移植的镜像中,而后公布到任何风行的 Linux或Windows 机器上,也能够实现虚拟化。Docker自身并不是容器,它是创立容器的工具,是利用容器引擎要解决什么问题? (1)提供一次性的环境。比方,本地测试别人的软件、继续集成的时候提供单元测试和构建的环境。 (2)提供弹性的云服务。因为 Docker 容器能够随开随关,很适宜动静扩容和缩容。 (3)组建微服务架构。通过多个容器,一台机器能够跑多个服务,因而在本机就能够模拟出微服务架构。益处又在哪里? (1)启动快 (2)资源占用少 (3)体积小docker CE 与 EE的简略区别 CE( Community Edition)是社区版,简略了解是收费应用,提供小企业与小的IT团队应用,心愿从Docker开始,并尝试基于容器的应用程序部署。EE(Docker Enterprise Edition)是企业版,免费。提供性能更强。适宜大企业与打的IT团队。为企业开发和IT团队设计,他们在生产中构建、交付和运行业务要害应用程序Docker Toolbox:疾速简略装置docker环境的套件,有mac和win2个版本。 Oracle VM VirtualBox:Oracle虚构器(机)Kitematic (Alpha):Docker GUI 工具,它能够更疾速、更简略的运行DockerDocker Quickstart Terminal:疾速启动docker的命令行工具Docker Machine: 创立和治理docker主机的工具,反对在不同版本的Linux上治理多个Docker主机从零开始学习Docker的重要工具提供集中创立和治理Docker主机的性能与Docker Swarm集成创立Docker集群查看docker版本并测试docker $ docker -v$ docker info$ docker run hub.c.163.com/library/busybox:latest echo hello world # => 运行一个docker容器 连贯容器 $ docker start 56b9cd5ffa87$ docker attach 56b9cd5ffa87应用指定镜像以交互模式启动一个容器,并在容器内执行/bin/bash命令 # https://www.runoob.com/docker/docker-run-command.html$ docker pull ubuntu$ docker run -it [IMAGE ID] /bin/bash$ cat /etc/issue# Windows下载并部署Docker如果是 win7、win8 等须要利用 docker toolbox 来装置,国内能够应用阿里云的镜像来下载当初 Docker 有专门的 Win10 专业版零碎的安装包,须要 开启Hyper-V。# 遇到的一些问题docker: Error response from daemon: create $(pwd) 见 https://github.com/second-sta...启动 docker info 时报错: Error response from daemon: Bad response from Docker engine ...

September 19, 2020 · 1 min · jiezi

关于docker:Docker实战总结非常全面建议收藏

一、    Docker简介Docker是一个开源的利用容器引擎,开发者能够打包本人的利用到容器外面,而后迁徙到其余机器的docker利用中,能够实现疾速部署。 简略的了解,docker就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不管其外部的货物一样,软件容器充当软件部署的标准单元,其中能够蕴含不同的代码和依赖项。 依照这种形式容器化软件,开发人员和 IT 业余人员只需进行极少批改或不批改,即可将其部署到不同的环境,如果呈现的故障,也能够通过镜像,疾速复原服务。 二、Docker劣势1. 个性劣势 2. 资源优势 三、Docker基本概念Client(客户端):是Docker的用户端,能够承受用户命令和配置标识,并与Docker daemon通信。 Images(镜像):是一个只读模板,含创立Docker容器的阐明,它与操作系统的装置光盘有点像。 Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。 Registry(仓库):是一个集中存储与散发镜像的服务。最罕用的Registry是官网的Docker Hub 。 四、Docker装置应用操作系统:CentOS 71、装置依赖 yum install -y yum-utils device-mapper-persistent-data lvm22、增加软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/doc... # 指定阿里云镜像源3、装置docker-ce(对系统内核有肯定要求,centos6不反对) yum clean all  yum makecache fast       # 从新生成缓存yum -y install docker-ce docker-ce-cli containerd.io 4、设置自启并启动 systemctl enable dockersystemctl start docker 5、查看版本 docker version 运行示例:Nginx1、搜寻并下载镜像docker search nginxdocker pull nginx 2、启动一个容器并映射端口到本地docker run -d -p 8080:80 --name Nginx nginx # 参数详解见下文 ...

September 18, 2020 · 2 min · jiezi

关于docker:Docker容器网络基础篇

_链接:https://www.cnblogs.com/sally...作者:Mr_Zack_Docker的技术依赖于Linux内核的虚拟化技术的倒退,Docker应用到的网络技术有Network Namespace、Veth设施对、Iptables/Netfilter、网桥、路由等。接下来,我将以Docker容器网络实现的根底技术来别离论述,在到真正的容器篇章节之前,能造成一个巩固的基础知识网。 Network Namespace为了反对网络协议栈的多个实例,Linux在网络栈引入了Network Namespace,这些独立的协定栈被隔离到不同的Namespace中,处于不同Namespace中的网络栈是齐全隔离的,彼此无奈通信。具体无关Linux Namespace的介绍,能够另行浏览之前写的《Linux Namespace》。 Linux的网络协议栈十分复杂,为了反对独立的协定栈,相干的全局变量都必须批改为协定栈公有。Linux实现Network Namespace的外围就是让这些全局变量称为Network Namespace变量的成员,而后为协定栈的函数调用退出一个Namespace参数。与此同时,为了保障已开发程序及内核代码的兼容性,内核代码隐式地应用了Namespace空间内的变量。应用程序如果没有对Namespace有非凡需要,那么不须要额定的代码,Network Namespace对应用程序而言是通明的。 在建设了新的Network Namespace,并将某个过程关联到这个网络命名空间后,就呈现了如下的命名空间下的内核数据结构,所有网络栈变量都放入了Network Namespace的数据结构中,这个Network Namespace是属于它过程组公有的,与其余过程组不抵触。 Docker正是利用了Network Namespace个性,实现了不同容器之间的网络隔离。如果一个容器申明应用宿主机的网络栈(-net = host),即不开启Network Namespace,例如: docker run –d –net=host --name c_name i_name这种状况下,这个容器启动之后监听的是宿主机的80端口。像这样间接应用宿主机网络栈的形式,尽管能够为容器提供良好的网络性能,但也不可避免的造成端口抵触等网络资源抵触的问题。 所以在个别状况下,咱们都心愿程序引入Network Namespace里的网络栈,即这个容器领有本人的IP和端口。然而,这个时候也会带来一个新的问题,被隔离的容器过程,是怎么与其它被隔离的过程进行网络通信的? Net Bridge上文说到,Linux 能够反对不同的网络,他们之间是怎么反对够相互通信的呢?如果是两台主机,那须要的可能只是一根网线,把它们连贯在一台交换机上。而在Linux当中,网桥(Bridge)就起到相应的作用。实质上来说,这是一个数据链路层(data link)的设施,依据Mac地址的信息转发到网桥的不同端口上。而Docker就是在宿主机上默认创立一个docker0的网桥,但凡连贯docker0的网桥,都能够用它来通信。 细述Bridge网桥是一个二层的虚构网络设备,把若干个网络接口“连贯”起来,使得网口之间的报文能够转发。网桥可能解析收发的报文,读取指标的Mac地址信息,和本人的Mac地址表联合,来决策报文转发的指标网口。为了实现这些性能,网桥会学习源Mac地址。在转发报文时,网桥只须要向特定的端口转发,从而防止不必要的网络交互。如果它遇到了一个本人从未学过的地址,就无奈晓得这个报文应该向哪个网口转发,就将报文播送给除了报文起源之外的所有网口。 在理论网络中,网络拓扑不可能永恒不变。如果设施挪动到另一个端口上,而它没有发送任何数据,那么网桥设施就无奈感知到这个变动,后果网桥还是向原来的端口发数据包,在这种状况下数据就会失落。所以网桥还要对学习到的Mac地址表加上超时工夫,默认5min。如果网桥收到了对应端口MAC地址回发的包。则重置超时工夫,否则过了超时工夫后,就认为哪个设施不在那个端口上了,他就会播送重发。 Linux为了反对越来越多的网卡以及虚构设施,所以应用网桥去提供这些设施之间转发数据的二层设施。Linux内核反对网口的桥接(以太网接口),这与单纯的交换机还是不太一样,交换机仅仅是一个二层设施,对于承受到的报文,要么转发,要么抛弃。运行着Linux内核的机器自身就是一台主机,有可能是网络报文的目的地,其收到的报文要么转发,要么抛弃,还可能被送到网络协议的网络层,从而被本人主机自身的协定栈消化,所以咱们能够把网桥看作一个二层设施,也能够看做是一个三层设施。 Linux中Bridge实现Linux内核是通过一个虚构的网桥设施(Net Device)来实现桥接的。这个虚构设施能够绑定若干个以太网接口,从而将它们连接起来。Net Device网桥和一般的设施不同,最显著的是它还能够有一个ip地址。 如上图所示,网桥设施br0绑定的eth0和eth1。对于网络协议栈的下层来说,只看到br0。因为桥接是在数据链路层实现的,下层不须要关怀桥接的细节,于是协定栈下层须要发送的报文被送到br0,网桥设施的解决代码判断报文被转发到eth0还是eth1,或者两者皆转发。反之,从eth0或者从eth1接管到的报文被提交给网桥的解决代码,在这里判断报文应该被转发、抛弃或者提交到协定栈下层。 而有时eth0、eth1也可能会作为报文的源地址或目标地址,直接参与报文的发送和接管,从而绕过网桥。 Bridge罕用操作Docker主动实现了对网桥的创立和保护。如果想要进一步了解网桥,能够看下如下举的一些罕用操作命令。 新增一个网桥: brctl addbr xxxxx在新增网桥的根底上减少网口,在linux中,一个网口其实就是一个物理网卡。将物理网卡和网桥连接起来: brctl addif xxxx ethx网桥的物理网卡作为一个网口,因为在链路层工作,就不再须要IP地址了,这样下面的IP地址天然生效: ipconfig ethx 0.0.0.0给网桥配置一个IP地址: ipconfig brxxx xxx.xxx.xxx.xxx这样网桥就是一个有了IP地址,而连贯在这之上的网卡就是一个纯链路层设施了。 Veth Pair上文说到,docker在宿主机上创立docker0网桥后,但凡连贯到docker0上的网桥,就能够用它来通信。那么这里又有个问题,就是这些容器是如何连贯到docker0网桥上的?所以这就是Veth Pair虚构设施的作用了,Veth Pair就是为了在不同的Network Namespace之间进行通信,利用它,能够将两个Network Namespace连接起来。 Veth Pair设施的特点是:它被创立进去后,总是以两张虚构网卡(Veth Peer)的模式呈现。并且,其中一个网卡收回的数据包,能够间接呈现在另一张“网卡”上,哪怕这两张网卡在不同的Network Namespace中。 ...

September 16, 2020 · 1 min · jiezi

关于docker:docker学习

docker最重要的3个概念,仓库、镜像、容器。其中仓库是寄存镜像的中央。镜像是有个有层级的文件系统,容器是有镜像运行而来的一整套环境,利用。1、装置Docker Desktop on Windows 官网下载地址:https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows 设置国内镜像:举荐几个国内安全稳固的镜像减速地址:https://dockerhub.azk8s.cn #Azure 中国镜像 https://reg-mirror.qiniu.com #七牛云加速器 https://registry.docker-cn.com #Docker中国区 http://hub-mirror.c.163.com #网易 https://docker.mirrors.ustc.e... #USTC 2、命令执行命令:docker run -d --name="mynginx" -p 8080:80 nginx执行这个命令,首先会从本地寻找 nginx 的镜像,如果找不到,就会去从近程库拉取,拉去到本地后,而后运行。 -d 后盾运行容器,并返回容器 ID--name="mynginx" 为容器指定一个 mynginx 名称-p 指定端口映射,格局为:主机(宿主)端口:容器端口执行命令:docker container ls能够看到正在运行的容器 执行命令:docker stop/restart/start/rm mynginx可对该容器进行管制 列出容器:docker ps 列出镜像:docker images 镜像重命名:docker tage nginx local/nginx 构建镜像docker build -t myimage 清空所有已进行的容器docker container prune 查看日志docker logs -f mynginx 查看过程docker top mynginx 执行容器外部文件docker exec -t -i mynginx /bin/sh

September 15, 2020 · 1 min · jiezi

关于docker:可以帮到你的dockerjenkins安装部署

CC最新分享——《并发编程之透彻了解AQS源码剖析》,这相对是我见过的、讲并发编程、讲AQS讲的最好的视频了,没有之一,千万不要错过!是不是吹牛,听过就晓得,欢送围观!CC,20年Java开发和应用教训,多年的首席架构师和CTO,滞销原创书籍《研磨设计模式》的作者。参加和领导了上百个大中型我的项目的设计和开发,在互联网利用零碎架构、零碎设计、利用级框架和中间件开发等方面具备很多教训和领悟。更为难得的是,入行20年,依然奋战在技术一线,深知一线架构师须要把握哪些技术、把握到什么水平、一线架构设计会遇到哪些坑、如何能力做出最合适的架构设计,教训最难得!在这个公众号架构设计一起学外面,CC将会毫无保留的把这些教训传授进去,帮忙大家更快更好的成长为合格的架构师! 接下来写一篇随机笔记,心愿能够帮忙大家: 下载镜像 docker pull jenkins/jenkins![0](https://upload-images.jianshu.io/upload_images/23729306-9ffc7abf157155ba?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)创立挂载文件夹 mkdir /jenkins         ![0](https://upload-images.jianshu.io/upload_images/23729306-e41354f38f10c27b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)查看文件权限 ls -nd jenkins/                 给uid为1000的权限 chown -R 1000:1000 jenkins/   ![0](https://upload-images.jianshu.io/upload_images/23729306-5d13d3a1709c062f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)启动 docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /jenkins:/var/jenkins_home jenkins/jenkinsjenkins中生成配置信息 ![0](https://upload-images.jianshu.io/upload_images/23729306-0fea599bd5797cb7?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)配置maven和jdk 复制jdk和maven到jekins映射门路下 ![0](https://upload-images.jianshu.io/upload_images/23729306-a73abffff9b1ab56?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)配置的时候门路写jenkins内的门路 /var/jenkins_home/jdk1.8.0_91/var/jenkins_home/apache-maven-3.5.3![0](https://upload-images.jianshu.io/upload_images/23729306-d9744ab17b056cb1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)![0](https://upload-images.jianshu.io/upload_images/23729306-11f728a63b050551?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)明码配置 1:拜访 http://192.168.137.21:8080 明码地址: 装置插件 ![0](https://upload-images.jianshu.io/upload_images/23729306-f7beeb6c7325c367?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)降级站点 ![0](https://upload-images.jianshu.io/upload_images/23729306-52f997e82a6e5c55?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)手动装置插件(按抉择) Maven IntegrationDeploy to containerPublish Over SSHsshCloudBees Docker Build and PublishdockerDocker Swarmdocker-build-step退出公众号架构设计一起学,立刻观看《并发编程之AQS源码剖析》,同时还能够取得独家《架构师成长秘籍阶段一》一份,后续还会持续赠《架构师成长秘籍阶段二》,心动不如口头,连忙退出吧!

September 14, 2020 · 1 min · jiezi

关于docker:k8s-118版本安装

https://zhuanlan.zhihu.com/p/...kubeadmn装置k8s 1.18版本比拟顺畅装置链接 https://blog.csdn.net/l102838...k8s 1.18装置dashboard https://blog.csdn.net/l102838...k8s 1.18版本装置Metrics-Server服务 留神要增加:hostNetwork: true

September 13, 2020 · 1 min · jiezi

关于docker:docker-学习笔记第九集Laradock-简介及使用

克隆 laradock 到本地$ cd ~$ git clone https://github.com/Laradock/laradock.git$ cd laradock$ git checkout -b v11.0在 laradock 同级创立 wwwroot 目录作为网站主目录$ mkdir ~/wwwroot复制 laradock 我的项目中的 env-example 到当前目录并改名为 .env$ cp env-example .env编辑 .env在该配置文件中能够批改各种容器的配置,例如 mysql 明码、php 版本等,大家能够自行参考 一下内容是须要批改的中央 # 设置网站主目录APP_CODE_PATH_HOST=../wwwroot# 开启 api 源镜像(嘿嘿,这就是开源软件的益处,咱们能够给我的项目提交 pr,让我的项目能够兼容我国的网络)CHANGE_SOURCE=true# 设置 composer 镜像地址WORKSPACE_COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer# 设置 npm 镜像地址WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org启动启动咱们须要等容器,而后就是急躁的期待了 $ docker-compose up -d nginx mysql redis workspace实现当看到如下内容就示意启动胜利了 Creating laradock_mysql_1 ... doneCreating laradock_docker-in-docker_1 ... doneCreating laradock_redis_1 ... doneCreating laradock_workspace_1 ... doneCreating laradock_php-fpm_1 ... doneCreating laradock_nginx_1 ... done创立 Laravel 我的项目接下来让咱们看下 laradock 有什么劣势吧 ...

September 8, 2020 · 1 min · jiezi

关于docker:Docker常用命令记录

Docker相干常用命令(继续更新中...)1.创立docker镜像:在Dockerfile所在目录下,确保Dockerfile中语法无误的状况下;运行docker build -t $image_name:$tag_name .实现之后通过docker images查看是否创立胜利 2.基于已有的镜像创立对应容器并通过bash交互:docker run -it $image_name:$tag_name /bin/bash实现之后通过docker ps -a查看镜像是否创立胜利 3.删除已有容器:docker rm $container_ID 4.删除已有镜像:docker rmi $image_name:$tag_name 5.连贯已有的容器:docker exec -it $container_ID /bin/bash如果容器未启动,则需用docker start $container_ID先启动该容器 6.复制宿主机的文件到容器内:前提是需在宿主机中执行,sudo docker cp $host_path $container_ID:container_path

September 8, 2020 · 1 min · jiezi

关于docker:docker-学习笔记第六集dockerfile-定制镜像

应用 Dockerfile 定制镜像什么是 Dockerfile 呢?Dockerfile 是一个文本文档,其中蕴含用户能够在命令行上调用以组装映像的所有命令。Docker 能够通过浏览该文件中的指令来主动构建映像。(相似于 Linux 上的 bash 脚本,Docker 通过该脚本构建镜像) 应用 dockerfile 制作一个 nginx 镜像$ mkdir mynginx$ cd mynginx$ touch Dockerfile //首字母必须大写Dockerfile 文件内容如下 FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html这个 Dockerfile 很简略,一共就两行。波及到了两条指令,FROM 和 RUN。 FROM性能:指定根底镜像 所谓定制镜像,那肯定是以一个镜像为根底,在其上进行定制。就像咱们之前运行了一个 nginx 镜像的容器,再进行批改一样,根底镜像是必须指定的。而 FROM 就是指定 根底镜像,因而一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。个别应用中咱们通过 Docker Hub 来查找相干镜像。如下图所示,红标中标识的为官网镜像 除了抉择现有镜像为根底镜像外,Docker 还存在一个非凡的镜像,名为 scratch(该镜像不能通过 docker pull 命令间接拉取)。这个镜像是虚构的概念,并不理论存在,它示意一个空白的镜像。 因为自己只对 PHP 较为相熟,没有应用过 go,这个也不是很理解,就先跳过了 RUN性能:执行命令 用来执行命令行命令的理论应用下有两种格局 shell 格局: RUN <命令>exec 格局:RUN ["可执行文件", "参数1", "参数2"]Dockerfile 中每一个指令都会建设一层,RUN 也不例外。每一个 RUN 执行完结后,都会 commit 这一层的批改,形成新的镜像。所以在应用中尽力缩小指令。 ...

September 4, 2020 · 3 min · jiezi

关于docker:docker-学习笔记第五集数据卷

这一集下先从一张图开始 这张图来自于 docker 官网,次要形容了主机和 docker 间的数据沟通的 3 种形式。别离是 bind mount、volume、tmpfs mount。这次次要学习前两种形式。让咱们开始吧~ volume (数据卷)以下内容摘抄自 docker 官网文档 咱们晓得默认状况下,在容器内创立的所有文件都存储在可写容器层上,这意味着: 当容器不再存在时,数据不会长久存在,而且如果另一个过程须要数据,就很难从容器中取出数据。容器可写层与容器运行的主机严密耦合。您不能轻易地将数据挪动到其余中央。写入到容器的可写层须要一个存储驱动程序来治理文件系统。存储驱动程序提供应用Linux内核的联结文件系统。与应用间接写入主机文件系统的数据卷相比,这种额定的形象升高了性能。通过下面的内容通知咱们,不要在容器内容写入数据,而要应用 volume。 那么数据卷是怎么存储数据的呢? docker 默认在主机上会有一个特定的区域 /var/lib/docker/volumes/ (Linux),该区域用来寄存 volume。实例演示// 创立一个 volume 名为 my-data $ docker volume create my-data my-data // 创立一个 名为 nginx1 的 nginx 容器并应用 my-data 为 nginx 的主目录 $ docker run -d -p 8080:80 --name nginx1 --mount source=nginx-data,target=/usr/share/nginx/html nginx 814dea34b7dbf2afd724d12ad50254e2a749f0b65684f04c730ac04181857d04 // 查看容器的状态 $ docker container ls --format "table {{.Image}}t{{.ID}}t{{.Status}}t{{.Names}}" IMAGE CONTAINER ID STATUS NAMES nginx 814dea34b7db Up 3 minutes nginx1 // 进入 nginx1 容器 $ docker exec -it nginx1 bash // 批改 index.html 内容为 hello world # echo hello world > /usr/share/nginx/html/index.html // 拜访 http://127.0.0.1:8080 咱们能够看到 hello world 页面 // 删除 nginx1 容器 $ docker rm -f nginx1 // 创立一个 名为 nginx2 的 nginx 容器也应用 my-data 为 nginx 的主目录 $ docker run -d -p 8080:80 --name nginx2 --mount source=nginx-data,target=/usr/share/nginx/html nginx // 拜访 http://127.0.0.1:8080 咱们也能够看到 hello world 页面(数据共享) 通过下面的实例咱们晓得了: ...

September 4, 2020 · 3 min · jiezi

关于docker:docker-学习笔记第四集网络

docker 网络通过后面的学习,咱们曾经能够通过 image 来创立相干的容器,例如:创立一个 mysql 容器,nginx 容器、php-fpm 容器。然而咱们想要应用这些容器作为开发或者生产的环境还短少要害的一步,那就是容器间的通信。这一集咱们来学习容器间的网络通信容器间网络互连Docker 默认提供了三种网络模式、别离是bridge、host、none。能够应用如下命令查看 $ docker network lsNETWORK ID NAME DRIVER SCOPEb7ad6ddfa6be bridge bridge local8eceb8218986 host host local0cedda606a66 none null localbridge 桥接模式原理:在主机上虚构出一个docker0 的网桥,默认创立的容器都会虚构出网卡和这个网桥连贯,容器的 ip 地址从 172.17.0.0/16 地址段生成。 因为在 mac 和 windows 零碎上,docker 的运行形式不太一样(在win、mac 上装置 docker,实际上是装置了一个 docker 虚拟机,而咱们创立的容器都是跑在 docker 虚拟机中的)。mac零碎下进入docker 虚拟机 命令 $ screen ~/Library/Containers/com.docker.docker/Data/vms/0/ttydocker 版本小于18.06 则应用如下命令 $ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty测试桥接模式($ 提示符为主机、# 提示符为容器内)应用 busybox 镜像进行测试。该镜像十分小并且装置了ping、ifconfig等实用工具,非常适合测试。 $ docker run --name box1 -it --rm busybox sh// 测试网络连通/# ping www.baidu.com PING www.baidu.com (180.97.34.96): 56 data bytes64 bytes from 180.97.34.96: seq=0 ttl=45 time=10.489 ms64 bytes from 180.97.34.96: seq=1 ttl=45 time=10.512 ms64 bytes from 180.97.34.96: seq=2 ttl=45 time=10.424 ms64 bytes from 180.97.34.96: seq=3 ttl=45 time=10.409 ms^C--- www.baidu.com ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 10.409/10.458/10.512 ms// 查看网卡 ip 地址/# ifconfigeth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:07 inet addr:172.17.0.7 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1421 (1.3 KiB) TX bytes:622 (622.0 B) // 退出容器。应用 Ctrl+P+Q 退出容器然而容器不会敞开// 查看 box1 容器的详细信息,只截取了局部内容$ docker inspect box1..."Networks": { "bridge":{ "IPAMConfig":null, "Links":null, "Aliases":null, "NetworkID":"b7ad6ddfa6beac6b0ebf87dcec3d7ee933478592f16d48b3c01b28cd6a48a7f9", "EndpointID":"30eb2f7a0b5e4dbebe8a8f0522a01e105c65fe6a14d0a6ffe02120af009cff27", "Gateway":"172.17.0.1", "IPAddress":"172.17.0.7", "IPPrefixLen":16, "IPv6Gateway":"", "GlobalIPv6Address":"", "GlobalIPv6PrefixLen":0, "MacAddress":"02:42:ac:11:00:07", "DriverOpts":null }}...通过下面的例子咱们能够很直观的看到 box1 容器应用的是 bridge 模式,调配的 ip 地址为 172.17.0.7 并且能够拜访互联网。 ...

September 4, 2020 · 3 min · jiezi

关于docker:docker-学习笔记第三集container

docker 容器容器是通过 image 创立的过程。 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是动态的定义,容器是镜像运行时的实体。容器能够被创立、启动、进行、删除、暂停等。新建并启动容器上面的命令的含意:通过 Ubuntu:18.04 这个 image 创立一个容器并运行 /bin/echo 'Hello world',实现后进行该容器。 $ docker run ubuntu:18.04 /bin/echo 'Hello world'Hello world应用 docker run 命令,后盾实际上执行的内容为: 查看本地是否存在指定的镜像,不存在就从私有仓库下载利用镜像创立并启动一个容器调配一个文件系统,并在只读的镜像层里面挂载一层可读写层(前面会学)从宿主主机配置的网桥接口中桥接一个虚构接口到容器中去(前面会学)从地址池配置一个 ip 地址给容器(前面会学)执行用户指定的应用程序执行结束后容器被终止下面的示例执行完当前会终止,然而个别咱们在应用一个提供服务的容器的时候,不想让它进行,那么能够应用 -d 参数,使容器放弃在后盾运行。然而须要留神——容器是否会短暂运行,是和 docker run 指定的命令无关,和 -d 参数无关 如下命令执行完后,容器仍然会进行 $ docker run -d ubuntu 而如下命令执行完后,容器则在后盾放弃运行 $ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 进入容器attach 命令$ docker run -dit ubuntuffff9516c6151ef3b436df1bccc70ba9da2d0f57bbec5afe19353fe481e12702$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESffff9516c615 ubuntu "/bin/bash" 7 seconds ago Up 6 seconds elegant_hypatia$ docker attach ffff9516c615root@ffff9516c615:/#留神: 如果从这个 stdin 中 exit,会导致容器的进行。 ...

September 4, 2020 · 1 min · jiezi

关于docker:docker-学习笔记第二集image

简介Docker 镜像是一个非凡的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还蕴含了一些为运行时筹备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不蕴含任何动态数据,其内容在构建之后也不会被扭转。下面是比拟官网的解释,预计大部分也没看太懂,那么我就用我本人了解的形式说一下吧。 image 相似于咱们装置零碎的镜像文件,通过 image 文件咱们能够生成容器文件。个别镜像文件是分层存储的,应用了Union Fs 的技术(具体是个啥我也不太懂????♂️),也就说一个镜像文件是很多块组成的,有点相似于当初前端的组件化开发,是一组文件组成的。镜像能够向面向对象的类一样能够进行继承,通过一些根底镜像来构建属于咱们本人的镜像。 下面说了一大堆如同还不是很明确的样子,上面还是用例子来阐明吧。go go go~~~ 获取镜像通过 docker pull 命令从 Docker Hub 仓库获取镜像。docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]具体的选项能够通过 docker pull --help 查看 地址的格局个别是 <域名/IP>[:端口号] 默认地址是 Docker Hub, 能够省略仓库名:这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官网镜像。标签: 个别为版本号这里交叉一个镜像急速的内容因为国内网络的问题咱们须要对拉取镜像的地址镜像更改,应用国内的镜像地址来放慢拉取速度。 linux 零碎(已测试)在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件) { "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ]}重启服务 $ sudo systemctl daemon-reload$ sudo systemctl restart dockerWindows 10(未测试)在任务栏托盘 Docker 图标内右键菜单抉择 Settings,关上配置窗口后在左侧导航菜单抉择 Docker Engine,在右侧像下边一样编辑 json 文件,之后点击 Apply & Restart 保留后 Docker 就会重启并利用配置的镜像地址了。 ...

September 4, 2020 · 3 min · jiezi

关于docker:Doker容器技术

Docker简介Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的镜像中,而后公布到任何风行的不同操作系统(linux、Windows)机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口。Containers 与 VMs相比 Docker特点灵便:即便是最简单的利用也能够集装箱化。轻量级:容器利用并共享主机内核。可调换:即时部署更新和降级。便携式:在本地构建,部署到云,并在任何中央运行。可扩大:减少并主动散发容器正本。可重叠:垂直和即时重叠服务。Docker次要模块Docker次要由三局部组成:镜像Image、容器Container、仓库Repository各个模块如下: Docker Clientdocker client 是docker架构中用户用来和docker daemon建设通信的客户端,用户应用的可执行文件为docker,通过docker命令行工具能够发动泛滥治理container的申请。 docker client能够通过一下三种形式和docker daemon建设通信:tcp://host:port;unix:path_to_socket;fd://socketfd。docker client能够通过设置命令行flag参数的模式设置平安传输层协定(TLS)的无关参数,保障传输的安全性。docker client发送容器治理申请后,由docker daemon承受并解决申请,当docker client 接管到返回的申请相应并简略解决后,docker client 一次残缺的生命周期就完结了,当须要持续发送容器治理申请时,用户必须再次通过docker能够执行文件创建docker client。Docker serverdocker server在docker架构中时专门服务于docker client的server,该server的性能是:承受并调度散发docker client发送的申请,架构图如下: 在Docker的启动过程中,通过包gorilla/mux(golang的类库解析),创立了一个mux.Router,提供申请的路由性能。在Golang中,gorilla/mux是一个弱小的URL路由器以及调度散发器。该mux.Router中增加了泛滥的路由项,每一个路由项由HTTP申请办法(PUT、POST、GET或DELETE)、URL、Handler三局部组成。若Docker Client通过HTTP的模式拜访Docker Daemon,创立完mux.Router之后,Docker将Server的监听地址以及mux.Router作为参数,创立一个httpSrv=http.Server{},最终执行httpSrv.Serve()为申请服务。在Server的服务过程中,Server在listener上承受Docker Client的拜访申请,并创立一个全新的goroutine来服务该申请。在goroutine中,首先读取申请内容,而后做解析工作,接着找到相应的路由项,随后调用相应的Handler来解决该申请,最初Handler解决完申请之后回复该申请。Docker Server的运行在Docker的启动过程中,是靠一个名为”serveapi”的job的运行来实现的。原则上,Docker Server的运行是泛滥job中的一个,然而为了强调Docker Server的重要性以及为后续job服务的重要个性,将该”serveapi”的job独自抽离进去剖析,了解为Docker Server。EngineJobDocker DaemonDocker RegistryGraphDriverlibcontainerDocker container装置Docker最简略形式,即应用阿里云一键装置脚本: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunsystemctl start dockersystemctl enable dockerdocker versionDocker中的镜像治理搜寻镜像: docker search获取镜像: docker pull查看镜像: docker images删除镜像: docker rmiDocker中的容器治理启动容器: docker run –-name –h hostname进行容器: docker stop CONTAINER ID查看容器: ...

September 4, 2020 · 1 min · jiezi

关于docker:docker-安装-redis

应用docker装置redis单机版 首先你的linux服务器 须要装置docker docker pull redis 最新版redis 挂在的配置文件坐标提取码:h2o8运行命令 docker run -d --privileged=true  -p  6379:6379 -v /usr/local/docker/redis/conf/redis.conf:/user/local/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data --name redis  redis redis-server /user/local/etc/redis/redis.conf --appendonly yes //查看运行容器docker ps -a //查看日志docker logs -t redis

September 4, 2020 · 1 min · jiezi

关于docker:docker中的网络二

docker中网络实现原理当 Docker 启动时,会主动在主机上创立一个 docker0 虚构网桥,实际上是 Linux 的一个 bridge,能够了解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时,Docker 随机调配一个本地未占用的公有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比方典型的 172.17.42.1,掩码为 255.255.0.0。尔后启动的容器内的网口也会主动调配一个同一网段(172.17.0.0/16)的地址。 创立一个 Docker 容器的时候,同时会创立了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也能够收到雷同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 结尾(例如 vethAQI2QT)。通过这种形式,主机能够跟容器通信,容器之间也能够互相通信。Docker 就创立了在主机和所有容器之间一个虚构共享网络。 docker网络配置参数-b BRIDGE 或 --bridge=BRIDGE 指定容器挂载的网桥--bip=CIDR 定制 docker0 的掩码-H SOCKET... 或 --host=SOCKET... Docker 服务端接管命令的通道--icc=true|false 是否反对容器之间进行通信--ip-forward=true|false 请看下文容器之间的通信--iptables=true|false 是否容许 Docker 增加 iptables 规定--mtu=BYTES 容器网络中的 MTU上面2个命令选项既能够在启动服务时指定,也能够在启动容器时指定。在 Docker 服务启动的时候指定则会成为默认值,前面执行 docker run 时能够笼罩设置的默认值。 --dns=IP_ADDRESS... 应用指定的DNS服务器--dns-search=DOMAIN... 指定DNS搜寻域这些选项只有在 docker run 执行时应用,因为它是针对容器的个性内容。 -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主机名--link=CONTAINER_NAME:ALIAS 增加到另一个容器的连贯--net=bridge|none|container:NAME_or_ID|host 配置容器的桥接模式-p SPEC 或 --publish=SPEC 映射容器端口到宿主主机-P or --publish-all=true|false 映射容器所有端口到宿主主机容器拜访内部网络容器要想拜访内部网络,须要本地零碎的转发反对。在Linux 零碎中,查看转发是否关上如果为0需关上sysctl -w net.ipv4.ip_forward=1 ...

September 4, 2020 · 1 min · jiezi

关于docker:运行Docker命令显示WARNING-Error-loading-config-file

在应用Docker相干命令显示如下warning(看着超级不难受):WARNING: Error loading config file: /home/$USER_NAME/.docker/config.json: open /home/$USER_NAME/.docker/config.json: permission denied 解决方案:设置所属用户以及其文件目录的权限sudo chown "$USER_NAME":"$USER_NAME" /home/$USER_NAME/.docker -Rsudo chmod g+rwx "/home/$USER_NAME/.docker" -R在此之前若是没有设置用户退出docker组的话,请查看此文章: 正告打消!

September 1, 2020 · 1 min · jiezi

关于docker:Docker如何访问宿主机的文件目录

失常状况下,当build实现一个docker镜像之后,想要实现宿主机与docker进行交互式通过以下命令:docker run -it $docker_name:1.0 /bin/bash若是docker image中所需数据集在宿主机中存储的状况下,如何进行拜访呢? 解决方案:docker run -it -v $path_to_host_data:$new_path_in_docker deep_sleepnet:1.0 /bin/bash执行之后,相当于把此数据目录挂载在对应docker的目录中,用ls -lh即可查看并拜访所挂载数据。Dockerfile中最初一行运行相应的CMD ["python","test.py","--data-dir","$new_path_in_docker"]

September 1, 2020 · 1 min · jiezi

关于docker:Docker权限问题Got-permission-denied-while-trying-to-connect-to

在应用docker相干命令显示如下权限问题(出于安全性思考,尽可能少应用sudo):Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied 解决办法: sudo groupadd docker##增加docker相干用户组sudo gpasswd -a $user_name docker ##将此用户退出到docker组newgrp docker##更新用户组胜利解决!

September 1, 2020 · 1 min · jiezi

关于docker:Command-python-setuppy-egginfo-failed-with-error-code-1-in

应用 docker build -t $docker_name:test1.0 .建设docker image 呈现如下谬误:起因:base image的pip版本过低,在Dockerfile中pip install 命令之前退出以下命令:RUN pip install --upgrade pip 则问题解决:docker镜像创立胜利

September 1, 2020 · 1 min · jiezi

关于docker:云应用引擎HCaaS公测活动让容器化开发没有门槛

8月28日,一款新的serverless服务工具HCaaS(Hybrid Container as a Service,混合容器即服务)正式上线公测! HCaaS是面向须要云资源的企业和集体开发者,推出的一款公有化云利用引擎平台。通过HCaaS,以K8S为代表的容器技术的门槛不再居高临下,无论用户的现有业务是基于镜像、源码、可执行文件,都能够不便地迁徙到HCaaS,并享受只需专一业务自身的便捷。 HCaaS相比自建容器的劣势 用户可通过微信、GitHub、用户名明码这些形式便捷地登录,登录后间接进行研发和部署,大大节俭了后期筹备和前期运维的工夫。 什么是HCaaS HCaaS基于私有云和自建数据中心的优质云资源搭建混合云,封装了docker&k8s容器技术,并通过开箱即用的组件为利用提供撑持和模块化开发的便捷体验。 面向不同类型用户 1、为了便于虚机习惯的用户,提供了容器虚机的性能,完全一致的用户体验。 2、对于想转容器的用户,提供了镜像构建等一键容器化;并且能够通过智能运维组件,登录容器、查看日志和事件来疾速定位问题。 3、对于已应用容器的用户,通过疾速部署按钮即可三步建站、或者部署一个利用。 丰盛的利用场景 开发提效 买通代码提交、代码构建、镜像构建、部署上线的研发交付全流程。DevOps治理多套环境(命名空间隔离),资源秒级创立、用完开释,大大降低了人工和IT老本;通过自研的流水线缓存技术,能够极大地提高流水线的执行效率,减速2~6倍。 快捷建站 除了通过DevOps来继续迭代Web利用,HCaaS为尚未容器化的用户提供了快捷建站解决方案。通过抉择技术栈、配置网站代码/可执行文件、配置Web域名等三步,分分钟搭建起一个Web服务。 流量驱动 面对业务量的起伏,内部流量的季节性稳定。通过服务器负载指标和业务量指标监控,设定适合的阈值,弹性伸缩来应答流量洪峰。业务方可在短时间内启动大量解决节点,满足业务对海量计算资源的即时需要,用完即删,无需提前准备资源,最大限度的节俭IT老本。 公测流动 目前HCaaS已正式开始公测,注册登录即可支付300元平台金,收费试用一个月。参加公测并反馈bug或者试用体验的同学,咱们还将送出精美礼品一份。 公测地址:http://suo.im/6uIYdy 体验反馈地址:caolizohng@netbank.cn 礼品:《互联网企业容器技术实际》 后续版本会提供一键启停、海内减速、块存储自定义配置等性能,并引入阿里云OSS、RDS等模块。让用户不再须要关怀和运维底层IaaS和Kubernetes集群,只需专一于业务自身。

August 29, 2020 · 1 min · jiezi

关于docker:阿里云体验实验室-教你如何快速搭建Docker环境

体验平台简介面向开发者和中小企业打造的一站式、全云端的开发平台,关上浏览器就能够开发、调试、上线,所测即所得,并联合无服务器的模式,从新定义云原生时代的研发工作方法论。旨在升高开发者上手老本和中小企业的启动老本、经营老本、以及突发流量带来的运维危险。 教程介绍本教程介绍如何疾速搭建Docker环境,并应用Docker部署一个Nginx服务。 场景体验场景内容选自 阿里云体验实验室 阿里云体验实验室 提供一台配置了CentOS 7.7的ECS实例(云服务器)。通过本教程的操作,您能够基于ECS实例搭建Hadoop伪分布式环境。 阿里云 场景免费资源:https://developer.aliyun.com/adc/scenario/9fd79b8711984e309f20d82bc65a26fa 背景常识容器技术容器是一个容许咱们在资源隔离的过程中,运行应用程序和其依赖项的 、轻量的 、操作系统级别的虚拟化技术, 运行应用程序所需的所有必要组件都打包为单个镜像,这个镜像是能够重复使用的。当镜像运行时,它是运行在独立的环境中,并不会和其余的利用共享主机操作系统的内存、CPU或磁盘。这保障了容器内的过程不会影响到容器外的任何过程。 DockerDocker是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的Linux机器或Windows机器上,也能够实现虚拟化,容器是齐全应用沙箱机制,相互之间不会有任何接口。 Docker底层用的Linux的cgroup和namespace这两项技术来实现利用隔离,一个残缺的Docker有以下几个局部组成: Docker Client客户端Docker Daemon守护过程Docker Image镜像Docker Container容器 步骤一:装置Docker CEDocker有两个分支版本:Docker CE和Docker EE,即社区版和企业版。 本教程基于CentOS 7装置Docker CE。1.装置Docker的依赖库。 yum install -y yum-utils device-mapper-persistent-data lvm22.增加Docker CE的软件源信息。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.装置Docker CE。 yum makecache fastyum -y install docker-ce4.启动Docker服务。 systemctl start docker步骤二:配置阿里云镜像仓库(镜像减速)Docker的默认官网近程仓库是hub.docker.com,因为网络起因,下载一个Docker官网镜像可能会须要很长的工夫,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官网的镜像站点,从而减速官网镜像的下载。上面介绍如何应用阿里云镜像仓库。1.应用体验平台提供的阿里云子账号登录容器镜像服务控制台。2.单击镜像核心 > 镜像加速器,能够看到阿里云为您提供了一个专属的镜像减速地址。3.配置Docker的自定义镜像仓库地址。请将上面命令中的镜像仓库地址https://kqh8**.mirror.aliyuncs.com替换为阿里云为您提供的专属镜像减速地址。 tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://kqh8****.mirror.aliyuncs.com"]}EOF4.从新加载服务配置文件。 systemctl daemon-reload5.重启Docker服务。 systemctl restart docker步骤三:应用Docker装置Nginx服务1.查看Docker镜像仓库中Nginx的可用版本。 docker search nginx命令输入如下所示:2.拉取最新版的Nginx镜像。 docker pull nginx:latest命令输入如下所示:3.查看本地镜像。 docker images命令输入如下所示: ...

August 28, 2020 · 1 min · jiezi

关于docker:Docker第四部分Docker映像

原文作者:Jeff Hale原文地址:https://towardsdatascience.co... 翻译:付新圆 在本文中,您将学习如何放慢Docker构建周期并创立轻量级映像。遵循之前的文章中的食物隐喻,咱们将沙拉隐喻为Docker映像,同时缩小Docker映像的数量。 在本系列的第3局部中,咱们介绍了十几个Dockerfile指令。如果您错过了,请在这里查看文章: 《Docker-第3局部:十二个Dockerfile指令》。 FROM—指定根本(父)图像。 LABEL—提供元数据,包含维护者信息。 ENV—设置持久性环境变量。 RUN—运行命令并创立图像层,用于将软件包装置到容器中。 COPY-将文件和目录复制到容器。 ADD-将文件和目录复制到容器,能够反对本地.tar文件。 CMD—为执行中的容器提供命令和参数,能够笼罩参数,只能有一个CMD。 WORKDIR—为以下阐明设置工作目录。 ARG—定义在构建时传递给Docker的变量。 ENTRYPOINT—为执行中的容器提供命令和参数。争执仍然存在。 EXPOSE—裸露端口。 VOLUME—创立目录装置点以拜访和存储持久数据。 当初让咱们来看看如何设计Dockerfiles,以节俭开发映像和拉取容器时的工夫。 缓存Docker的劣势之一是它提供了缓存,帮忙您更快地迭代映像构建。 构建映像时,Docker会按程序执行每一个Dockerfile中的指令。在查看每个指令时,Docker在其缓存中寻找一个现有的两头映像,该两头映像能够重复使用,而不是创立一个新的(反复的)两头映像。 如果缓存生效,则使缓存生效的指令和所有后续的Dockerfile指令都会生成新的两头映像。一旦缓存生效,Dockerfile中的其余指令就都生效了。 因而,从Dockerfile的顶部开始,如果根本映像曾经在缓存中,就会重复使用它。否则,缓存将生效。 图:击中 而后,将下一条指令与从该根本映像派生的缓存中的所有子映像进行比拟。比拟每个缓存的两头映像,以查看指令是否找到缓存命中。如果是缓存未命中,则缓存有效。反复雷同的过程,直到达到Dockerfile的开端。 大多数新指令都只是与两头图像中的指令进行比拟。如果存在匹配项,则应用缓存的正本。 例如,当RUN pip install -r requirements.txt在Dockerfile中找到一条指令时,Docker会在其本地缓存的两头映像中搜寻同一条指令,不比拟旧的和新的requirements.txt文件的内容。 如果您更新要求,则此行为可能会呈现问题requirements.txt带有新软件包的文件并应用RUN pip install并应用新的软件包名称从新运行软件包装置。我将在稍后展现一些解决方案。 与其余Docker指令不同,ADD和COPY指令须要Docker查看文件的内容,以确定是否存在缓存命中。将援用文件的校验和与现有两头映像中的校验和进行比拟。如果文件内容或元数据已更改,则缓存生效。 上面是一些无效应用缓存的技巧: 能够通过传递--no cache=True敞开docker build。如果要对指令进行更改,则随后的每一层都将被频繁重建。要利用缓存,请在Dockerfile中搁置可能变动尽可能小的指令。ChainRUN apt-get update和apt-get install命令以防止缓存未命中问题。如果应用的是包安装程序(如pip)并带有requirements.txt文件,则请遵循以下模型,以确保您不会因应用requirements.txt中列出的旧软件包而收到古老的两头映像。CCOPY requirements.txt /tmp/RUN pip install -r /tmp/requirements.txtCOPY . /tmp/这些是无效应用Docker构建缓存的倡议。 放大尺寸Docker映像会变大,所以须要将它们放弃的较小,以便能够疾速拉进去并应用很少的资源。 让咱们瘦下来的物品! 图:沙拉 Alpine根本映像是一个残缺的Linux发行版,没有太多其余内容。下载通常小于5MB,但它须要破费更多的工夫来编写构建一个工作应用程序所需的依赖项的代码。 图:阿尔卑斯山 如果您的容器中须要Python,则能够应用Python Alpine构建。它蕴含Linux和Python,其余大部分都由您提供。 应用最新的Python Alpine构建并带有print(“ hello world”)脚本构建的图像重78.5 MB,这是Dockerfile: ...

August 28, 2020 · 1 min · jiezi

关于docker:一文搞定-Docker-容器技术与常用命令

简介: Docker 是一个开源的利用容器引擎,基于 Go 语言开发,Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的零碎。 Docker 简介Docker 是一个开源的利用容器引擎,基于 Go 语言开发,Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的零碎。 Docker 是世界领先的软件容器平台,Docker 官网的口号是”调试你的利用,而不是调试环境“。在进行多人合作开发时,开发者能够应用 Docker 来打消所谓“我这里运行是好的”(works on my machine)问题,运维人员应用 Docker 来并行的运行和治理利用来取得更优计算密度,基于各自独立的容器,不会因为环境起因导致利用运行谬误。 如下图所示,在工作当中,如果咱们面对这样多的服务、多个服务器,以及多种环境,咱们应该如何解决呢?如果还持续用传统的形式打包部署,咱们会节约多少工夫? 所以在 Docker 横空出世之前,利用打包始终是大部分研发团队的痛点,在 Docker 呈现后,它以更高效的利用系统资源、更高效的利用系统资源、统一的运行环境、继续交付和部署、更轻松的迁徙、更轻松的保护和拓展,6大长处迅速火了起来。 Docker 的三个外围概念镜像(Image) 是一个蕴含有文件系统的面向 Docker 引擎的只读模板。任何利用程序运行都须要环境,而镜像就是用来提供这种运行环境的。例如一个 Ubuntu 镜像就是一个蕴含 Ubuntu 操作系统环境的模板。容器(Container) 相似于一个轻量级的沙盒,能够将其看作一个极简的 Linux 零碎环境(包含 root 权限、过程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker 引擎利用容器来运行、隔离各个利用。容器是镜像创立的利用实例,能够创立、启动、进行、删除容器,各个容器之间是是互相隔离的,互不影响。 留神:镜像自身是只读的,容器从镜像启动时,Docker 在镜像的下层创立一个可写层,镜像自身不变。 仓库(Repository) 镜像仓库,是 Docker 用来集中寄存镜像文件的中央。Docker 装置Docker 是开源的商业产品,有两种版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版蕴含了一些免费服务,个别用不到。咱们上面将会演示 Docker CE 版本的应用办法。 Docker 反对很多操作系统平台,有大家罕用的 Microsoft Windows 系列操作系统(Docker 不反对 Windows 10 家庭版零碎),Linux 发行版和 MacOS 零碎。 ...

August 25, 2020 · 2 min · jiezi

关于docker:Rainbond-52稳定版发布对接已有Kubernetes集群支持多集群

Rainbond 5.2稳定版通过大量生产实践, ,距上个版本(5.2.0)已4个多月,在此期间咱们收到来自社区用户的反馈及问题后积极响应,不断完善5.2版本品质和体验。绝对于去年的5.1版本,Rainbond 5.2 版本全新个性包含对接已有Kubernetes集群、 多集群治理、利用复制、 新UI视图 、OpenAPI凋谢 等20多个重大性能变更。 > Rainbond 是云原生利用治理平台,不必改代码就能实现微服务架构,不必学容器就能治理Kubernetes集群,帮企业实现利用上云,一站式将任何企业应用继续交付到Kubernetes集群、混合云、多云等基础设施。 1.重要性能解读1.1对接已有Kubernetes集群新版 Rainbond 应用新的装置形式来对接Kubernetes。对于Kubernetes而言Rainbond整个架构是一套利用,咱们定义了Rainbond-operator来将Rainbond装置到Kubernetes集群中,应用Kubernetes来治理Rainbond组件,同时Rainbond又能够反过来治理调度Kubernetes资源。 Rainbond反对对接 Kubernetes 1.13 以上版本 , 同时也反对对接 K3s。 1.2多集群治理多集群治理性能在之前的版本只存在于企业版本,从5.2开始,多集群治理性能引入到开源版本。 Rainbond 的集群是基于Kubernetes集群封装的以利用为核心的资源调度治理单元,对外提供规范的API。用户能够将本地自建集群、阿里云、AWS、华为云等IaaS厂商的云服务集群,对立托管到Rainbond,用户只须要管利用,利用能够通明在多集群上备份和迁徙,不被IaaS厂商绑定; 目前Kubernets集群治理能力曾经内置于阿里云、华为云等厂商中,或者Rancher等开源产品也在Kubernetes集群治理方面十分优良。Rainbond在此不再反复的造轮子。在专一于应用层治理的根底上,集群运维治理维度重点与其余产品进行交融。内置Kubernetes Dashboard,提供了集群可视化操作面板。 1.3利用复制利用复制服务于企业的利用开发过程,绝对于基于组件库的利用模版化,复制在开发场景中会保留原生状态,更加灵便。比方以下需要场景利用复制十分高效: - 多个新性能在不同的分支进行同时迭代,那么不同的分支代码须要独立的部署; - 团队中多个开发者进行开发,每个开发者都须要本人独立的一套开发环境; - 开发环境利用开发实现,心愿疾速部署到测试环境或预公布环境; - 生产环境灰度公布,心愿疾速部署指定组件应用指定的源代码版本; 1.4其余变更- 新增OpenAPI反对 - 新增HTTPs证书主动签发性能 rainbond-cert-controller - 新增内置阿里云日志收集插件、fileBeat日志收集插件 - 新增大量集群监控指标和内置报警规定 - 新增集群租户资源占用排行展现 - 新增租户资源限额 - 反对对接多个第三方Oauth服务 - 性能优化: - 改良集群资源统计相干API,资源查问性能大大晋升 - 移除内存长期存储,新增磁盘驱动的长期存储类型 - 改良服务注册和服务发现机制,防止出现单实例etcd服务重启后服务服务发现失败 - UI 加强: - 重构组件容器控制台,反对管制组件多个实例的所有容器 ...

August 25, 2020 · 1 min · jiezi

关于docker:win10-家庭版安装-Docker-Desktop-记录

Docker Desktop 本来只能在 win10 专业版上装置,但我在网上查了下,咱们家庭版在简略操作后也能装。 一、开启 Hyper-Vwin10 家庭版不带 Hyper-V,不过能够通过一段代码开启: pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del hyper-v.txtDism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL可能在装置 Docker Desktop 时报错: 所以最好也执行一下这段代码: pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*containers*.mum >containers.txtfor /f %%i in ('findstr /i . containers.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del containers.txtDism /online /enable-feature /featurename:Containers -All /LimitAccess /ALLpause2020年5月27日补充:依据网友反馈,如果不执行这段代码,装置过程可能不会报错,但之后执行 docker ps 指令时有可能会报错: ...

August 24, 2020 · 1 min · jiezi

关于docker:使用-Docker-搭建-Hadoop-集群

创立容器# 创立自定义网络docker network create --subnet=172.18.0.0/16 mynetwork# 启动容器# cluster-masterdocker run -itd --privileged --name cluster-master -h cluster-master -p 18088:18088 -p 9870:9870 --net mynetwork --ip 172.18.0.2 centos:latest /usr/sbin/init# cluster-slavesdocker run -itd --privileged --name cluster-slave1 -h cluster-slave1 --net mynetwork --ip 172.18.0.3 centos:latest /usr/sbin/initdocker run -itd --privileged --name cluster-slave2 -h cluster-slave2 --net mynetwork --ip 172.18.0.4 centos:latest /usr/sbin/initdocker run -itd --privileged --name cluster-slave3 -h cluster-slave3 --net mynetwork --ip 172.18.0.5 centos:latest /usr/sbin/init# docker run -itd --privileged -v /System/Volumes/Data/data/personal/docker/hadoop/sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave4 -h cluster-slave4 --net mynetwork --ip 172.18.0.6 centos:latest /usr/sbin/init装置 OpenSSH 免密登录master 装置 openSSH# 进入master容器中docker exec -it cluster-master /bin/bash# 在容器外部执行yum -y install openssh openssh-server openssh-clients vim# 去掉文件 Port 22 PermitRootLogin(开启近程登录) yes PasswordAuthentication(应用明码) yesvim /etc/ssh/sshd_config# 启动 openSSHsystemctl start sshd# 生成ssh keyssh-keygen -t rsa # 一路回车就好cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keysslave 装置 openSSH(slave1 slave2 slave3 同理装置)# 进入master容器中docker exec -it cluster-slave1 /bin/bash# 在容器外部执行yum -y install openssh openssh-server openssh-clients vim# 去掉文件 Port 22 PermitRootLogin(开启近程登录) yes PasswordAuthentication(应用明码) yesvim /etc/ssh/sshd_config# 启动 openSSHsystemctl start sshd# 应用 master 的 ~/.ssh/*替换 slave1的~/.ssh/*systemctl start sshdAnsible装置yum -y install epel-releaseyum -y install ansible# 批改vi /etc/ansible/hosts`[cluster]cluster-mastercluster-slave1cluster-slave2cluster-slave3[master]cluster-master[slaves]cluster-slave1cluster-slave2cluster-slave3`批改 hosts:>/etc/hostscat >>/etc/hosts<<EOF127.0.0.1 localhost172.18.0.2 cluster-master172.18.0.3 cluster-slave1172.18.0.4 cluster-slave2172.18.0.5 cluster-slave3EOFsource ~/.bashrc# 散发至slaveansible cluster -m copy -a "src=~/.bashrc dest=~/"装置 jdk和hodoop (四台机器都要装置)# 将宿主机 jdk文件和hadoop文件挪动至docker容器docker cp ~/Download/hadoop-3.3.0.tar.gz 容器ID或容器名称:/optdocker cp ~/Download/jdk-8u261-linux-x64.tar.gz 容器ID或容器名称:/opt# 将文件挪动至 slavescp ./* root@cluster-slave1:/opt/scp ./* root@cluster-slave2:/opt/scp ./* root@cluster-slave3:/opt/# 解压tar -zxvf hadoop-3.3.0.tar.gztar -zxvf jdk-8u261-linux-x64.tar.gz# 配置环境变量 vim ~/.bashrc`# hadoopexport HADOOP_HOME=/opt/hadoop-3.3.0export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH#javaexport JAVA_HOME=/opt/jdk1.8.0_261export PATH=$JAVA_HOME/bin:$PATH`source ~/.bashrc配置hadoop运行所需配置文件

August 20, 2020 · 1 min · jiezi

关于docker:Docker-创建固定-IP-的-centos-容器

拉取镜像docker pull centos创立自定义网络docker network create --subnet=172.18.0.0/16 mynetwork启动固定ip的centos容器docker run -itd --privileged --name centos1 --net mynetwork --ip 172.18.0.11 centos:latest /usr/sbin/initdocker run -itd --privileged --name centos2 --net mynetwork --ip 172.18.0.12 centos:latest /usr/sbin/initdocker run -itd --privileged --name centos3 --net mynetwork --ip 172.18.0.13 centos:latest /usr/sbin/init查看 docker 容器相干详情(包含ip)docker psdocker inspect 容器ID或容器名称

August 20, 2020 · 1 min · jiezi

关于docker:docker快速入门

闲来无事,温习docker的时候,正好写一篇疾速入门 根底环境零碎为centos7.7,发现没有docker,嗯,一条命令搞定 yum -y install docker #yum装置dockersystemctl start docker.service #启动docker定义Dockerfiledockerfile用来构建镜像的文本文件,文本内容为构建镜像所须要的指令和阐明 定义一个超级简略的Dockerfile [root@te1 app]# cat DockerfileFROM python:2.7-slim #跟面向对象语言的类一样,示意以哪个根底镜像定制WORKDIR /data/docker/app #docker工作目录COPY . /data/docker/app #复制以后文件到/data/docker/app目录RUN pip install -r requirements.txt #在docker build时运行,此处通过pip装置flaskCMD ["python", "hello.py"] #在docker run时运行此命令[root@te1 app]# cat requirements.txtflask[root@te1 app]# cat hello.py#一个简略的flask web站点from flask import Flaskapp = Flask(__name__)@app.route("/")def hello(): return 'hello world'if __name__ == "__main__": app.run(host='0.0.0.0', port=8000)通过Dockerfile编译镜像cd /data/docker/app && docker build -t hello .查看镜像docker images 通过镜像运行一个容器docker run -it -d --name 'first-hello' -p80:8000 hello-it -i 规范输出,-t示意容许一个终端-d 后盾运行--name 容器名字-p 对外裸露端口,此处将docker的8000端口映射为80向外裸露 ...

August 20, 2020 · 1 min · jiezi

关于docker:Docker商业版受限胖容器是个选择

前情概要 8月13日,Docker 公司更新了网站服务协定,条款申明,禁止禁运国家和被列入「美国实体清单」的组织和集体应用带有该服务协定链接的 Docker 网站和所有相干网站。这一更新协定迅速引起了业内的宽泛关注与探讨,一时间无关“ Docker 被禁止应用”的探讨此起彼伏。 理论受限的产品与服务是什么? 联合1.1、1.2 和 2.5 条款,能够明确的是: Docker 公司禁止被列入“美国实体清单”名单中的企业应用 docker.inc 网站提供的Docker 商业版 Docker-EE 及 Docker 其余服务,如 Docker Hub。收费用户在应用 Docker Hub 时会在镜像数量、pull/push频次等方面受到限制,比方收费账号6个小时内限度下载200次等。尽管企业外部根本会部署本身的公有镜像仓库,但在构建或应用根底镜像时,可能依然会受到此限度。业内宽泛应用的 Docker 开源容器引擎 Moby,因其采纳了Apache License 2.0协定,并不会受到此影响,即开源版 Docker-CE 不受此影响。预防和升高危险,胖容器是个抉择 BoCloud博云作为国内率先应用容器开源技术的云计算厂商之一,对此次事件也在放弃亲密关注。 依据 Linux 基金会公布的“理解美国对开源我的项目的进口管制”,能够明确“已公开公布”并且属于“开源”的我的项目不受进口管制服务条款的影响。 博云容器云BeyondContainer 应用的是 Docker 开源社区版本 Docker-CE,因其为“已公开公布”并且属于“开源”的我的项目,因而 Docker-CE 该开源版本此次不受影响。另外,此次条款影响私有镜像仓库 Docker Hub 应用,博云的客户应用的是公有镜像仓库,也不会受到 Docker Hub 受限的影响。 尽管此次 Docker 开源版本没有受到影响与限度,但开源不等于不受管制。从久远倒退角度而言,企业也须要提前思考其余策略,来预防可能呈现的进一步限度。为预防和升高危险,企业可思考应用国内容器云厂商自行保护的容器版本,或抉择同时反对多种开源容器运行时的容器云产品。 2019年底,博云公布了自主研发且自行保护的容器版本:BeyondVM胖容器(兼容传统利用,蓄力边缘云——博云胖容器解决方案)。BeyondVM胖容器提供绝对齐备的过程树和零碎服务的容器环境,具备更好的隔离性,反对业务同时取得容器和虚拟机的运行体验,无需扭转代码即可实现向容器平台的迁徙,帮忙客户疾速容器化存量利用,疾速渐进式地拥抱云原生技术。 利用 BeyondVM 胖容器技术,能够实现: 同时兼容原生容器和虚拟机的应用体验。比虚拟机轻量的资源分配能力,以不便资源疾速申请、弹性。相似虚拟机的应用体验,可登陆,可任意装置组件。有固定IP地址,胖容器从创立到删除,IP地址放弃不变。能够通过SSH远程登陆零碎。严格的资源隔离,如CPU、内存等。JVM,监控类工具看到的资源不是整个物理机的资源,而是实在调配给胖容器应用的资源。7月29日,中国信息通信研究院在 2020可信云大会上公布了国内首个云原生技术生态图景,BeyondVM 胖容器入选该图景的容器技术版块。目前,BeyondVM 胖容器曾经过大规模生产利用测验,如有极限状况产生,能够在不降级版本的前提下,间接应用 BeyondVM 胖容器代替 Docker,并且能取得更好的隔离性,以及对有状态的利用提供更强的反对能力。 反对多种容器运行时,防止繁多技术绑定 容器运行时作为撑持 kubernetes 节点的底层要害软件,近年来随着 kubernetes 的进一步倒退,业内诞生了多种容器运行时。以后,在谈到容器运行时,就不得不提社区中的两个协定:OCI 和 CRI。这两种不同的协定,在各自畛域各有不同的规范实现。 ...

August 20, 2020 · 1 min · jiezi

关于docker:详解Docker中ImageContainer与-Volume-的迁移

作者:匿蟒 原文:https://note.qidong.name/2018... 曾经部署的容器化服务,也不是不须要保护的。而且,因为生产环境往往有这样那样的严格要求,往往须要些非常规操作。Image(镜像)、Container(容器)和Volume(数据卷)的迁徙,就是一类有用的非常规操作。 以下镜像,均以最简略的Alpine为例。 Image镜像的迁徙,实用于离线环境。 个别离线环境,都会自建Docker Registry。无论官网的,还是最近风行的Harbor,都是不错的抉择。然而,这个世界上就是有些环境,或者说一些环境在某些期间,没有外网,也没有外部的Registry。这个时候要部署Docker的服务,怎么办? 只能通过镜像的迁徙。实际上,Harbor的offline installer,就是采纳这种模式。 Save# use stdoutdocker save alpine > /tmp/alpine.tar# or write to a file directlydocker save alpine -o /tmp/alpine.tar举荐应用-o的模式,因为利用stdout的做法尽管直观,但在某些场景下有效,比方利用ssh近程执行命令。 Load# use stdoutdocker load < /tmp/wekan.tar# or read from a file directlydocker load -i /tmp/wekan.tarContainer容器的迁徙,实用于曾经上线,且状态简单、从零开始启动不能失常工作的服务。容器迁徙的包,蕴含了镜像。 Export先筹备一个正在运行的服务,并且弄脏环境。 $ docker run --rm -d --name test alpine tail -f /dev/null9232f0c1dafe0f29918f281ca37bb41914677e818cb6f252abf3dab3be04fbb2$ docker exec test touch proof$ docker exec test ls -hl proof-rw-r--r-- 1 root root 0 Nov 20 14:33 proof#执行导出操作:docker export test -o test.tarImport首先,敞开方才运行的服务。 $ docker kill testtest#执行导入操作:$ docker import test.tar test-imgsha256:e03727eeba7e16dd3acfcc7536f1244762508f9b6b9856e49cc837c1b7ffa444要留神的是,import后失去的是一个镜像,相当于是执行了docker commit后的内容。当然,docker commit不是一个举荐的操作,所以容器的导入、导出,就显得不是那么的悦目。 最初,查看之前创立的文件。 $ docker run --rm -d --name test test-img tail -f /dev/nullee29cb63bb2d3ed8ac890789ba80c4fe4078b9d5343a8952b6217d64b4dcbe23$ docker exec test ls -hl proof-rw-r--r-- 1 root root 0 Nov 20 14:33 proof能够看到,后面创立的文件是存在的,并且工夫戳完全一致。 ...

August 20, 2020 · 1 min · jiezi

关于docker:PhpStorm中连接Docker容器配置

事先筹备确保电脑中装置“Docker Quickstart Terminal”装置vbox虚拟机(第一步装置实现会主动装置vbox并且主动创立名为default)导入镜像或者拉取须要的镜像docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]例如:docker import mysql001.tar mysql_testdocker pull [options] name[:tag|@digest] 例如:docker pull ubuntu:14.04创立并启动容器物理机33062端口 映射到 容器 3306端口物理机10085端口 映射到 容器80端口起名叫 mysql_simdocker run [OPTIONS] IMAGE [COMMAND] [ARG...]例如:docker run -itd -p 33062:3306 -p 10085:80 --name mysql_sim mysql_test /bin/bash配置VBOX本地门路挂载到虚拟机中设置-共享文件夹-固定调配 端口转发网络-高级-端口转发主机ip:本地电脑ip子系统ip:虚拟机ip 配置phpstorm文件-设置-语言和框架-PHP-CLI解释器 增加-Docker->抉择服务器 创立->Docker机器->门路映射 phpstorm启动docker启动docker 抉择容器启动挂载目录到容器中 实现能够关上网页输出ip:端口进行拜访了

August 18, 2020 · 1 min · jiezi

关于docker:在centos上安装docker

一、环境要求1.1docker版本命名规定与版本抉择###docker 0.1-1.13.1命名规定 ###docker 17.3(2017年之后)命名规定: Docker CE/EE 每个季度公布一次季度版本, 每年会公布 4 个季度版本, 例如:17.03, 17.06, 17.09, 17.12 , Docker CE 季度版本自公布后会有 4 个月的保护期.社区版 Docker CE 每个月还会公布一个 EDGE 版本,例如 17.04, 17.05, 17.07, 17.08, 17.10, 17.11在补丁修复版本,版本号格局为: YY.MM.<patch>,YY.MM 代表年月,patch 代表补丁号,从 0 开始,例如:在季度版本 (如 17.03) 的保护期内,bug 修复相干的更新会以 patch 递增的形式公布, 比方 17.03.0 -> 17.03.1 -> 17.03.2.->17.03.3版本选用个别选用下半年的版本会比较稳定,上半年的版本因为公布个性多,出问题的概率也比拟大。1.2docker各版本与centos反对Docker CE 反对 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但因为内核版本比拟 低,局部性能(如 `overlay2` 存储层驱动)无奈应用,并且部 分性能可能不太稳固。本次装置应用centos 8 作为试验环境,顺带学习一下centos 8的个性与命令,目前阿里云已反对centos 8。1.3装置docker 所需的依赖包反对1.4装置docker 须要的系统配置二、开始装置(本次装置低版本,下篇讲docker降级)2.1 获取官网docker装置脚本并装置wget -qo https://get.docker.com/|sh注:如不应用官网版本而应用其余linux发行商的优化版本可能导致不兼容或异样退出的状况 ...

August 17, 2020 · 1 min · jiezi

关于docker:在centos上安装docker

一、环境要求1.1docker版本命名规定与版本抉择###docker 0.1-1.13.1命名规定 ###docker 17.3(2017年之后)命名规定: Docker CE/EE 每个季度公布一次季度版本, 每年会公布 4 个季度版本, 例如:17.03, 17.06, 17.09, 17.12 , Docker CE 季度版本自公布后会有 4 个月的保护期.社区版 Docker CE 每个月还会公布一个 EDGE 版本,例如 17.04, 17.05, 17.07, 17.08, 17.10, 17.11在补丁修复版本,版本号格局为: YY.MM.<patch>,YY.MM 代表年月,patch 代表补丁号,从 0 开始,例如:在季度版本 (如 17.03) 的保护期内,bug 修复相干的更新会以 patch 递增的形式公布, 比方 17.03.0 -> 17.03.1 -> 17.03.2.->17.03.3版本选用个别选用下半年的版本会比较稳定,上半年的版本因为公布个性多,出问题的概率也比拟大。1.2docker各版本与centos反对Docker CE 反对 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但因为内核版本比拟 低,局部性能(如 `overlay2` 存储层驱动)无奈应用,并且部 分性能可能不太稳固。本次装置应用centos 8 作为试验环境,顺带学习一下centos 8的个性与命令,目前阿里云已反对centos 8。1.3装置docker 所需的依赖包反对1.4装置docker 须要的系统配置二、开始装置(本次装置低版本,下篇讲docker降级)2.1 获取官网docker装置脚本并装置wget -qo https://get.docker.com/|sh注:如不应用官网版本而应用其余linux发行商的优化版本可能导致不兼容或异样退出的状况 ...

August 17, 2020 · 1 min · jiezi

关于docker:更优雅的配置docker运维业务中的环境变量

[TOC] 对于应用 docker/docker-compose/docker stack 进行开发、部署的用户,可能会遇到以下问题 如何无效地区分 develop/staging/production 环境配置?如何有效应对在不同环境甚至差别的架构下部署的需要?有教训的同学晓得环境变量是问题的答案,但本内容并不止于夸夸其谈,而是联合 aspnet core 示例进行阐明,并给出 GNU 工具阐明和进行 python 实现。 docker-compose咱们经常基于 compose 文件进行部署,但纯动态的 compose 文件可能无奈满足以下需要 为了从宿主机读取数据或者从容器长久化数据,咱们须要调整目录挂载地位;为了防止端口抵触咱们须要批改端口映射;环境变量docker-compose 反对环境变量,咱们能够在 compose 文件中退出动静元素来批改局部行为,一个应用变量进行目录和端口映射的 compose 文件如下: version: '3'networks: default:services: nginx: image: nginx networks: - default volume: - ${nginx_log}:/var/log/nginx ports: - ${nginx_port-81}:80该 compose 文件对变量 nginx_port 提供了默认值81。在 linux 下为了应用环境变量咱们有若干种形式: 全局环境变量:能够应用 export 申明过程级别环境变量:能够应用 source 或 env 引入souce 是 bash 脚本的一部分,这会引入额定的复杂度,而 env 应用起来很简略,应用它加上键值对及指标命令即可,模式如 env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...],咱们应用它进行演示。 $ rm .env$ docker-compose up -dWARNING: The Docker Engine you're using is running in swarm mode.Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.To deploy your application across the swarm, use `docker stack deploy`.Starting docker-compose-env-sample_nginx_1 ... done$ docker-compose ps Name Command State Ports-----------------------------------------------------------------------------------------------docker-compose-env-sample_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:81->80/tcp$ docker-compose down$ env nginx_port=82 docker-compose up -dWARNING: The Docker Engine you're using is running in swarm mode.Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.To deploy your application across the swarm, use `docker stack deploy`.Creating network "docker-compose-env-sample_default" with the default driverCreating docker-compose-env-sample_nginx_1 ... done$ docker-compose ps Name Command State Ports-----------------------------------------------------------------------------------------------docker-compose-env-sample_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:82->80/tcp能够看到应用 env 申明的变量 nginx_port=82 批改了容器的端口映射。尽管 env 反对多条键值对,但实在环境里变量较多、变量值简短,尽管能够通过 bash 脚本来治理,但可读性、可维护性太差,所以 docker-compose 提供了基于文件的环境变量机制。 ...

August 17, 2020 · 6 min · jiezi

关于docker:Docker-Nvidia-Driver-Nvidia-Docker-推荐安装步骤

操作系统: Ubuntu 16.04/18.04装置 Nvidia Driver举荐应用 graphics drivers PPA 装置 Nvidia 驱动。 sudo add-apt-repository ppa:graphics-drivers/ppasudo apt update检测举荐的 Nvidia 显卡驱动: ubuntu-drivers devices装置 Nvidia 驱动(以下是 RTX2060 上的状况): # Ubuntu 16.04 only search 430 for CUDA < 10.2apt-cache search nvidiasudo apt install nvidia-430# Ubuntu 18.04 could search 440 for CUDA <= 10.2apt-cache search nvidia | grep ^nvidia-driversudo apt install nvidia-driver-440驱动对应的 CUDA 版本,请见 CUDA Compatibility 。最初, sudo reboot 重启。之后,运行 nvidia-smi 输入 Nvidia 驱动信息: ...

August 16, 2020 · 3 min · jiezi

关于docker:Docker-Nvidia-Driver-Nvidia-Docker-推荐安装步骤

操作系统: Ubuntu 16.04/18.04装置 Nvidia Driver举荐应用 graphics drivers PPA 装置 Nvidia 驱动。 sudo add-apt-repository ppa:graphics-drivers/ppasudo apt update检测举荐的 Nvidia 显卡驱动: ubuntu-drivers devices装置 Nvidia 驱动(以下是 RTX2060 上的状况): # Ubuntu 16.04 only search 430 for CUDA < 10.2apt-cache search nvidiasudo apt install nvidia-430# Ubuntu 18.04 could search 440 for CUDA <= 10.2apt-cache search nvidia | grep ^nvidia-driversudo apt install nvidia-driver-440驱动对应的 CUDA 版本,请见 CUDA Compatibility 。最初, sudo reboot 重启。之后,运行 nvidia-smi 输入 Nvidia 驱动信息: ...

August 16, 2020 · 3 min · jiezi

关于docker:Docker-Nvidia-Driver-Nvidia-Docker-推荐安装步骤

操作系统: Ubuntu 16.04/18.04装置 Nvidia Driver举荐应用 graphics drivers PPA 装置 Nvidia 驱动。 sudo add-apt-repository ppa:graphics-drivers/ppasudo apt update检测举荐的 Nvidia 显卡驱动: ubuntu-drivers devices装置 Nvidia 驱动(以下是 RTX2060 上的状况): # Ubuntu 16.04 only search 430 for CUDA < 10.2apt-cache search nvidiasudo apt install nvidia-430# Ubuntu 18.04 could search 440 for CUDA <= 10.2apt-cache search nvidia | grep ^nvidia-driversudo apt install nvidia-driver-440驱动对应的 CUDA 版本,请见 CUDA Compatibility 。最初, sudo reboot 重启。之后,运行 nvidia-smi 输入 Nvidia 驱动信息: ...

August 16, 2020 · 3 min · jiezi

关于docker:Docker-docker-pull-wget-curl-git-clone-等如何更快

1) Docker 配置1.1) daemon.json 配置镜像门路: /etc/docker/daemon.json文档: Config Daemonregistry-mirrors 设定镜像,减速 docker pull 官网镜像。以下举例为阿里源。 { "experimental": true, "features": { "buildkit": true }, "registry-mirrors": ["https://<your token>.mirror.aliyuncs.com"]}1.2) config.json 配置代理门路: ~/.docker/config.json文档: Network Proxyproxies 设定 HTTP, HTTPS 代理,减速如 wget, curl 等 HTTP 申请。 { "proxies": { "default": { "httpProxy": "http://192.168.1.100:7890", "httpsProxy": "http://192.168.1.100:7890", "noProxy": "localhost, 127.0.0.0/8, ::1" } }}如果没有代理服务可用,可参考后文其余减速形式。 2) 其余减速形式2.1) 包管理工具配置各自镜像如 apt pip 等,能够配置其各自的镜像源。罕用镜像源,可见: 清华源: https://mirrors.tuna.tsinghua...中科大: http://mirrors.ustc.edu.cn/阿里源: https://developer.aliyun.com/...网易源: http://mirrors.163.com/2.2) 代码仓库镜像到国内平台git clone 原仓库太慢,可于国内代码托管站点(如 Gitee)上找下镜像或本人导入一份,而后 git clone 镜像仓库地址。 ...

August 16, 2020 · 1 min · jiezi

关于docker:Docker-docker-pull-wget-curl-git-clone-等如何更快

1) Docker 配置1.1) daemon.json 配置镜像门路: /etc/docker/daemon.json文档: Config Daemonregistry-mirrors 设定镜像,减速 docker pull 官网镜像。以下举例为阿里源。 { "experimental": true, "features": { "buildkit": true }, "registry-mirrors": ["https://<your token>.mirror.aliyuncs.com"]}1.2) config.json 配置代理门路: ~/.docker/config.json文档: Network Proxyproxies 设定 HTTP, HTTPS 代理,减速如 wget, curl 等 HTTP 申请。 { "proxies": { "default": { "httpProxy": "http://192.168.1.100:7890", "httpsProxy": "http://192.168.1.100:7890", "noProxy": "localhost, 127.0.0.0/8, ::1" } }}如果没有代理服务可用,可参考后文其余减速形式。 2) 其余减速形式2.1) 包管理工具配置各自镜像如 apt pip 等,能够配置其各自的镜像源。罕用镜像源,可见: 清华源: https://mirrors.tuna.tsinghua...中科大: http://mirrors.ustc.edu.cn/阿里源: https://developer.aliyun.com/...网易源: http://mirrors.163.com/2.2) 代码仓库镜像到国内平台git clone 原仓库太慢,可于国内代码托管站点(如 Gitee)上找下镜像或本人导入一份,而后 git clone 镜像仓库地址。 ...

August 16, 2020 · 1 min · jiezi

关于docker:Docker-docker-pull-wget-curl-git-clone-等如何更快

1) Docker 配置1.1) daemon.json 配置镜像门路: /etc/docker/daemon.json文档: Config Daemonregistry-mirrors 设定镜像,减速 docker pull 官网镜像。以下举例为阿里源。 { "experimental": true, "features": { "buildkit": true }, "registry-mirrors": ["https://<your token>.mirror.aliyuncs.com"]}1.2) config.json 配置代理门路: ~/.docker/config.json文档: Network Proxyproxies 设定 HTTP, HTTPS 代理,减速如 wget, curl 等 HTTP 申请。 { "proxies": { "default": { "httpProxy": "http://192.168.1.100:7890", "httpsProxy": "http://192.168.1.100:7890", "noProxy": "localhost, 127.0.0.0/8, ::1" } }}如果没有代理服务可用,可参考后文其余减速形式。 2) 其余减速形式2.1) 包管理工具配置各自镜像如 apt pip 等,能够配置其各自的镜像源。罕用镜像源,可见: 清华源: https://mirrors.tuna.tsinghua...中科大: http://mirrors.ustc.edu.cn/阿里源: https://developer.aliyun.com/...网易源: http://mirrors.163.com/2.2) 代码仓库镜像到国内平台git clone 原仓库太慢,可于国内代码托管站点(如 Gitee)上找下镜像或本人导入一份,而后 git clone 镜像仓库地址。 ...

August 16, 2020 · 1 min · jiezi

关于docker:docker-内存-limit-与-swap-限制

论断主机层没有开启 swap ,容器运行时无论怎么设置 --memory-swap,都不会应用到 swap,容器最大能应用的内存等于设置的内存限度; 主机层开启了 swap 如下表: memorymemory-swap成果M负数 S容器最大可用内存为S,其中 ram 为 M,swap 为(S-M),若 S=M 则无可用 swap 资源M0相当于未设置 memory-swapM-1容器最大可用内存为 M+主机可用swapM未设置容器最大可用内存为 2M,其中 ram 为 M,swap 为 M<!-- more --> 主机开启 swap不设置 --memory-swap 参数容器最大能够应用 2 倍的 --memory 内存 (可应用的 swap 大小跟内存限度的大小一样) 限度内存 100M,不设置 --memory-swap,容器申请应用 2X90M=180M,程序能够失常运行;docker stats 显示应用的内存量等于限度的内存量;查看 cgroup 里的 memory.stat 能够看到,swap 应用了大略 80M 限度内存 100M,不设置 --memory-swap,容器申请应用 2X150M=300M,因为最大容许应用内存 200M,容器启动失败; 设置 --memory-swap 100M限度内存 100M,设置 --memory-swap=100M,容器申请应用 2X51M=102M,因为最大容许应用内存 100M,容器启动失败; ...

August 16, 2020 · 1 min · jiezi

关于docker:docker-内存-limit-与-swap-限制

论断主机层没有开启 swap ,容器运行时无论怎么设置 --memory-swap,都不会应用到 swap,容器最大能应用的内存等于设置的内存限度; 主机层开启了 swap 如下表: memorymemory-swap成果M负数 S容器最大可用内存为S,其中 ram 为 M,swap 为(S-M),若 S=M 则无可用 swap 资源M0相当于未设置 memory-swapM-1容器最大可用内存为 M+主机可用swapM未设置容器最大可用内存为 2M,其中 ram 为 M,swap 为 M<!-- more --> 主机开启 swap不设置 --memory-swap 参数容器最大能够应用 2 倍的 --memory 内存 (可应用的 swap 大小跟内存限度的大小一样) 限度内存 100M,不设置 --memory-swap,容器申请应用 2X90M=180M,程序能够失常运行;docker stats 显示应用的内存量等于限度的内存量;查看 cgroup 里的 memory.stat 能够看到,swap 应用了大略 80M 限度内存 100M,不设置 --memory-swap,容器申请应用 2X150M=300M,因为最大容许应用内存 200M,容器启动失败; 设置 --memory-swap 100M限度内存 100M,设置 --memory-swap=100M,容器申请应用 2X51M=102M,因为最大容许应用内存 100M,容器启动失败; ...

August 16, 2020 · 1 min · jiezi

关于docker:Docker-禁止被列入美国实体名单的国家使用开源被截流

技术编辑:徐九丨发自:思否编辑部 Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的Linux机器上,也能够实现虚拟化。 近日,Docker 官网更新了一篇最新的《服务条款》,其中有一项条款内容为: 该条款粗心为: Docker 提供的相干服务受美国商务部和美国财政部外国资产管制办公室治理的美国进口管制条例的束缚,该服务以及您拜访的任何用户内容或第三方内容不得被应用、转移或者以其余形式进口或再进口到美国施行禁运的国家(统称为“被禁运国家”),或者美国商务部的实体名单。《服务条款》表明,该条款将于 2020 年 8 月 13 日起失效。 2020 年 7 月 8 日,Linux 基金会曾公布了一份中英文版的《理解开源科技和美国进口管制》的白皮书。其中解释了为何美国的进口管制法规个别不会对开源模式造成影响,并通过举例的形式阐明和探讨为何开源软件的进口在个别状况下不受制于 EAR。 但时隔一个月, Docker 作为一个被寰球开发者宽泛应用的开源利用容器引擎,就正式收回申明示意相干产品禁止被列入美国“实体名单”的国家、企业、集体应用。 据统计,目前中国 IT 公司被列入贸易管制“实体名单”的企业包含:华为、商汤、依图、旷视、海康威视、大华、科大讯飞、美亚柏科、颐信科技、奇虎360、战火科技团体、东方网力、达闼科技、云从科技、中科曙光、海光等。 服务条款原文:https://www.docker.com/legal/...参考资料起源:云头条,《Docker 禁止被列入美国“实体名单”的国家、企业、集体应用》

August 16, 2020 · 1 min · jiezi

关于docker:Docker学习笔记一初遇篇

Docker是十分的风行的,前段时间发现自己对Docker还是仅仅停留在会用几个命令的境地上,于是我就打算零碎的学学。Docker官网文档写的还是挺具体的,举荐大家学习的时候去看下官网文档,我当初学习新技术个别都先去官网转转。是什么?Docker is a platform for developers and sysadmins to build, run, and share applications with containers. Docker是一个开发者用来构建、运行和共享容器应用程序的平台。先不论容器化,咱们该如何了解平台这个词呢? 平台的意义很宽泛,不同人从事不同行业甚至在同一行业从事不同的方向对平台的意识和了解可能都会不同。总体来说,平台也是有共性的,通常的了解是指一种根底的可用于衍生其余产品的环境.这种环境可能只用于产生其余的产品,也有可能在产生其余产品的之后还会是这些衍生产品生存的环境。---《平台:自媒体时代用影响力赢取惊人财产》粗略的讲,平台是一种提供服务的环境,这样讲可能有些形象了,咱们举一些例子来阐明平台,比方为人熟知的淘宝、京东能够算电商平台。商户能够在电商平台上卖东西,消费者在下面买货色。比方外卖平台,咱们想到的是饿了么、美团,这些平台为消费者应用这些外卖平台找到本人想吃的,商家将本人的商品放上去减少销售形式。 外卖平台上提供的是外卖服务,消费者在平台上找到本人想吃的饭,个别由外卖平台配送,个别的商家也能够退出到外卖平台提供本人的商品。那么Docker平台上也提供相似的服务,对于开发者来说咱们平时生产的就是各种根底应用程序,比如说JDK、MySQL。MySQL团队曾经将MySQL公布在Docker平台上了,装置起来非常简单,几行命令就搞定了。商家入驻外卖平台,咱们能够在外卖平台对应的App上搜到,那开发者团队公布的程序,咱们去哪里找呢? 去registry处找,这个registry相似于手机上的利用市场,官网提供的registry是docker hub registry。在这里你能够像搜手机利用一样搜寻 容器与镜像Docker平台上应用镜像这个概念来形容应用程序,你能够了解为安装包,也就是说你能够将镜像了解为应用程序,用容器来形容过程。过程是正在运行的镜像的实例,应用registry来形容利用市场,也就是说你能够从registry处取得你所须要的的镜像,也能够本人做镜像,默认的registry是 Docker Hub ,从这个获取镜像可能会比较慢,咱们就须要切换镜像仓库地址,后文会讲如何切换。 有了容器和镜像这两个概念之后,咱们就能够简略的应用Docker了。 长处轻量级 LightweightDocker中能够运行应用程序,这很像一个小型的操作系统,然而又不是,还是一个应用程序,绝对于虚拟机来说更轻量级,这个也是Docker的劣势,轻量级,很容易就引入了,如果你装虚拟机的话,首先虚拟机很宏大,而后还须要配置各种各样的环境,这一点置信装过虚拟机的都懂,除此之外,有的时候,咱们并不是齐全须要虚拟机提供的所有服务,很多时候咱们须要的只是一个利用运行环境而已,虚拟机的开销是很大的,更耗费内存。容器领有本人的文件系统,咱们能够进入过程的文件系统,批改对应的配置文件。灵便 Flexible 很多程序都能够容器化 ,即便是很简单的程序。Docker Hub registry 上支流的服务器程序都有对应的镜像不便 Portable You can build locally, deploy to the cloud, and run anywhere.本地构建,部署在云端,而后在任何中央运行。 这让我想起来java,java的口号是一次编译,处处运行是因为JVM。 Docker的run anywhere,我集体了解应该是部署到任意一台计算机。这是很吸引开发者的个性,因为开发者经常会碰到,本地好好的,换台机器部署就不行了的这种状况,个别状况下都是环境的问题。那Docker是怎么做到的呢? 就是打包环境。以java为例,你在部署的时候,首次要装置JDK,配置环境变量,而后不相熟的同学还可能配置错,如果是war包的话还须要装置Tomcat,个别咱们称这个是运行环境。 上文咱们提到过Docker用镜像来形容应用程序,咱们能够认为镜像 = 应用程序 + 运行时环境。所以用了Docker后, 就不须要你在操心运行环境了,几行命令轻松实现部署。先装置起来再说Linux版本要求docker基于Linux(个别倡议Centos7),在6.x版本仿佛有点不稳固。内核版本要求大于3.10。查看零碎内核版本: uname -r。如果不满足能够百度搜寻如何降级内核版本。 使用指南装置yum -y install docker启动Dockersystemctl start docker开机自启systemctl enable docker ...

August 15, 2020 · 1 min · jiezi

关于docker:Docker学习笔记一初遇篇

Docker是十分的风行的,前段时间发现自己对Docker还是仅仅停留在会用几个命令的境地上,于是我就打算零碎的学学。Docker官网文档写的还是挺具体的,举荐大家学习的时候去看下官网文档,我当初学习新技术个别都先去官网转转。是什么?Docker is a platform for developers and sysadmins to build, run, and share applications with containers. Docker是一个开发者用来构建、运行和共享容器应用程序的平台。先不论容器化,咱们该如何了解平台这个词呢? 平台的意义很宽泛,不同人从事不同行业甚至在同一行业从事不同的方向对平台的意识和了解可能都会不同。总体来说,平台也是有共性的,通常的了解是指一种根底的可用于衍生其余产品的环境.这种环境可能只用于产生其余的产品,也有可能在产生其余产品的之后还会是这些衍生产品生存的环境。---《平台:自媒体时代用影响力赢取惊人财产》粗略的讲,平台是一种提供服务的环境,这样讲可能有些形象了,咱们举一些例子来阐明平台,比方为人熟知的淘宝、京东能够算电商平台。商户能够在电商平台上卖东西,消费者在下面买货色。比方外卖平台,咱们想到的是饿了么、美团,这些平台为消费者应用这些外卖平台找到本人想吃的,商家将本人的商品放上去减少销售形式。 外卖平台上提供的是外卖服务,消费者在平台上找到本人想吃的饭,个别由外卖平台配送,个别的商家也能够退出到外卖平台提供本人的商品。那么Docker平台上也提供相似的服务,对于开发者来说咱们平时生产的就是各种根底应用程序,比如说JDK、MySQL。MySQL团队曾经将MySQL公布在Docker平台上了,装置起来非常简单,几行命令就搞定了。商家入驻外卖平台,咱们能够在外卖平台对应的App上搜到,那开发者团队公布的程序,咱们去哪里找呢? 去registry处找,这个registry相似于手机上的利用市场,官网提供的registry是docker hub registry。在这里你能够像搜手机利用一样搜寻 容器与镜像Docker平台上应用镜像这个概念来形容应用程序,你能够了解为安装包,也就是说你能够将镜像了解为应用程序,用容器来形容过程。过程是正在运行的镜像的实例,应用registry来形容利用市场,也就是说你能够从registry处取得你所须要的的镜像,也能够本人做镜像,默认的registry是 Docker Hub ,从这个获取镜像可能会比较慢,咱们就须要切换镜像仓库地址,后文会讲如何切换。 有了容器和镜像这两个概念之后,咱们就能够简略的应用Docker了。 长处轻量级 LightweightDocker中能够运行应用程序,这很像一个小型的操作系统,然而又不是,还是一个应用程序,绝对于虚拟机来说更轻量级,这个也是Docker的劣势,轻量级,很容易就引入了,如果你装虚拟机的话,首先虚拟机很宏大,而后还须要配置各种各样的环境,这一点置信装过虚拟机的都懂,除此之外,有的时候,咱们并不是齐全须要虚拟机提供的所有服务,很多时候咱们须要的只是一个利用运行环境而已,虚拟机的开销是很大的,更耗费内存。容器领有本人的文件系统,咱们能够进入过程的文件系统,批改对应的配置文件。灵便 Flexible 很多程序都能够容器化 ,即便是很简单的程序。Docker Hub registry 上支流的服务器程序都有对应的镜像不便 Portable You can build locally, deploy to the cloud, and run anywhere.本地构建,部署在云端,而后在任何中央运行。 这让我想起来java,java的口号是一次编译,处处运行是因为JVM。 Docker的run anywhere,我集体了解应该是部署到任意一台计算机。这是很吸引开发者的个性,因为开发者经常会碰到,本地好好的,换台机器部署就不行了的这种状况,个别状况下都是环境的问题。那Docker是怎么做到的呢? 就是打包环境。以java为例,你在部署的时候,首次要装置JDK,配置环境变量,而后不相熟的同学还可能配置错,如果是war包的话还须要装置Tomcat,个别咱们称这个是运行环境。 上文咱们提到过Docker用镜像来形容应用程序,咱们能够认为镜像 = 应用程序 + 运行时环境。所以用了Docker后, 就不须要你在操心运行环境了,几行命令轻松实现部署。先装置起来再说Linux版本要求docker基于Linux(个别倡议Centos7),在6.x版本仿佛有点不稳固。内核版本要求大于3.10。查看零碎内核版本: uname -r。如果不满足能够百度搜寻如何降级内核版本。 使用指南装置yum -y install docker启动Dockersystemctl start docker开机自启systemctl enable docker ...

August 15, 2020 · 1 min · jiezi

关于docker:Docker容器时间如何与宿主机同步问题解决方案小结

前言如果在启动Docker容器的过程中没有独自配置localtime,很可能造成Docker容器工夫与主机工夫不统一的状况,比方UTC和CST相差8小时,换句话来说就是容器工夫与北京工夫相差8个小时。 更新历史2020年08月13日 - 初稿 浏览原文 - https://wsgzao.github.io/post... 问题形容问题:容器工夫与北京工夫相差8个小时 # 查看主机工夫[root@localhost ~]# date2020年07月27日 星期三 22:42:44 CST# 查看容器工夫# docker exec -it <containerid> /bin/shroot@b43340ecf5ef:/# dateWed Jul 27 14:43:31 UTC 2020起因:宿主机设置了时区,而Docker容器并没有设置,导致两者相差8小时 能够发现,他们相隔了8小时 CST应该是指(China Shanghai Time,东八区工夫)UTC应该是指(Coordinated Universal Time,规范工夫)所以,这2个工夫实际上应该相差8个小时 所以,必须对立两者的时区 解决方案docker run 增加工夫参数-v /etc/localtime:/etc/localtime# 实例1docker run -p 3306:3306 --name mysql -v /etc/localtime:/etc/localtime# 实例2docker run \ --detach \ --restart always \ --name 'scribe' \ --publish 11315:11315 \ --mount type=bind,source=/data/gop/,destination=/data/gop/,consistency=consistent \ -v /etc/localtime:/etc/localtime \ wsgzao/facebook-scribeDockerfile# 办法1# 增加时区环境变量,亚洲,上海ENV TimeZone=Asia/Shanghai# 应用软连贯,并且将时区配置笼罩/etc/timezoneRUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone# 办法2# CentOSRUN echo "Asia/shanghai" > /etc/timezone# UbuntuRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedocker-compose#第一种形式(举荐):environment: TZ: Asia/Shanghai #第二种形式:environment: SET_CONTAINER_TIMEZONE=true CONTAINER_TIMEZONE=Asia/Shanghai#第三种形式:volumes: - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime宿主机间接执行命令给某个容器同步工夫# 办法1:间接在宿主机操作docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtimedocker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器ID或者NAME】:/etc/localtime# 办法2:登录容器同步时区timezoneln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime在实现后,再通过date命令进行查看以后工夫然而,在容器中运行的程序的工夫不肯定能更新过去,比方在容器运行的mysql服务,在更新工夫后,通过sql查看mysql的工夫 ...

August 14, 2020 · 1 min · jiezi

关于docker:聊聊-containerd

禁止复制,转载请注明出处和作者 Containerd 模块从 docker 中分离出来后,性能变得更加丰盛,依赖者变得更加宽泛,不仅仅是docker在应用,能够看到在云原生利用中波及到容器技术时根本都在依赖 containerd。 图片起源 https://www.slideshare.net/Docker/leveraging-the-power-of-containerd-events-evan-hazlett 一、Containerd 作用 containerd 的上层是runc,containerd 次要在为runc提供 oci(Open Container Initiative)runtime spec,oci 定义了两个规范,一个是对于镜像的,一个是对于容器运行时,容器运行时规范简略来说就是一个config.json文件和一个rootfs,对于oci的详细信息能够看官网github仓库或者文末参考。containerd就是oci一个规范实现。 containerd 在docker架构中的地位 二、Container架构剖析 containerd自身就提供了ctr命令行工具,grpc接口用来治理容器的生命周期,containerd在镜像治理上进行了翻新,不再像docker应用graphdriver来治理镜像,而是应用快照的形式,在容器的世界中存在两种镜像,一种是overlays filesystems(AUFS、OverlayFS), 一种是snapshotting filesystems(devicemapper、btrfs、ZFS) containerd中的数据流containerd的工作次要分为以下几步1)拉取镜像,存储到 metadata(metadata是个bolt键值型数据库) 和content中,content中的存储是带标签的存储,metadata中的存储是不带标签,content次要用来进行独立执行或者测试应用,查问的还是metadata中的数据。metadata中的content中的内容次要是 manifests 的index、manifests、config.json、image layer。在拉取完之后同时创立了一个镜像到metadata的image内容空间,还有几本snapshot的构建。metadata 的schema // keys.// ├──version : <varint> - Latest version, see migrations// └──v1 - Schema version bucket// ╘══*namespace*// ├──labels// │  ╘══*key* : <string> - Label value// ├──image// │  ╘══*image name*// │   ├──createdat : <binary time> - Created at// │   ├──updatedat : <binary time> - Updated at// │   ├──target// │   │  ├──digest : <digest> - Descriptor digest// │   │  ├──mediatype : <string> - Descriptor media type// │   │  └──size : <varint> - Descriptor size// │   └──labels// │   ╘══*key* : <string> - Label value// ├──containers// │  ╘══*container id*// │   ├──createdat : <binary time> - Created at// │   ├──updatedat : <binary time> - Updated at// │   ├──spec : <binary> - Proto marshaled spec// │   ├──image : <string> - Image name// │   ├──snapshotter : <string> - Snapshotter name// │   ├──snapshotKey : <string> - Snapshot key// │   ├──runtime// │   │  ├──name : <string> - Runtime name// │   │  ├──extensions// │   │  │  ╘══*name* : <binary> - Proto marshaled extension// │   │  └──options : <binary> - Proto marshaled options// │   └──labels// │   ╘══*key* : <string> - Label value// ├──snapshots// │  ╘══*snapshotter*// │   ╘══*snapshot key*// │    ├──name : <string> - Snapshot name in backend// │   ├──createdat : <binary time> - Created at// │   ├──updatedat : <binary time> - Updated at// │    ├──parent : <string> - Parent snapshot name// │   ├──children// │   │  ╘══*snapshot key* : <nil> - Child snapshot reference// │   └──labels// │   ╘══*key* : <string> - Label value// ├──content// │  ├──blob// │  │ ╘══*blob digest*// │  │ ├──createdat : <binary time> - Created at// │  │ ├──updatedat : <binary time> - Updated at// │  │   ├──size : <varint> - Blob size// │  │ └──labels// │  │ ╘══*key* : <string> - Label value// │  └──ingests// │   ╘══*ingest reference*// │    ├──ref : <string> - Ingest reference in backend// │   ├──expireat : <binary time> - Time to expire ingest// │   └──expected : <digest> - Expected commit digest// └──leases// ╘══*lease id*//   ├──createdat : <binary time> - Created at// ├──labels// │ ╘══*key* : <string> - Label value//   ├──snapshots// │  ╘══*snapshotter*// │   ╘══*snapshot key* : <nil> - Snapshot reference//   ├──content// │  ╘══*blob digest* : <nil> - Content blob reference// └──ingests//   ╘══*ingest reference* : <nil> - Content ingest reference在contained中是存在namespace的概念的2)当运行容器时,利用metadata中的content、snapshot、image信息进行active snapshot(能够了解为docker中的容器层)的构建,构建bundle,调用runc启动容器。 ...

August 14, 2020 · 3 min · jiezi

关于docker:docker使用系列之6docker常用命令

2.7.1 获取镜像docker pull mysqldocker pull mysql:5.7 2.7.2 查看镜像信息docker images2.7.3 查看镜像详细信息docker inspect2.7.4 搜寻镜像docker search mysql2.7.5 删除镜像docker rmi 标签docker rmi 镜像ID docker rmi -f 标签/镜像ID # 强制删除镜像 2.7.6 正确删除镜像先删除容器(依赖该镜像的所有容器) docker rm 容器ID再删除镜像 docker rmi -f 镜像ID2.7.7 查看本机存在的所有容器docker psdocker ps -a #包含进行的 2.7.8 新建并启动容器 docker run 等价于 docker create + docker start 2.7.9 进行过程elasticsearchdocker stop a529963ec236 docker stop elasticsearch 2.7.10 查看所有镜像找出elasticsearch:docker images[root@localhost elasticsearch]# docker images REPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 8679ced16d20 2 weeks ago 448MBredis latest 50541622f4f1 2 weeks ago 104MBkibana 7.8.1 22bc1dd9a48a 2 weeks ago 1.3GBelasticsearch 7.4.2 a529963ec236 2 weeks ago 811MB2.7.11 删除容器docker rm containerIDdocker rm -f containerID #删除运行中的容器: docker会发送sigkill信号给容器终止他 ...

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之5docker安装kibana

关上容器镜像官网 2.6.1 镜像官网搜寻 kibana2.6.2 间接拉取镜像:sudo docker pull kibana:7.4.22.6.3 装置kibana容器2.6.3.1 创立实例并启动:kibana: docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:7.4.2参数阐明: -p 5601:5601 将容器的9200端口映射到主机的9200端口;--name kibana 给以后启动的容器取名叫 elasticsearch-d 当前台形式运行(daemon)--link 这个参数值得细说一下, 次要是实现容器互联, 实现容器间的通信2.6.3.2 容器互联实现容器间通信(--link)对于docker环境下装置elasticsearch+kibana连不上问题 容器的link是除了端口映射之外另一种能够与容器中利用进行交互的形式. 它是在源和接管容器之间造成一个隧道, 接管容器能够看到源容器指定的信息; 自定义容器名(--name) 也就是咱们docker run时指定的 --name 参数值, 连贯的时候能够作为连贯根据, 比方下面的: docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:7.4.2就是说在 kibana 的容器运行时, 指定 一个连贯的容器: name是 elasticsearch --link语法 --link name:alias --link elasticsearch:elasticsearch咱们能够看看 kibana的环境变量和hosts文件, 这两个文件里会体现出这种link关系: kibana 容器的环境变量信息: ...

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之4docker安装ESelasticsearch

关上容器镜像官网 2.5.1 镜像官网搜寻 elasticsearch2.5.2 间接拉取镜像:sudo docker pull elasticsearch:7.4.22.5.3 装置es容器2.5.3.1 创立所需目录:mkdir -p /mydata/elasticsearch/config/mkdir -p /mydata/elasticsearch/data/echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml2.5.3.2 创立实例并启动:elasticsearch: sudo docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPS="-Xms128m -Xmx512m" \-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-d elasticsearch:7.4.2参数阐明: -p 9200:9200 将容器的9200端口映射到主机的9200端口;--name elasticsearch 给以后启动的容器取名叫 elasticsearch-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data 将数据文件夹挂载到主机;-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 将配置文件挂载到主机; -d 当前台形式运行(daemon)-e ES_JAVA_OPS="-Xms64m -Xmx128m" 测试时限定内存小一点2.5.3.3 启动elasticsearch容器docker start elasticsearch2.5.4 拜访elasticsearchhttp://192.168.56.100:9200/ 2.5.5 问题小结如果遇到已有容器的抵触, 须要删掉原来的: docker: Error response from daemon: Conflict. The container name "/elasticsearch" is already in use by container "1a2e7069114ede501f687e3435b76fbc546061959b773f51681d10008bab4342". You have to remove (or rename) that container to be able to reuse that name.解决形式: docker ps -a列出所有, 删掉之前的镜像: ...

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之3安装redis

关上容器镜像官网 2.4.1 镜像官网搜寻 redis2.4.2 间接拉取镜像redis latest:sudo docker pull redis2.4.3 装置redis容器2.4.3.1 创立所需目录:mkdir -p /mydata/redis/conf/touch /mydata/redis/conf/redis.conf2.4.3.2 创立实例并启动:sudo docker run -p 6379:6379 --name redis \-v /mydata/redis/data:/data \-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \-d redis redis-server /etc/redis/redis.conf参数阐明: -p 6379:6379 将容器的6379端口映射到主机的6379端口;--name redis 给以后启动的容器取名叫 redis -v /mydata/redis/data:/data 将数据文件夹挂载到主机;-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf 将配置文件挂载到主机; -d 当前台形式运行(daemon)redis redis-server /etc/redis/redis.conf 启动带参数2.4.3.3 启动redis容器docker start redis2.4.4 拜访redis(redis-cli客户端)执行命令docker exec -it: 能够用 name 或者 容器id; 比方应用 name(redis) docker exec -it redis redis-cliset name niewjget namedocker restart redis# 因为没有长久化, 所以重启 `get name` 没有值2.4.5 设置redis长久化-aof编辑redis.conf 增加配置: ...

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之2安装mysql

装置mysql 关上容器镜像官网 2.3.1 镜像官网搜寻 mysql2.3.2 抉择tags装置mysql镜像抉择版本: 5.7 sudo docker pull mysql:5.72.3.3 装置完之后查看已装置镜像sudo docker images输入: [vagrant@localhost ~]$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 8679ced16d20 34 hours ago 448MB2.3.4 创立实例并启动:sudo docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysql \-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=mypasswd \-d mysql:5.7参数阐明: -p 3306:3306 将容器的3306端口映射到主机的3306端口;--name mysql 给以后启动的容器取名叫 mysql-v /mydata/mysql/log:/var/log/mysql 将日志文件夹挂载到主机;-v /mydata/mysql/data:/var/lib/mysql 将数据文件夹挂载到主机;-v /mydata/mysql/conf:/etc/mysql 将配置文件挂载到主机;-e MYSQL_ROOT_PASSWORD=mypasswd -e设置参数, 初始化root用户的明码-d 当前台形式运行(daemon) -v 都是目录挂载(挂在后在linux能够间接批改就会同步到容器外部-相当于快捷方式);mysql:5.7 指定用哪个镜像启动的这个容器2.3.5 查看docker正在运行中的容器:[root@localhost vagrant]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f582c4433c5 mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql ...

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之2安装mysql

装置mysql 关上容器镜像官网 2.3.1 镜像官网搜寻 mysql2.3.2 抉择tags装置mysql镜像抉择版本: 5.7 sudo docker pull mysql:5.72.3.3 装置完之后查看已装置镜像sudo docker images输入: [vagrant@localhost ~]$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 8679ced16d20 34 hours ago 448MB2.3.4 创立实例并启动:sudo docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysql \-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=mypasswd \-d mysql:5.7参数阐明: -p 3306:3306 将容器的3306端口映射到主机的3306端口;--name mysql 给以后启动的容器取名叫 mysql-v /mydata/mysql/log:/var/log/mysql 将日志文件夹挂载到主机;-v /mydata/mysql/data:/var/lib/mysql 将数据文件夹挂载到主机;-v /mydata/mysql/conf:/etc/mysql 将配置文件挂载到主机;-e MYSQL_ROOT_PASSWORD=mypasswd -e设置参数, 初始化root用户的明码-d 当前台形式运行(daemon) -v 都是目录挂载(挂在后在linux能够间接批改就会同步到容器外部-相当于快捷方式);mysql:5.7 指定用哪个镜像启动的这个容器2.3.5 查看docker正在运行中的容器:[root@localhost vagrant]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f582c4433c5 mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql ...

August 13, 2020 · 1 min · jiezi

关于docker:云图说丨手把手教你为容器应用配置弹性伸缩策略

流量不可预知性,已成为互联网利用常态。当初有很多客户很关怀利用的主动弹性伸缩,有些客户也有本人的监控框架,并心愿能跟容器服务进行集成。 华为云CCE提供Docker利用的秒级弹性伸缩能力,在流量突增时能秒级弹性扩容,保障业务的高稳定性,晋升用户体验。 您也能够通过CCE帮忙核心,理解具体操作。 想理解CCE云容器引擎?请单击以下链接: 【云图说】初识云容器引擎。CCE云容器引擎产品介绍。CCE云容器引擎帮忙与教程。点击关注,第一工夫理解华为云陈腐技术~

August 13, 2020 · 1 min · jiezi

关于docker:云图说丨手把手教你为容器应用配置弹性伸缩策略

流量不可预知性,已成为互联网利用常态。当初有很多客户很关怀利用的主动弹性伸缩,有些客户也有本人的监控框架,并心愿能跟容器服务进行集成。 华为云CCE提供Docker利用的秒级弹性伸缩能力,在流量突增时能秒级弹性扩容,保障业务的高稳定性,晋升用户体验。 您也能够通过CCE帮忙核心,理解具体操作。 想理解CCE云容器引擎?请单击以下链接: 【云图说】初识云容器引擎。CCE云容器引擎产品介绍。CCE云容器引擎帮忙与教程。点击关注,第一工夫理解华为云陈腐技术~

August 13, 2020 · 1 min · jiezi

关于docker:docker使用系列之1安装和云镜像加速

2.1 docker装置2.1.1 查看官网指南:Install Docker Engine on CentOS 2.1.2.装置前先卸载清理:sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2.1.3 先装置依赖包:sudo yum install -y yum-utils2.1.4 指定装置源:sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo2.1.5 跳过Optional的2.1.6 装置docker engine:sudo yum install docker-ce docker-ce-cli containerd.io2.1.7 查看装置状态:yum list docker-ce --showduplicates | sort -r2.1.8 启动docker:sudo systemctl start docker2.1.9 顺便设置开机启动dockersudo systemctl enable docker2.1.10 启动后应用命令查看:sudo docker images2.2 设置docker的云镜像减速登录阿里云 -> 左侧菜单->产品与服务->容器镜像服务-> 镜像加速器 -> centos -> ...

August 13, 2020 · 1 min · jiezi