Docker知识点的系统化梳理

1. Docker简介1.1 Docker是什么 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到其他机器上。容器可以简单地理解为是一个修改过的运行时环境,可以隔离所有的资源(除非明确允许)。UNIX中使用容器隔离资源已经有很长一段时间了,但是直接使用容器难度大,配置复杂,容易出错。Docker使用现有的容器技术,根据最佳实践提供一致的Docker构建方案,让大家可以很轻松的使用容器隔离资源,提供更强的安全性。目前,Docker可原生运行在Linux上,在OS X和Windows环境中通过单独的虚拟机也可以运行。 1.2 在隔离的容器中运行软件 Docker在linux上运行容器的结构如下图所示: 命令行工具或CLI在被称为用户空间的内存中运行,就像是在操作系统上运行的其他程序。运行Docker可以认为是在用户空间运行着两个程序:一个是Docker守护进程,另一个是DockerCLI,DockerCLI是与用户交互的Docker程序。上图也显示了三个运行着的容器,每个都是以Docker守护程序的子进程运行,封装在容器中。在容器中运行的程序只能访问该容器内部的内存空间和资源(除非特别规定可以访问容器外部资源)。 1.3 分发容器 Docker可以执行、复制和轻松的分发容器,Docker通过一种打包和分发的软件完成传统容器的封装,这个用来充当容器(Container)分发角色的组件被称为<font color=red>镜像(Image)</font>。镜像与容器的关系,个人认为类似类(Class)和实例的关系。基于一个类可以创建多个实例,每个实例都有独立的资源。而基于一个镜像可以创建多个容器,每个容器也互不干扰(如果不考虑容器连接等特殊情况) 2. Docker镜像2.1 Docker镜像简介 Docker镜像是一个存在于系统上的实体,镜像内部是一个精简的操作系统和应用运行所需要的文件以及所有依赖(镜像不包含内核,容器都是共享所在Docker主机的内核)。镜像仓库(Image Repository)是一个有名字的镜像桶,用于存放镜像,将镜像集中存放就是为了方便大家获取所需的镜像。镜像仓库又有一个镜像仓库服务(Image Registry)来管理,Docker客户端的镜像仓库服务是可配置的,默认是Docker Hub。在每个镜像仓库中,标签是唯一指定镜像的重要途径,也是一种创建有用别名的遍历方法。一个标签在一个仓库中只能被应用到单个镜像,但一个镜像可以有多个标签。下图展示了镜像仓库服务、镜像仓库、镜像之间的关系:镜像仓库服务管理多个镜像仓库,每个镜像仓库又可以包含多个镜像。 2.2 Docker镜像常见操作2.2.1 搜索拉取镜像 Docker镜像存储在镜像仓库中,可以从中搜索和拉去镜像。 如下为搜索镜像示例,其参数说明: NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。AUTOMATED: 自动构建。$ docker search ubuntuNAME DESCRIPTION STARS OFFICIAL AUTOMATEDubuntu Ubuntu is a Debian-based Linux operating sys… 10873 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 422 [OK]rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK]consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 217 [OK]ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK] ... 拉取镜像,可以指定标签拉取,不指定镜像标签默认拉取标签为 lastest 的镜像 ...

May 28, 2020 · 8 min · jiezi

docker构建sshnginxfpm镜像并通过supervisor实现开机自启动

写在前面 docker 容器编排可能更合适的是 Docker Compose 和 Kubernetes。日常开发,往往也不想要这么复杂,就丢一个容器里得了。 创建镜像 创建镜像有两种方式1.从已经创建的容器中更新镜像2.使用 Dockerfile 指令来创建一个新的镜像 这里我们选用第一种方式,并选用 centos7 官方镜像作为初始镜像。 拉取初始镜像(Centos7) docker pull centos:7启动容器 docker run -itd centos:7 /bin/bash-i 表示交互示操作-t 表示打开一个终端-d 后台运行centos:7 是我们镜像名称/bin/bash 指定一个交互窗口,启动容器一个要有一个窗口,否则容器会自动关闭进入容器 docker exec -it ab3d851192b2 /bin/bashab3d851192b2 是我们刚才启动的 CONTAINER ID开始安装软件 安装软件之前我们先更新一下系统 yum update -y安装一些常用的工具,下面用的着 yum -y install wget bzip2 gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel curl curl-devel安装 ssh (服务端和客户端) yum -y install passwd openssh-server openssh-clients修改配置文件 vi /etc/ssh/sshd_config找到 PermitRootLogin yes 把前面的注释符号 # 去掉,允许 root 用户登录,因为是日常开发用,就用root吧,可以省很多事 ...

May 27, 2020 · 2 min · jiezi

Docker-dockercompose安装

docker1.docker国内访问下载速度太慢, 借用第三方 DaoCloud 提供的docker安装源 curl -sSL https://get.daocloud.io/docker | sh 2.安装完成后, 使用 docker info 查看docker状态, 但是需要使用sudo权限, 因为docker命令属于docker用户组, 为了避免每次输入命令需要带sudo, 可将当前用户加入docker组 sudo gpasswd -a $(whoami) docker3.配置镜像加速 sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://**.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart dockerdocker-compose1.docker-compose存放在github上, 安装速度不太理想, 还是借用 DaoCloud 提供的docker-compose安装源 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose2.常用docker-compose .env:DCOMPOSE_DIR=/data/dcomposeMYSQL_ROOT_PASSWORD=123456docker-compose.yml:(自动加载同目录下的.env)version: "3"services: mysql: image: mysql:5.7 container_name: mysql restart: on-failure:3 environment: # 环境变量 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} volumes: - "${DCOMPOSE_DIR}/mysql/data:/var/lib/mysql" - "${DCOMPOSE_DIR}/mysql/conf.d:/etc/mysql/conf.d" ports: - 3306:3306 tengine: image: axizdkr/tengine:2.3.2 container_name: tengine restart: on-failure:3 environment: - TZ=Asia/Shanghai - LANG=zh_CN.UTF-8 ports: - "80:80" - "443:443" volumes: - ${DCOMPOSE_DIR}/tengine/conf.d/:/etc/nginx/conf.d/ - ${DCOMPOSE_DIR}/tengine/log/:/var/log/nginx/

May 25, 2020 · 1 min · jiezi

Dapps-上架-baidupcsweb百度网盘-Web-版

前言:之前上架过一个命令行版本的百度客户端,但大部分用户不知道怎么使用,本期上架一个带界面的易使用版本 dapps是什么?dapps是一个应用程序商店,包含丰富的软件,一键安装程序;多版本共存。 使用官网文档:dapps应用商店 应用商店中安装 BaiduPCS-web使用说明:查看效果 目前包含的软件注:每周会上架一款新应用,持续更新百度网盘web版:下载速度比官方快很多 ------ 查看效果AriaNg高速下载器:2倍迅雷速度,迅雷无法下载的资源,也能下载 ------ 查看效果百度网盘下载器(命令行) ------ 查看效果wordpress ------ 查看效果py12306抢票 ------ 查看效果magnetw: 种子搜索神器 ------ 查看效果PhpMyAdmin:mysql管理工具 ------ 查看效果adminmongo: mongo管理工具 ------ 查看效果PHP: 世界上最好的语言(版本:5.6,7.1,7.2,7.3)------ 查看效果Mysql:数据库(版本:5.6,5.7,,8.0)------ 查看效果Nginx:服务器(版本:1.16)------ 查看效果redis:nosql数据库(版本:5.0)------ 查看效果mongo:是一个基于分布式文件存储的数据库(版本:3.4,4.0)------ 查看效果gogs版本控制 ------ 查看效果rabbitmq3.7队列服务 ------ 查看效果2048游戏 ------ 查看效果等......

November 13, 2019 · 1 min · jiezi

docker安装AriaNg下载器

AriaNg是一个非常优秀的下载工具,基于aria2。个人感觉可以替代迅雷。 效果图: 代码:docker-compose.yml version: '3'services: ariang: image: wahyd4/aria2-ui:latest container_name: dapps-ariang ports: - "${ARIANG_HOST_PORT}:80" volumes: - ${ARIANG_DATA_DIR}:/data restart: always.env文件 # app infoAUTHOR_UID=10000000AUTHOR_NAME=kakaAPP_ID=ariangAPP_NAME=ariang高速下载器APP_INTRODUCTION=2倍迅雷下载速度APP_UPDATE_CONTENT=APP_VERSION=1.0.0APP_PORT=8011/ui# environment config fileSOURCE_DIR=./www# TimezoneTZ=Asia/Shanghai# environment configARIANG_HOST_PORT=8011ARIANG_DATA_DIR=./downloads对docker不太熟悉的同学,可以使用dapps应用商店,一键安装。 Dapps项目:使用

November 5, 2019 · 1 min · jiezi

Docker容器监控方案

zabbixZabbix sever、mysql、nginx都采用容器方案部署。 Zabbix-agent部署在目标主机(VM主机上需要yum install gcc、pcre*)。 Zabbix采集容器信息,采用脚本调用Docker stats命令来获取容器资源的使用信息。 Zabbix添加主机,主机添加模板。模板包含监控项,触发器,视图等内容。 缺点: 容器化方案没有高可用架构,存在单点故障。 采用keepalive保证server主备,数据库双主复制。需要额外的工作。采用容器方案,容器的本身的调度与keepalive的结合需要调试。大规模监控存在性能问题,Zabbix自身故障无法检测。cAdvisor+ Prometheus+InfluxDB+GrafanaPrometheus在整个采集-告警逻辑上没有什么特殊的,只是自带自发现功能,从代码层更贴近容器调度编排的场景。Prometheus采用统一的Restful API方式去pull数据。告警规则其实就是PromQL的查询,

November 5, 2019 · 1 min · jiezi

Windows10家庭版搭建WSL加Docker的开发环境

前言WSL也就是win10更新的一个对开发者比较友好的点了,它并不是虚拟机,而是一个模拟环境,并不能支持Linux中的各种操作,但是和windows交互非常方便,消耗很低,所以对我这种菜鸟来说做开发和测试比较合适。docker的好处这边也就不说了,可以去了解一下(主要是因为我也是第一次用- -),这篇文章主要是将如何安装,对原理和概念的东西不会解释。 其实我要搭建这样的开发环境的原因比较简单,主要是下面两个原因:1.公司的服务器上的服务就是Linux加docker的模式,我要模拟这样的的结构方便测试和开发,正好学习一下2.我的开发环境是windows的,我希望借助docker和WSL,把我的开发环境搞得干净一点(为啥不直接用Linux系统呢,只是因为我觉得一个电脑双系统受不了..) 安装WSLwin10商店里面就可以直接安装,这里的坑只有一个,就是要开启Linux子系统服务 安装Docker这里的坑就比较多了,希望我踩的坑能对你有帮助环境:win10家庭版 在WSL里面安装Docker参考博客:https://yeasy.gitbooks.io/docker_practice/install/参照上面文章里面Ubuntu的安装方法安装完成之后,启动docker sudo service docker start这里就会报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?说的意思就是连接不到守护线程,虽然我也不知道这个守护线程是干嘛的,然后找到了一个国外小哥的博客:https://medium.com/@sebagomez/installing-the-docker-client-on-ubuntus-windows-subsystem-for-linux-612b392a44c4最关键点就是你在WSL里面装docker,必须先安装Docker For Windows在你的系统上。OK,那我们就去安装这个呗。去官网上面下载。https://docs.docker.com/docker-for-windows/install/然后你就会发现安装不上,因为docker不支持win10家庭版...有些博客里面会说用docker toolbox的东西代替,这里我不建议用,反正我没代替成功。解决办法第一步:修改注册表,让安装程序误以为我们是win10 pro定位到HKEY_LOCAL_MACHINEsoftwareMicrosoftWindows NTCurrentVersion修改EditionId的值为Professional然后还有要开启Hyper-v服务,这个东西在win10家庭版里面也是没有的,所以我们需要安装。 pushd “%~dp0”dir /b %SystemRoot%servicingPackagesHyper-V.mum >hyper-v.txt for /f %%i in (‘findstr /i . hyper-v.txt 2^>nul’) do dism /online /norestart /add-package:"%SystemRoot%servicingPackages%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL 将上面的复制到.cmd文件中,然后用管理员运行,安装完毕之后重启电脑,在 安装和启用windows功能 中打开hyper-v服务,启动docker for windows。这时候我们再回到上面没有启用守护线程的问题然后回到ubuntun,输入 echo "export DOCKER_HOST=localhost:2375" >> ~/.bash_profiledocker version也就是告诉docker,他的守护线程接口,docker version检查是否启动成功 ...

November 3, 2019 · 1 min · jiezi

Docker的安装和命令使用

虚拟化技术虚拟化技术是对软件基础设施、操作系统、软件等IT资源进行有效的管理,使用户不再受物理资源的限制,提高计算机资源的利用率。虚拟化技术是云计算的基础,例如阿里云的云主机、腾讯云等都应用了虚拟化技术。虚拟化技术整体上包括两个方面:硬件虚拟化和软件虚拟化,具体分为:网络虚拟化、存储虚拟化、桌面虚拟化、服务器虚拟化等,我们平常说的最多的是服务器虚拟化。服务器虚拟化就是在同一个物理服务器上运行多个虚拟机,让服务器的cpu、内存、磁盘、I/O等硬件设施为每个虚拟机服务,在每个虚拟机中运行不同的软件,虚拟机之间是隔离状态。 服务器虚拟化主要有两种技术:1、Hypervisor也叫VMM(virtual machine monitor)即虚拟机监视器Hypervisor是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机(guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMware、VirtualBox等,由hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。 容器化技术容器技术中docker引擎取代了hypervisor,docker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。 技术对比: 资源占用:虚拟机由于是独立的操作系统,占用资源比docker多。启动速度:虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。体积:容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体积比容器大的多。docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 1、Docker daemon(Docker守护进程): Docker守护进程是部署在操作系统上,负责支撑Docker Container的运行以及本地Image的管理。2、Docker client: 用户不直接操作Docker daemon,用户通过Docker client访问Docker,Docker client提供pull、run等操作命令。3、Docker Image: Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。4、Docker Container: Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。5、Docker Registry: Docker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式 最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。 用户也可以在本地网络内创建一个私有仓库。 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。docker安装Docker可以运行MAC、Windows、Centos、DEBIAN、UBUNTU等操作系统上,提供社区版和企业版,基于Centos安装Docker。Centos6对docker支持的不好,使用docker建议升级到centos7。 1、在Centos7上安装Docker,直接通过yum安装即可: yum install -y docker完成后查看docker版本:docker info 或docker -v 启动docker:systemctl start docker 常用命令使用1.镜像仓库1)docker pull : 从镜像仓库中拉取或者更新指定镜像 ...

October 17, 2019 · 2 min · jiezi

mac实现局域网rtmp推拉流直播

mac实现局域网rtmp直播主要分为6步,原理就是我们要搭建一个rtmp服务器,安装FFmpeg。然后通过FFmpeg推流到这个服务器上,最后局域网内用vlc去拉流观看就可以了。 搭建rtmp服务器搭建rtmp服务器我们就不手动来做了,因为比较复杂。我们使用docker几行命令就能搞定。 安装FFmpeg,我们使用homebrew来安装。安装homebrew,打开https://brew.sh/,然后copy网址里的命令输入到命令中回车。安装完homebrew之后,我们来安装FFmpeg,执行命令brew install ffmpeg安装docker。直接官网下载dmg安装就可以了。启动docker,分别执行命令,这里用到的是alfg/nginx-rtmp库。docker pull alfg/nginx-rtmpdocker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp推流。直播推流地址 rtmp://<本机ip>:1935/stream/自己取个名字推流方式ffmpeg -re -i /Users/1.mp4 -c copy -f flv rtmp://<本机ip>:1935/stream/自己取个名字记得把/Users/1.mp4替换成你自己的文件路径拉流,安装vlc软件。在vlc中填入拉流地址rtmp://<本机ip>:1935/stream/自己取个名字

October 16, 2019 · 1 min · jiezi

Docker-Registry搭建私有镜像仓库

微服务的镜像会上传到Docker仓库保存,常用的公网Docker仓库有阿里云,网易云等,在企业局域网也可以搭建自己的Docker私有仓库,本教程使用Docker提供的私有仓库registry。 1.拉取私有仓库镜像 docker pull registry 2.创建启动私有仓库容器 docker run -dit -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry registry参数说明 -dit:在容器中打开一个伪终端进行交互操作,并在后台运行-v:把宿主机的/data/registry目录挂载到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化-p:映射端口,访问宿主机的5000端口就访问到registry容器的服务了--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器--name docker-registry:创建容器命名为docker-registry,你可以随便命名registry:pull下来的镜像上边显示 registry镜像已经创建,并且docker-registry容器已经启动成功。访问:http://139.9.40.41:5000/v2/_catalog,响应结果如下: {"repositories":[]}上边的响应结果说明在docker私有仓库中还没有镜像。 默认docker-registry只允许https提交镜像,如下配置使docker-registry支持http,在/etc/docker下,创建daemon.json文件,写入: { "insecure-registries": [ "139.9.40.41:5000"]}3.重启docker systemctl restart docker4.镜像上传至私有仓库标记此镜像为私有仓库的镜像 docker tag docker.io/hello-world 139.9.40.41:5000/hello-world:v1上传标记的镜像 docker push 139.9.40.41:5000/hello-world:v1 列出所有镜像[root@2 docker]# curl http://139.9.40.41:5000/v2/_catalog{"repositories":["hello-world"]}

October 16, 2019 · 1 min · jiezi

一docker-入坑win10和Ubuntu-安装

前言终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又得修炼一项必备技能了。所以让我们勇敢的踏出第一步,学海无涯,让我们一步一个脚印。从安装开始讲起吧。 windows10安装参考:https://yeasy.gitbooks.io/doc... 开启Hyper-Vwin10 安装需要先开启 Hyper-V。控制面板-->所有控制面板项-->程序和功能-->启用或关闭 Windows 功能 下载安装然后下载安装程序:Stable 或者Edge 下载下来之后直接双击运行完成后的截图。 点击close and log out 会重启电脑。 设置重启完电脑后,在我们的导航栏会有docker 的图标,点击图标,选择setting ,genneral 勾选最后一个选项。 设置镜像,我们使用国内的镜像,会让我们下载速度提升,在setting的daemon中设置 https://registry.docker-cn.comhttps://dockerhub.azk8s.cn 测试在cmd 控制台查看docker 版本 docker version 运行hello-world 镜像 docker run hello-world 证明docker在win 10 上安装成功啦。至于接下来怎么使用,我们下篇再讲。 Ubuntu 安装我的是Ubuntu18.0.4 的,安装方法也很简单。 #卸载旧版本sudo apt-get remove docker docker-engine docker.io# 安装包更新sudo apt-get update# 安装依赖sudo apt-get install apt-transport-https ca-certificates curl software-properties-common# 加Docker官方GPG keysudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -#设置稳定版的Docker仓库sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"#安装 docker-cesudo apt-get install docker-ce查看安装docker版本 ...

October 15, 2019 · 1 min · jiezi

循序渐进学Docker

网站更多书籍文章点击进入>> CiCi岛 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐腾讯官方Docker核心技术团队4位专家撰写,总结腾讯大规模应用Docker的技术心得与经验 针对实际应用中的常见问题,给出在腾讯被验证的解决方案,全部是来自实际生产环境的案例。 内容简介本书由腾讯官方4位资深Docker技术专家撰写,他们是腾讯最早期从事Docker相关技术研究与应用的核心技术人员,是腾讯Docker技术的布道者。本书重点总结了他们在腾讯大规模应用Docker的技术心得与实践经验,有针对性地对各种常见的问题给出了在腾讯被验证的解决方案。本书的目的不是帮助那些已经在Docker领域已经有深厚积累的技术人员如何更深层次地去探究Docker,而是帮助那些准备在Docker领域一显身手的初学者,让他们知道实际应用Docker时应该掌握哪些知识,以及如何快速掌握这些知识。 全书共16章,分为四个部分: 基础篇(1~4章) 主要讲解了Docker的特性、使用场景、原理、基本的操作和指令; 高级篇(5~11章) 主要包含容器管理、仓库管理、网络和存储、项目日常维护、Swarm容器维护以及插件开发等重要技术主题; 案例篇(12~15章) 通过Docker离线系统应用、Docker高可用及自动发现架构构建、Docker Overlay Network实践这3个案例演示和分析了Docker的在生产环境中的使用。 源码探索篇(16章) 本章是为那些准备深入Docker源码内部一探究竟的读者准备的,它介绍了Docker源码的目录结构和编译方法,帮助读者开始真正的源码之旅之前做好准备。 作者简介<p>李金榜(JinbangLi) </p><p>资深运维开发专家,写作本书时就职于腾讯SNG(社交网络事业群),从事运维自动化迁移相关工作,负责Docker的运维和开发,是腾讯早期从事Docker相关工作的技术专家之一。在Docker大规模的使用方面,积累了丰富的理论知识和实战经验。</p><p>在服务器的虚拟化方向有深入的研究,从KVM、LXC/CGROUP到Docker, 每次虚拟化技术的变革,都以极大的热情快速学习并逐步运用到实践中。酷爱开源技术研究,多次获得技术突破和交流奖。此外,还曾就职于网易和雪球等公司,现刚加入人工智能的创业大潮。</p><p>尹烨(Ye Yin) </p><p>腾讯高级工程师,先后从事后台服务、MySQL内核开发相关工作。2014年开始从事Docker相关技术的研究,并开始在腾讯游戏业务的进行实践,对Docker等相关技术有深入的研究和丰富的实践经验。</p><p>刘天斯(Yorko Liu) </p><p>资深运维专家,从事运维工作已13年,就职于腾讯IEG(互动娱乐事业群),负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员。热衷开源技术的研究,包括系统架构、运维开发、负载均衡、缓存技术、数据库、NOSQL、分布式存储、消息中间件、大数据及云计算、Mesos、Docker、DevOps等领域。擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验。</p><p>同时热衷于互联网前沿技术的研究,活跃在国内社区、业界技术大会,充当一名开源技术的传播与分享者。开放运维联盟(OOPSA)大数据顾问组成员及金牌作者、华章最有价值作者、中国十大杰出IT博主、WOT十大优秀讲师及TOP100运维出品人。</p><p>著有运维领域的标志性畅销书《Python自动化运维:技术与*实践》;个人发明专利4个。</p><p>陈纯(Chun Chen)</p><p>腾讯高级工程师,Dockerlibnetwork项目的维护人。一直从事大数据和容器云相关的研发工作,爱好捣鼓源代码,并积极参与社区开源项目的研发。</p> 目 录《Docker技术与最佳实践》目录第一部分:准备篇第1章 全面认识Docker1.1 什么是Docker1.1.1 Docker的功能和特性1.1.2 Docker的发展历史1.1.3 Docker的适用场景1.2 Docker的系统架构1.2.1 Docker的基本组件1.Image2.Container3.regitstry1.2.2 Docker的底层技术1.cgroup2.namespace3.lxc, aufs4.device-mapper1.2.3 与KVM/XEN的比较1.优点2.缺点第2章 Docker环境搭建2.1 Docker的安装2.1.1 操作系统选择1.centos下安装2.ubuntu下安装2.1.1 二进制软件包安装2.2.2 源码方式安装2.2 开启Docker之旅(名称待定)2.2.1 检查环境2.2.2 下载镜像2.2.3 运行容器演示一个hello world!第二部分:基础篇第3章 镜像管理3.1 基本介绍3.2 镜像使用3.2.1获取镜像3.2.2查看本机镜像3.2.3查找镜像3.2 创建镜像3.2.1 命令行方式3.2.2 Dockerfile方式第4章 Container管理4.1 基本介绍4.2 参数详解4.3 常用操作查看,停止,重启4.4 进程管理第5章 Docker仓库5.1 公有仓库5.2 私有仓库5.2.1 搭建私有仓库5.2.2 使用私有仓库上传,下载,查找,删除镜像5.2.3 常见问题第6章 Docker网络6.1 基本介绍6.2 NAT方式6.3 自定义网桥6.4 性能测试及对比第7章 Docker数据管理7.1 基本介绍7.2 使用详解第8章 Dockfile详解8.1 基本语法8.2 指令详解8.3 使用示例第9章 Docker API9.1 基本介绍9.2 Docker Remote API详解9.2.1 容器相关的API9.2.2 镜像相关的API9.2.3 其它的API9.3 Docker Registry API第10章 container管理工具10.1 fig介绍10.2 coreos介绍10.2.1 etcd10.2.2 fleet10.3 shipyard第三部分:实战篇第11章 使用Docker部署一套Apache Tomcat MysSQL的运行环境11.1 环境准备11.2 创建镜像11.3 分发部署第12章 使用Docker 搭建一个公司PaaS私有云平台12.1 环境准备12.2 平台搭建第四部分:高级篇第13章 Docker 资源隔离(与cgroup结合)13.1 基本介绍13.2 CPU13.3 内存13.4 磁盘13.5 网络第14章 Docker的存储14.1 基本介绍14.2 AUFS介绍14.3 Device-mapper第15章 Docker 资源监控15.1 宿主机的监控15.2 容器的监控15.3 cadivsor介绍第16章 Docker 最佳实践和注意事项16.1 最佳实践经验总结16.2 常见问题16.3 安全性第五部分:附录程序代码 ...

October 15, 2019 · 1 min · jiezi

每天5分钟玩转Docker容器技术

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐容器技术是继大数据和云计算之后又一炙手可热的技术,而且未来相当一段时间内都会非常流行对 IT 从业者来说,掌握容器技术是市场的需要,也是提升自我价值的重要途径每一轮新技术的兴起,无论对公司还是个人既是机会也是挑战 内容简介Docker和容器技术是当下火的IT技术,无论是互联网还是传统企业都在研究和实践如何用容器构建自己的 IT 基础设施。学习本书能够让读者少走弯路,系统地学习、掌握和实践 Docker 和容器技术。 本书共分为三部分。部分介绍容器技术生态环境。第二部分是容器核心知识,包括架构、镜像、容器、网络和存储。第三部分是容器进阶知识,包括多主机管理、跨主机网络方案、监控、日志管理和数据管理。读者在学习的过程中,可以跟着教程进行操作,在实践中掌握 Docker 容器技术的核心技能。在之后的工作中,可以将本教程作为参考书,按需查找相关知识点。 本书主要面向微服务软件开发人员,以及 IT 实施和运维工程师等相关人员,也适合高等院校和培训学校相关专业的师生教学参考。 作者简介CloudMan,十多年 IT 从业经验,就职于国际知名 IT 企业,从事 IT 基础设施实施服务,项目涉及服务器、存储、网络、虚拟化、云技术等各个方面。CloudMan 对新技术长期保持浓厚的兴趣和学习热情,十几年来一直专注 IT 技术领域的钻研与实践。 目 录<p>目  录</p><p>第一篇  启 程</p><p>第1章  鸟瞰容器生态系统 3</p><p>1.1  容器生态系统 3</p><p>1.2  本教程覆盖的知识范围 10</p><p>1.3  准备实验环境 10</p><p>1.3.1 环境选择 10</p><p>1.3.2 安装 Docker 10</p><p>1.4  运行第一个容器 11</p><p>1.5  小结 12</p><p>第二篇  容器技术</p><p>第2章  容器核心知识概述 15</p><p>2.1 What ——什么是容器 15</p><p>2.2 Why ——为什么需要容器 16</p><p>2.2.1 容器解决的问题 16</p><p>2.2.2 Docker 的特性 20</p><p>2.2.3 容器的优势 20</p><p>2.3 How ——容器是如何工作的 21</p><p>2.4  小结 24</p><p>第3章  Docker 镜像 26</p><p>3.1  镜像的内部结构 26</p><p>3.1.1 hello-world ——最小的镜像 26</p><p>3.1.2 base 镜像 27</p><p>3.1.3 镜像的分层结构 30</p><p>3.2  构建镜像 32</p><p>3.2.1 docker commit 32</p><p>3.2.2 Dockerfile 34</p><p>3.3 RUN vs CMD vs ENTRYPOINT 42</p><p>3.3.1 Shell 和 Exec 格式 42</p><p>3.3.2 RUN 44</p><p>3.3.3 CMD 44</p><p>3.3.4 ENTRYPOINT 45</p><p>3.3.5 最佳实践 46</p><p>3.4  分发镜像 46</p><p>3.4.1 为镜像命名 46</p><p>3.4.2 使用公共 Registry 49</p><p>3.4.3 搭建本地 Registry 51</p><p>3.5  小结 52</p><p>第4章  Docker 容器 55</p><p>4.1  运行容器 55</p><p>4.1.1 让容器长期运行 56</p><p>4.1.2 两种进入容器的方法 57</p><p>4.1.3 运行容器的最佳实践 59</p><p>4.1.4 容器运行小结 59</p><p>4.2 stop/start/restart 容器 60</p><p>4.3 pause / unpause 容器 61</p><p>4.4  删除容器 61</p><p>4.5 State Machine 62</p><p>4.6  资源限制 65</p><p>4.6.1 内存限额 65</p><p>4.6.2 CPU 限额 66</p><p>4.6.3 Block IO 带宽限额 68</p><p>4.7  实现容器的底层技术 69</p><p>4.7.1 cgroup 70</p><p>4.7.2 namespace 70</p><p>4.8  小结 72</p><p>第5章  Docker 网络 74</p><p>5.1 none 网络 74</p><p>5.2 host 网络 75</p><p>5.3 bridge 网络 76</p><p>5.4 user-defined 网络 78</p><p>5.5  容器间通信 84</p><p>5.5.1 IP通信 84</p><p>5.5.2 Docker DNS Server 85</p><p>5.5.3 joined 容器 85</p><p>5.6  将容器与外部世界连接 87</p><p>5.6.1 容器访问外部世界 87</p><p>5.6.2 外部世界访问容器 90</p><p>5.7 小结 91</p><p>第6章  Docker 存储 92</p><p>6.1 storage driver 92</p><p>6.2 Data Volume 94</p><p>6.2.1 bind mount 94</p><p>6.2.2 docker managed volume 96</p><p>6.3  数据共享 99</p><p>6.3.1 容器与 host 共享数据 99</p><p>6.3.2 容器之间共享数据 99</p><p>6.4 volume container 100</p><p>6.5 data-packed volume container 102</p><p>6.6 Data Volume 生命周期管理 103</p><p>6.6.1 备份 104</p><p>6.6.2 恢复 104</p><p>6.6.3 迁移 104</p><p>6.6.4 销毁 104</p><p>6.7  小结 105</p><p>第三篇  容器进阶知识</p><p>第7章  多主机管理 109</p><p>7.1  实验环境描述 110</p><p>7.2  安装 DockerMachine 111</p><p>7.3  创建 Machine112</p><p>7.4  管理Machine 114</p><p>第8章  容器网络 117</p><p>8.1 libnetwork & CNM 117</p><p>8.2  overlay119</p><p>8.2.1 实验环境描述 120</p><p>8.2.2 创建overlay网络 121</p><p>8.2.3 在overlay中运行容器 122</p><p>8.2.4 overlay 网络连通性 124</p><p>8.2.5 overlay 网络隔离 126</p><p>8.2.6 overlay IPAM 127</p><p>8.3 macvlan 127</p><p>8.3.1 准备实验环境 127</p><p>8.3.2 创建 macvlan 网络 128</p><p>8.3.3 macvlan 网络结构分析 130</p><p>8.3.4 用 sub-interface 实现多 macvlan 网络 131</p><p>8.3.5 macvlan 网络间的隔离和连通 132</p><p>8.4 flannel 136</p><p>8.4.1 实验环境描述 137</p><p>8.4.2 安装配置 etcd 137</p><p>8.4.3 build flannel 138</p><p>8.4.4 将 flannel 网络的配置信息保存到 etcd 139</p><p>8.4.5 启动 flannel 139</p><p>8.4.6 配置 Docker 连接 flannel 141</p><p>8.4.7 将容器连接到 flannel 网络 143</p><p>8.4.8 flannel 网络连通性 144</p><p>8.4.9 flannel 网络隔离 146</p><p>8.4.10 flannel 与外网连通性 146</p><p>8.4.11 host-gw backend 146</p><p>8.5 weave 148</p><p>8.5.1 实验环境描述 148</p><p>8.5.2 安装部署 weave 149</p><p>8.5.3 在host1中启动weave 149</p><p>8.5.4 在 host1 中启动容器 150</p><p>8.5.5 在host2中启动weave并运行容器 153</p><p>8.5.6 weave 网络连通性 154</p><p>8.5.7 weave 网络隔离 155</p><p>8.5.8 weave 与外网的连通性 156</p><p>8.5.9 IPAM 158</p><p>8.6 calico 158</p><p>8.6.1 实验环境描述 159</p><p>8.6.2 启动 etcd 159</p><p>8.6.3 部署 calico 160</p><p>8.6.4 创建calico网络 161</p><p>8.6.5 在 calico 中运行容器 161</p><p>8.6.6 calico 默认连通性 164</p><p>8.6.7 calico policy 167</p><p>8.6.8 calico IPAM 169</p><p>8.7  比较各种网络方案 170</p><p>8.7.1 网络模型 171</p><p>8.7.2 Distributed Store 171</p><p>8.7.3 IPAM 171</p><p>8.7.4 连通与隔离 172</p><p>8.7.5 性能 172</p><p>第9章  容器监控 173</p><p>9.1 Docker自带的监控子命令 173</p><p>9.1.1 ps 173</p><p>9.1.2 top 174</p><p>9.1.3 stats 175</p><p>9.2 sysdig 175</p><p>9.3 Weave Scope 179</p><p>9.3.1 安装 179</p><p>9.3.2 容器监控 181</p><p>9.3.3 监控 host 184</p><p>9.3.4 多主机监控 186</p><p>9.4 cAdvisor 189</p><p>9.4.1 监控 Docker Host 189</p><p>9.4.2 监控容器 191</p><p>9.5 Prometheus 194</p><p>9.5.1 架构 194</p><p>9.5.2 多维数据模型 195</p><p>9.5.3 实践 196</p><p>9.6  比较不同的监控工具 204</p><p>9.7  几点建议 205</p><p>第10章  日志管理 207</p><p>10.1 Docker logs 207</p><p>10.2 Docker logging driver 209</p><p>10.3 ELK 211</p><p>10.3.1 日志处理流程 211</p><p>10.3.2 安装 ELK 套件 212</p><p>10.3.3 Filebeat 214</p><p>10.3.4 管理日志 216</p><p>10.4 Fluentd 220</p><p>10.4.1 安装 Fluentd 221</p><p>10.4.2 重新配置 Filebeat 221</p><p>10.4.3 监控容器日志 221</p><p>10.5 Graylog 222</p><p>10.5.1 Graylog 架构 222</p><p>10.5.2 部署 Graylog 223</p><p>10.5.3 配置 Graylog 225</p><p>10.5.4 监控容器日志 227</p><p>10.6 小结 229</p><p>第11章  数据管理 230</p><p>11.1 从一个例子开始 230</p><p>11.2 实践 Rex-Ray driver 232</p><p>11.2.1 安装 Rex-Ray 232</p><p>11.2.2 配置 VirtualBox 234</p><p>11.2.3 创建Rex-Ray volume 236</p><p>11.2.4 使用 Rex-Ray volume 237</p><p>写在最后 243</p> ...

October 15, 2019 · 3 min · jiezi

Docker生产环境实践指南

下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐Docker进入大家视野已经有段时间了,也历经了多个重要的版本升级。有报告表明,在一线互联网公司中,已经有27%的企业在生产环节中使用到了Docker,先行者已开始从中获益。但目前Docker资料仍停留在概念或者实验级别,关于真正在生产环境中使用Docker的内容则少之又少,杰出实践方面的信息与资料也十分稀缺。Docker技术对于IT架构乃至软件架构的改变是巨大的,对于想在生产环境中使用Docker的企业和团队来讲,只掌握概念和基本原理是不够的,如何能使用Docker解决自身问题,获得由此带来的收益,需要更多的生产实践方面的内容。本书以生产部署为背景,讲述Docker在真实环境中的使用,能够给读者一个很好的参考,进而达到让读者"举一反三"的效果,使其能让自身的IT架构提升到一个新的技术高度。 内容简介本书围绕“Docker该如何应用到生产环境”这一核心问题展开。在本书中,读者将接触到多个IT企业应用Docker到生产环境的成功案例,了解Docker实际投产时将会面临的问题,以及它与现有基础设施存在的矛盾与冲突,了解构建Docker生态系统所需的配套设施,包括安全、构建镜像、持续集成/持续交付、镜像存储、配置管理、网络实现、服务发现、持久化存储以及日志监控等模块具体选型方案及利弊所在。本书编写时一些案例参考的Docker版本是Docker 1.6版本或Docker 1.7。本书要求读者具备一定的容器管理和运维的基础知识,适合在生产环境中使用Docker的相关技术人员阅读,尤其适合具有中高级DevOps和运维背景的读者阅读。 作者简介作者介绍Joe Johnston是一名全栈开发人员、企业家及服务于旧金山创业公司的顾问。他是Airstack(一家微服务基础设施创业公司)、California Labs和Connect.Me的联合创始人。 Antoni Batchelli是PeerSpace公司 的工程副总裁和PalletOps公司(一家基础设施自动化咨询公司)的联合创始人。他的主要工作是将函数式编程语言与基础设施结合,以及帮助工程团队打造杰出的软件。 Justin Cormack是一名顾问,他对开源软件、云计算及分布式系统方面的创新机会尤其感兴趣。他目前就职于unikernels。读者可以在GitHub上找到他。 John Fiedler是RelateIQ公司的工程运营总监。他的团队专注于基于Docker的解决方案,为其SaaS基础设施及DevOps提供动力。 Milos Gajdos不仅是一名独立咨询师,还是Infrahackers有限公司的基础设施的负责人,他协助企业更好地理解Linux容器技术,并实现基于容器的基础设施。他偶尔会撰写一些有关容器的博客文章。译者介绍吴佳兴,毕业于华东理工大学计算机系,目前是携程网系统研发团队的一名DevOps工程师,主要研究的方向有Python开发、运维自动化、配置管理及PaaS平台的构建等,2014年年底有幸加入DockOne社区,作为译者,利用闲暇时间为社区贡献一些微薄的力量。梁晓勇,毕业于厦门大学,现任某互联网金融公司架构师,DockOne社区编外人员,长期奋战在技术研发一线,在网络管理、技术开发、架构设计等方面略有心得。热爱互联网技术,积极投身开源社区,对Docker等容器技术具有浓厚兴趣。 目 录目录第1章 入门 11.1 术语 11.1.1 镜像与容器 11.1.2 容器与虚拟机 11.1.3 持续集成/持续交付 21.1.4 宿主机管理 21.1.5 编排 21.1.6 调度 21.1.7 发现 21.1.8 配置管理 21.2 从开发环境到生产环境 31.3 使用Docker的多种方式 31.4 可预期的情况 4第2章 技术栈 72.1 构建系统 82.2 镜像仓库 82.3 宿主机管理 82.4 配置管理 92.5 部署 92.6 编排 9第3章 示例:极简环境 113.1 保持各部分的简单 113.2 保持流程的简单 133.3 系统细节 143.4 集群范围的配置、通用配置及本地配置 183.5 部署服务 193.6 支撑服务 213.7 讨论 213.8 未来 223.9 小结 22第4章 示例:Web环境 234.1 编排 244.1.1 让服务器上的Docker进入准备运行容器的状态 254.1.2 让容器运行 254.2 连网 284.3 数据存储 284.4 日志 294.5 监控 304.6 无须担心新依赖 304.7 零停机时间 304.8 服务回滚 314.9 小结 31第5章 示例:Beanstalk环境 335.1 构建容器的过程 345.2 日志 355.3 监控 365.4 安全 365.5 小结 36第6章 安全 376.1 威胁模型 376.2 容器与安全性 386.3 内核更新 396.4 容器更新 396.5 suid及guid二进制文件 406.6 容器内的root 406.7 权能 416.8 seccomp 416.9 内核安全框架 426.10 资源限制及cgroup 426.11 ulimit 436.12 用户命名空间 436.13 镜像验证 446.14 安全地运行Docker守护 进程 456.15 监控 456.16 设备 456.17 挂载点 456.18 ssh 466.19 私钥分发 466.20 位置 46第7 ...

October 15, 2019 · 1 min · jiezi

java部署微服务到Docker

本项目微服务采用SpringBoot开发,将每个微服务工程打成Jar包,最终在Docker容器中运行jar,部署流程如下 1、SpringBoot工程最终打成 Jar包2、创建Docker镜像3、创建容器4、启动容器maven的打包插件手动部署使用IDEA搭建SpringBoot工程,将下边的插件依赖拷贝到微服务工程中 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>完整的spring-docker工程pom.xml文件如下 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>docker</artifactId> <version>0.0.1-SNAPSHOT</version> <name>docker</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>在工程目录运行:mvn clear package或通过IDEA执行clear package打包命令,打包成功,如下图:将上一步的jar包拷贝到Linux服务器,准备创建镜像。测试jar包是否可以运行,执行:java -jar docker-0.0.1-SNAPSHOT.jar 在docker-0.0.1-SNAPSHOT.jar位置编写Dockerfile文件Dockerfile内容为 FROM java:8ADD docker-0.0.1-SNAPSHOT.jar /docker-test.jar EXPOSE 9000ENTRYPOINT ["java","-jar","/docker-test.jar"]在Dockerfile文件所在目录执行 ...

October 15, 2019 · 1 min · jiezi

各种各样的镜像加速

各种各样的镜像加速mirrors-for-coder这里做一个集中,尽管以前都是遇到时立即搜索,但是集中一下之后,看起来也很壮观的。 当然,欢迎完善它。 https://github.com/hedzr/mirr...China MirrorsGitHub Clone通过HTTPS协议Clone仓库的话,可能会遇到速度很慢的情况。 根据经验,在慢的时候中断Clone捎带片刻重复命令的话,你可能会得到正常速度,这种偷鸡的策略适合于小小仓库。 对于大型仓库,改走SSH协议进行clone的话,走到正常速度的几率较大,但此时的速度相较于HTTPS而言通常会有所损耗。 但下面还有一种较为费事的方法,通过修改 hosts 文件来完成提速,无需科学也无需代理加速也无需镜像加速(GitHub是不太可能有镜像的)。具体来说请接下去阅读: 首先在 https://www.ipaddress.com/ 查询这三个域名的地址: github.comassets-cdn.github.comgithub.global.ssl.fastly.net然后按照查询的结果填写到 /etc/hosts 中,windows用户请查找 %WINDIR%/system32/drivers/etc/hosts 文件。请注意修改 hosts 文件通常需要 sudo 权限 或者管理员权限。修改内容如同下面: 140.82.118.3 github.com185.199.109.153 assets-cdn.github.com185.199.111.153 assets-cdn.github.com185.199.108.153 assets-cdn.github.com185.199.110.153 assets-cdn.github.com151.101.113.194 github.global.ssl.fastly.net如果你有国外的服务器,也可以通过dig指令来查找: $ dig github.com +short140.82.118.3Docker CEDocker CE 的具体加速办法有很多种,然而各种版本的本质都是一样的,一般来说你需要找到 docker daemon 的配置文件 /etc/docker/daemon.json,然后修改它像这样: { "insecure-registries" : [ "registry.mirrors.aliyuncs.com" ], "debug" : true, "experimental" : false, "registry-mirrors" : [ "https://docker.mirrors.ustc.edu.cn", "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com", "https://registry.docker-cn.com" ]}如果你在这个文件中自定义了其他项目,或者这个文件中已经存在其他定义,请注意保持。 参考:https://docs.docker.com/engin... Ubuntu Apt Source如果你使用桌面版本,则 Ubuntu 的软件源设置中,你可以选取最近的地区,例如中国大陆,从而加速软件包下载速度。 ...

October 15, 2019 · 4 min · jiezi

Verdaccio-使用-Docker-安装及迁移教程

前言Verdaccio 是一个 npm 私有源,代码在 GitHub 开源,公司由于业务需要使用也有一段时间,非常稳定,社区也很活跃。入门可以看我之前写的一篇文章: npm私服安装教程 - verdaccio 入门 前一段时间由于所在服务器升级,顺便更新了下 Verdaccio 版本,并将之前的数据都迁移过来。由于公司服务器上有 docker,所以就使用 docker 来安装。 安装下载镜像先下载最新的 Verdaccio 镜像,使用官方的 docker 镜像 docker pull verdaccio/verdaccio上面命令拉取的即是 latest 的镜像 启动前配置如果没有安装 docker-compose,可以看文末链接。 在工作目录新建文件夹 npm,然后新建 docker-compose.yml 文件 mkdir npm && touch npm/docker-compose.yml然后将以下配置粘贴到 docker-compose.yml 文件中: version: '3.4'services: verdaccio: image: verdaccio/verdaccio container_name: "verdaccio" networks: - node-network environment: - VERDACCIO_PORT=4873 ports: - "4873:4873" volumes: - "./storage:/verdaccio/storage" - "./config:/verdaccio/conf" - "./plugins:/verdaccio/plugins"networks: node-network: driver: bridge上面配置即使用了刚才下载的 verdaccio 镜像,容器和宿主机都绑定在 4873 端口。同时挂载了当前目录的 storage,config, plugins 文件夹到容器内部。 ...

October 14, 2019 · 2 min · jiezi

PaaS实现与运维管理基于Mesos-DockerELK的实战指南

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐本书从技术和管理两个角度详解分布式PaaS平台的实现与运维,主要涉及: ◎概念模型:引入PaaS平台 ◎基础资源:回归本真,理解三大基础资源——计算、存储、网络 ◎平台实现:构建完整的PaaS平台——基于容器的操作系统虚拟化技术Docker|分布式协调系统ZooKeeper|资源管理系统Mesos|服务调度框架 Marathon|大数据处理架构Spark|日志搜索分析系统ELK ◎运维管理:运维管理的核心是配置管理。 直逼系统运维前线的种种烦恼,集技术原理、生产实践与系统实现三位一体,内容充实、层次清晰、行文流畅,堪称云计算时代、分布式环境下不可多得的运维好书。 海报 内容简介本书主要阐述了云计算中PaaS平台的实现与运维管理,分为四大部分,分别是概念模型、基础资源、平台实现与运维管理,共十五章。**部分阐述了运维与开发之间的关系、这层关系存在的矛盾,以及PaaS是如何有效缓解其矛盾的;第二部分勾勒出了数据中心的计算、网络、存储三大资源的主干,避免让人陷入上层的种种产品中;第三部分通过开源产品来构建一个完整的PaaS平台,包括资源管理、任务调度、计算单元打包、分布式协调、日志集中等;第四部分对运维管理进行了实践。 本书适合运维工程师、运维管理人员,以及希望在PaaS上运行分布式、可伸缩、高可用的后端开发工程师阅读。 作者简介余何,昵称为“众神的大师兄”,湖南长沙人。国家软件设计师、PMP项目管理认证师、Juniper互联网专员(JNCIS)、NetApp解决方案架构师(NCSA)、高效运维公众号专栏作者。 拥有十余年数据中心运维管理经验,先后任职于华为、平安科技,主导了平安IT基础架构改造、ITIL流程变革等重大项目。热衷于开源技术,广结天下英豪,以运维心灵捕手著称。 目 录**部分 概念模型第1章 分布式PaaS平台介绍 21.1 什么是PaaS 21.1.1 开发与运维之间的困局 21.1.2 DevOps的自动化 31.1.3 云计算的IaaS 41.1.4 PaaS的到来 41.1.5 PaaS的约束与开放 41.1.6 PaaS解决的具体问题 51.2 什么是分布式计算 61.2.1 分布式计算与PaaS 61.2.2 分布式平台的挑战 7第2章 PaaS模型与特征 102.1 主流PaaS平台架构 102.1.1 谷歌GAE 102.1.2 AEB 112.1.3 Cloud Foundry 132.1.4 Heroku 142.2 PaaS与12-Factor 152.2.1 基准代码(Codebase) 152.2.2 依赖(Dependency) 162.2.3 配置(Config) 172.2.4 后端服务(Backing Services) 182.2.5 构建(Build)、发布(Release)、运行(Run) 192.2.6 进程(Process) 202.2.7 端口绑定(Port Binding) 212.2.8 并发(Concurrency) 212.2.9 快捷性(Disposable) 222.2.10 开发/生产环境等价(Dev/Prod Parity) 232.2.11 日志(Log) 242.2.12 管理进程(Admin Process) 252.3 PaaS与Reaction宣言 262.3.1 响应(Responsive) 262.3.2 韧性(Resilient) 262.3.3 弹性(Elastic) 272.3.4 消息驱动(Message Driven) 28第二部分 基础原理第3章 计算资源 303.1 图灵机与冯·诺伊曼模型 303.2 服务器的种类 343.3 一切都是二进制 373.3.1 整数表示法 383.3.2 文本表示法 393.3.3 音频信息表示法 413.4 操作系统——计算机系统的指挥官 423.4.1 操作系统解决的问题 423.4.2 企业级操作系统 433.4.3 服务器虚拟化 473.5 进程——资源聚合的抽象体 493.5.1 计算单元的构建 493.5.2 计算请求的拆解 51第4章 网络资源 534.1 协议分层 534.1.1 OSI网络体系模型 544.1.2 OSI与TCP/IP协议簇 554.1.3 交换、选路与传输 564.2 网络物理设备 584.2.1 连线与接口 594.2.2 二层交换机 624.2.3 路由及三层交换 634.2.4 四~七层网络设备 644.2.5 现实网络构成 654.3 网络逻辑拓扑 654.4 对网络拓扑的考虑 664.5 对物理布线的考虑 674.6 网络虚拟化与SDN 70第5章 存储资源 735.1 俯瞰存储系统 735.1.1 数据存储功能分类 735.1.2 文件存储的三个层级 745.2 磁盘与磁盘阵列 775.2.1 硬盘的物理构造 775.2.2 磁盘阵列 795.2.3 SCSI协议 815.3 存储、计算分离 825.3.1 磁盘柜与盘阵 825.3.2 FC存储网络 835.3.3 FC协议栈 865.3.4 FC寻址过程 875.3.5 FC交换机与适配器 885.3.6 FCoE与iSCSI 895.4 存储访问类型 905.4.1 NAS与SAN 905.4.2 分布式存储 92第三部分 平台实现第6章 平台功能与架构 966.1 平台运维需求 966.1.1 软件配置 966.1.2 服务部署 976.1.3 服务发现 976.1.4 监控恢复 976.2 平台功能划分 976.3 平台高阶架构 1006.4 企业应用迁移 1026.4.1 企业应用很“厚重” 1026.4.2 应用部署架构 1026.4.3 企业应用调整 104第7章 计算单元Docker 1087.1 Docker介绍 1087.1.1 Docker是什么 1087.1.2 Docker术语 1097.1.3 Docker安装 1117.2 Docker容器命令 1127.2.1 run命令 1127.2.2 start命令 1157.2.3 stop命令 1167.2.4 restart命令 1167.2.5 attach命令 1167.2.6 ps命令 1167.2.7 inspect命令 1177.3 Docker镜像命令 1197.3.1 search、pull、push命令 1207.3.2 commit命令 1207.3.3 image、diff、rmi命令 1217.3.4 save、load、export、import命令 1217.4 Docker网络与链接 1227.4.1 Docker网络模式 1227.4.2 pipework管理网络 1257.4.3 容器链接与数据卷 1277.5 Dockerfile 1297.5.1 基本指令集 1307.5.2 环境指令集 1317.5.3 数据指令集 1327.5.4 ENTRYPOINT指令 132第8章 分布式协调ZooKeeper 1348.1 ZooKeeper介绍 1348.1.1 ZooKeeper是什么 1348.1.2 ZooKeeper架构 1358.1.3 数据模型 1368.1.4 监听与通知 1398.1.5 API集合 1398.1.6 会话 1408.1.7 观察者 1418.2 ZooKeeper使用 1418.2.1 快速安装 1418.2.2 基本操作 1438.2.3 配置参数 1458.2.4 动态重配置 1498.2.5 监控 1528.3 ZooKeeper进阶 1578.3.1 分组与权重 1588.3.2 Paxos算法 1598.3.3 ZAB协议 1638.3.4 分布式协调场景 165第9章 资源管理Mesos 1679.1 Mesos介绍 1679.1.1 资源管理需求 1679.1.2 Mesos的起源 1699.2 Mesos架构与工作流 1699.2.1 Mesos架构组件 1699.2.2 Mesos资源管理的工作流程 1709.3 Mesos安装配置 1729.3.1 安装预先准备 1729.3.2 构建Mesos 1739.3.3 启动Mesos 1749.3.4 高可用Mesos 1789.3.5 Slave移除限速 1829.4 Mesos运维 1839.4.1 认证管理 1839.4.2 监控管理 1869.4.3 容器网络限速 1929.4.4 Framework API限速 1949.4.5 Restful接口 1959.4.6 配置参数 1969.5 Mesos资源分配 1979.5.1 DRF算法 1979.5.2 DRF权重 199第10章 服务调度框架 Marathon 20010.1 Marathon介绍 20010.1.1 服务调度平台 20010.1.2 Marathon实体模型 20110.2 Marathon使用 20310.2.1 安装启动 20310.2.2 运行Shell程序 20410.2.3 运行远程资源 20810.2.4 Artifact Store 20910.3 Docker容器运行 21110.3.1 前提准备条件 21110.3.2 端口资源分配 21210.3.3 容器端口分配 21510.3.4 其他使用方法 21610.4 Marathon管理 21710.4.1 应用组 21710.4.2 策略约束 21910.4.3 健康检查 22110.4.4 应用部署 22310.4.5 事件总线 22710.4.6 命令行参数 22910.5 服务发现 23110.5.1 服务发现方法 23110.5.2 Marathon方案 23210.5.3 Mesos-DNS 23510.5.4 Bamboo 23910.6 Chronos作业调度 24110.6.1 作业调度框架 24110.6.2 安装运行 24110.6.3 作业示例 24210.6.4 REST API 243第11章 大数据调度框架Spark 24511.1 Apache Spark介绍 24511.1.1 Apache Spark是什么 24511.1.2 Lambda架构 24611.1.3 Spark生态系统 24711.2 Spark数据处理 24811.2.1 Spark 运行模式 24811.2.2 Spark Standalone模式 25211.2.3 Spark on Mesos 25511.2.4 Spark Streaming 257第12章 日志集中管理ELK 26112.1 日志集中 26112.1.1 日志集中介绍 26112.1.2 日志集中架构 26212.1.3 日志集中框架 26412.2 Logstash 26612.2.1 Logstash介绍 26612.2.2 快速安装 26712.2.3 配置说明 26912.2.4 部署架构 28212.2.5 处理流程 28512.2.6 input插件 28612.2.7 output插件 29212.2 ...

October 14, 2019 · 3 min · jiezi

自己动手写Docker

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 内容简介通过讲解 Docker 使用到的各种底层技术,例如Namespace、Cgroups等来自己一步步动手完成一个简单版本的Docker。在自己动手的过程中,从而对Docker 这个技术有一个整体、细致的了解。能够明白Docker 的原理以及结构,从而加深对目前炽手可热的Docker 技术的理解,方便解决工作中使用Docker 遇到的各种问题。 作者简介2015年在 IBM CDL 从事研发工程师工作,方向为云计算与虚拟化。2016年初加入阿里云,就职容器服务,从事Docker 研发与容器化技术解决方案。 目 录目录第1章 容器与开发语言………………………………………………………………………11.1 Docker ………………………………………………………………………………11.1.1 简介 …………………………………………………………………………11.1.2 容器和虚拟机比较 …………………………………………………………21.1.3 容器加速开发效率 …………………………………………………………31.1.4 利用容器合作开发 …………………………………………………………41.1.5 利用容器快速扩容 …………………………………………………………41.1.6 安装使用Docker ……………………………………………………………41.2 Go ……………………………………………………………………………………51.2.1 描述 …………………………………………………………………………51.2.2 安装Go ………………………………………………………………………61.2.3 配置GOPATH ………………………………………………………………61.3 小结 …………………………………………………………………………………7第2章 基础技术………………………………………………………………………………82.1 Linux Namespace 介绍 ………………………………………………………………82.1.1 概念 …………………………………………………………………………82.1.2 UTS Namespace ………………………………………………………………102.1.3 IPC Namespace ………………………………………………………………112.1.4 PID Namespace ………………………………………………………………132.1.5 Mount Namespace ……………………………………………………………142.1.6 User Namespace ………………………………………………………………162.1.7 Network Namespace ………………………………………………………… 182.2 Linux Cgroups 介绍 ………………………………………………………………… 202.2.1 什么是Linux Cgroups ……………………………………………………… 202.2.2 Docker 是如何使用Cgroups 的 …………………………………………… 242.2.3 用Go 语言实现通过cgroup 限制容器的资源 …………………………… 252.3 Union File System …………………………………………………………………… 262.3.1 什么是Union File System …………………………………………………… 262.3.2 AUFS ………………………………………………………………………… 272.3.3 Docker 是如何使用AUFS 的 ……………………………………………… 272.3.4 自己动手写AUFS…………………………………………………………… 342.4 小结 ………………………………………………………………………………… 37第3 章 构造容器……………………………………………………………………………… 383.1 构造实现run 命令版本的容器 …………………………………………………… 383.1.1 Linux proc 文件系统介绍 …………………………………………………… 383.1.2 实现 run 命令 ……………………………………………………………… 393.2 增加容器资源限制 ………………………………………………………………… 453.2.1 定义Cgroups 的数据结构 ………………………………………………… 453.2.2 在启动容器时增加资源限制的配置 ……………………………………… 513.3 增加管道及环境变量识别 ………………………………………………………… 533.4 小结 ………………………………………………………………………………… 58第4 章 构造镜像……………………………………………………………………………… 594.1 使用busybox 创建容器 …………………………………………………………… 594.1.1 busybox ……………………………………………………………………… 594.1.2 pivot_root …………………………………………………………………… 604.2 使用AUFS 包装busybox …………………………………………………………… 634.3 实现volume 数据卷 ………………………………………………………………… 674.4 实现简单镜像打包 ………………………………………………………………… 754.5 小结 ………………………………………………………………………………… 77第5 章 构建容器进阶………………………………………………………………………… 785.1 实现容器的后台运行 ……………………………………………………………… 785.2 实现查看运行中容器 ……………………………………………………………… 825.2.1 准备数据 …………………………………………………………………… 825.2.2 实现mydocker ps …………………………………………………………… 875.3 实现查看容器日志 ………………………………………………………………… 905.4 实现进入容器Namespace ………………………………………………………… 935.4.1 setns ………………………………………………………………………… 945.4.2 Cgo …………………………………………………………………………… 945.4.3 实现命令 …………………………………………………………………… 945.5 实现停止容器 ……………………………………………………………………… 1005.6 实现删除容器 ……………………………………………………………………… 1045.7 实现通过容器制作镜像 …………………………………………………………… 1055.8 实现容器指定环境变量运行 ……………………………………………………… 1175.8.1 修改runCommand …………………………………………………………… 1175.8.2 修改Run 函数 ……………………………………………………………… 1175.8.3 修改NewParentProcess 函数 ……………………………………………… 1185.8.4 修改mydocker exec 命令 …………………………………………………… 1195.9 小结 ………………………………………………………………………………… 121第6 章 容器网络……………………………………………………………………………… 1226.1 网络虚拟化技术介绍 ……………………………………………………………… 1226.1.1 Linux 虚拟网络设备 ………………………………………………………… 1226.1.2 Linux 路由表 ………………………………………………………………… 1246.1.3 Linux iptables ………………………………………………………………… 1266.1.4 Go 语言网络库介绍 ………………………………………………………… 1276.2 构建容器网络模型 ………………………………………………………………… 1286.2.1 模型 ………………………………………………………………………… 1286.2.2 调用关系 …………………………………………………………………… 1306.3 容器地址分配 ……………………………………………………………………… 1376.3.1 bitmap 算法介绍 …………………………………………………………… 1386.3.2 数据结构定义 ……………………………………………………………… 1386.3.3 地址分配的实现 …………………………………………………………… 1406.3.4 地址释放的实现 …………………………………………………………… 1426.3.5 测试 ………………………………………………………………………… 1426.4 创建Bridge 网络 …………………………………………………………………… 1446.4.1 Bridge Driver Create 实现 …………………………………………………… 1446.4.2 Bridge Driver 初始化Linux Bridge 流程 …………………………………… 1446.4.3 Bridge Driver Delete 实现 …………………………………………………… 1486.4.4 测试 ………………………………………………………………………… 1486.5 在Bridge 网络创建容器 …………………………………………………………… 1496.5.1 挂载容器端点的流程 ……………………………………………………… 1506.5.2 测试 ………………………………………………………………………… 1566.6 容器跨主机网络 …………………………………………………………………… 1596.6.1 跨主机容器网络的IPAM …………………………………………………… 1606.6.2 跨主机容器网络通信的常见实现方式 …………………………………… 1616.7 小结 ………………………………………………………………………………… 163第7 章 高级实践……………………………………………………………………………… 1647.1 使用mydocker 创建一个可访问的nginx 容器 …………………………………… 1647.1.1 获取nginx tar 包 …………………………………………………………… 1647.1.2 构建自己的nginx 镜像 ……………………………………………………… 1657.1.3 运行mynginx 容器 ………………………………………………………… 1677.2 使用mydocker 创建一个flask redis 的计数器 ………………………………… 1697.2.1 创建redis 容器 ……………………………………………………………… 1697.2.2 制作flask 镜像 ……………………………………………………………… 1737. ...

October 14, 2019 · 2 min · jiezi

Docker开发指南

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐Docker容器给软件的开发、发布和运行提供了简单、快速和可靠的方法,尤其是在动态和分布式的环境中。通过这本实战指南,你将学习到为什么容器如此重要,Docker能带来哪些好处,以及怎样把它变成开发流程的一部分。 本书适合软件开发者、运维工程师和系统管理员,尤其适合对DevOps模式感兴趣的读者。作者将带领你从基础知识出发,直到了解如何在多主机系统上运行数十个拥有联网和调度能力的容器系统,重在让你掌握使用Docker来开发、测试以及部署Web应用。 · 从构建和部署简单Web应用开始了解Docker · 使用持续部署技术,把应用一天多次推送到生产环境 · 学习各种不同的选项和技术,实现多容器的日志记录和监控 · 剖析联网和服务发现:容器之间如何寻找对方,以及怎样把它们连接起来 · 通过运用容器的编排和集群功能,解决负载均衡、扩展、故障切换以及调度的问题 · 遵守纵深防御和*小权限的原则,确保系统安全 · 利用容器构建微服务架构 内容简介Docker容器轻量和可移植的特性尤其适用于动态和分布式的环境,它的兴起给软件开发流程带来了一场革命。Docker开发指南对Docker进行了全面讲解,包括开发、生产以至维护的整个软件生命周期,并对其中可能出现的一些问题进行了探讨,如软件版本差异、开发环境与生产环境的差异、系统安全问题,等等。 作者简介Adrian Mouat Container Solutions公司首席科学家。参与过很多软件项目,既有小型的Web应用,也有大型数据分析软件。 译者简介 : 黄彦邦(Anthony Wong) Linux开发专家,热衷于开源技术,从事Linux相关开发工作十多年,曾参与多个大型开源项目,如Debian GNU/Linux和Ubuntu,提交补丁无数。以推动Debian系统中文化以及网站和文档翻译为目标,1998年成为中国首位Debian计划官方开发者。 个人网站:http://blog.anthonywong.net 目 录前言 xi第一部分 背景与基础第 1 章 何谓容器,为何需要它 31.1 容器与虚拟机的比较 41.2 Docker与容器 51.3 Docker的历史 71.4 插件与基础设施 81.5 64位Linux 9第 2 章 安装 102.1 在Linux上安装 Docker 102.1.1 将SELinux置于宽容模式下运行 112.1.2 不使用sudo命令执行Docker 112.2 在Mac OS及Windows上安装Docker 122.3 快速确认 13第 3 章 迈出第一步 153.1 运行第一个镜像 153.2 基本命令 163.3 通过Dockerfile创建镜像 203.4 使用寄存服务 223.5 使用Redis官方镜像 243.6 总结 27第 4 章 Docker基本概念 284.1 Docker系统架构 284.1.1 底层技术 294.1.2 周边技术 304.1.3 Docker托管 314.2 镜像是如何生成的 324.2.1 构建环境的上下文 324.2.2 镜像层 334.2.3 缓存 354.2.4 基础镜像 354.2.5 Dockerfile指令 374.3 使容器与世界相连 394.4 容器互联 404.5 利用数据卷和数据容器管理数据 414.5.1 共享数据 434.5.2 数据容器 444.6 Docker常用命令 454.6.1 run命令 464.6.2 容器管理 484.6.3 Docker信息 504.6.4 容器信息 504.6.5 镜像管理 524.6.6 使用寄存服务器 544.7 总结 55第二部分 Docker与软件生命周期第 5 章 在开发中应用Docker 595.1 说声“Hello World!” 595.2 通过Compose实现自动化 675.3 总结 69第 6 章 创建一个简单的Web应用 716.1 创建一个基本网页 726.2 利用现有镜像 736.3 实现缓存功能 786.4 微服务 816.5 总结 81第 7 章 镜像分发 827.1 镜像及镜像库的命名方式 827.2 Docker Hub 837.3 自动构建 857.4 私有分发 867.4.1 运行自己的寄存服务 867.4.2 商业寄存服务 927.5 缩减镜像大小 927.6 镜像出处 947.7 总结 94第 8 章 Docker持续集成与测试 958.1 为identidock添加单元测试 958.2 创建Jenkins容器 1008.3 推送镜像 1068.3.1 给镜像正确的标签 1068.3.2 准生产及生产环境 1088.3.3 镜像数量激增的问题 1088.3.4 使用Docker部署Jenkins slaves 1098.4 备份Jenkins数据 1098.5 持续集成的托管解决方案 1098.6 测试与微服务 1108.7 总结 111第 9 章 部署容器 1139.1 通过Docker Machine配置资源 1149.2 使用代理 1179.3 执行选项 1229.3.1 shell脚本 1229.3.2 使用进程管理器(或用systemd控制所有进程) 1249.3.3 使用配置管理工具 1279.4 主机配置 1309.4.1 选择操作系统 1309.4.2 选择存储驱动程序 1309.5 专门的托管方案 1329.5.1 Triton 1329.5.2 谷歌容器引擎 1349.5.3 亚马逊EC2容器服务 1359.5.4 Giant Swarm 1369.6 持久性数据和生产环境容器 1389.7 分享秘密信息 1399.7.1 在镜像中保存秘密信息 1399.7.2 通过环境变量传递密钥 1399.7.3 通过数据卷传递密钥 1409.7.4 使用键值存储 1409.8 网络连接 1419.9 生产环境的寄存服务 1419.10 持续部署 / 交付 1419.11 总结 142第 10 章 日志记录和监控 14310.1 日志记录 14410.1.1 Docker默认的日志记录 14410.1.2 日志汇总 14510.1.3 使用ELK进行日志记录 14610.1.4 通过syslog实现日志管理 15510.1.5 从文件抓取日志 16010.2 监控和警报 16110.2.1 使用Docker工具进行监测 16110.2.2 cAdvisor 16210.2.3 集群解决方案 16310.3 商用的监听及日志记录解决方案 16610.4 总结 166第三部分 工具和技术第 11 章 联网和服务发现 16911.1 大使容器 17011.2 服务发现 17311.2.1 etcd 17311.2.2 SkyDNS 17711.2.3 Consul 18111.2.4 服务注册 18511.2.5 其他解决方案 18611.3 联网选项 18711.3.1 网桥模式 18711.3.2 主机模式 18811.3.3 容器模式 18811.3.4 未联网模式 18811.4 全新的Docker联网功能 18811.5 网络解决方案 19011.5.1 Overlay 19111.5.2 Weave 19311.5.3 Flannel 19611.5.4 Calico项目 20111.6 总结 205第 12 章 编排、集群和管理 20712.1 集群和编排工具 20812.1.1 Swarm 20812.1.2 fleet 21412.1.3 Kubernetes 21912.1.4 Mesos和Marathon 22612.2 容器管理平台 23512.2.1 Rancher 23612.2.2 Clocker 23712.2.3 Tutum 23812.3 总结 239第 13 章 容器安全与限制容器 24113.1 需要考虑的事项 24213.2 纵深防御 24413.3 如何保护identidock 24513.4 以主机隔离容器 24613.5 进行更新 24613.6 镜像出处 24913.6.1 Docker摘要 25013.6.2 Docker的内容信任机制 25013.6.3 可复制及可信任的Dockerfile 25413.7 安全建议 25613.7.1 设置用户 25613.7.2 限制容器联网 25713.7.3 删除setuid和setgid的二进制文件 25813.7.4 限制内存使用 25913.7.5 限制CPU使用 26013.7.6 限制重新启动 26113.7.7 限制文件系统 26113.7.8 限制内核能力 26213.7.9 应用资源限制 26313.8 运行加固内核 26413.9 Linux安全模块 26513.9.1 SELinux 26513.9.2 AppArmor 26813.10 审核 26813.11 事件响应 26913.12 未来特性 26913.13 总结 270作者简介 271关于封面 271 ...

October 14, 2019 · 3 min · jiezi

Docker源码分析

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐 本书是一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。 作者通过大量的流程图和代码片段对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析,无论是Docker的使用者还是开发者,通过阅读此书都可以对Docker有更深刻的理解,能够更好的使用或者开发Docker。 内容简介 本书是一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。本书的内容主要集中于三部分:Docker的架构、Docker的模块,以及Docker的三驾马车Swarm、Machine和Compose。 第一部分(第1章)主要从宏观的角度和读者一起领略Docker的架构设计,并初步介绍架构中各模块的职责。 第二部分(第2~14章)是本书的主体部分,主要针对Docker中多个重要的模块进行具体深入分析,包括DockerClient、DockerDaemon、DockerServer、Docker网络、Docker镜像、Docker容器等。读者可以发现,Docker的模块之间耦合度非常低,很适合循序渐进,层层深入。第2~8章主要从Docker软件的架构入手,勾勒骨架;第9~11章集中于Docker镜像技术,夯实基础;第12~14章则进一步分析Docker容器的始末,阐述本质。 第三部分(第15~17章)介绍Docker生态三驾马车—Swarm、Machine和Compose。Docker拥有强大的单机能力,三驾马车可以很好地补充Docker的跨主机能力以及部署能力。读者可以通过这几章感受Docker生态中其他功能强大的软件。 目 录<p> 赞誉<br />序前言第1章 Docker架构 1.1 引言 1.2 Docker总架构图 1.3 Docker各模块功能与实现分析 1.3.1 Docker Client 1.3.2 Docker Daemon 1.3.3 Docker Registry 1.3.4 Graph 1.3.5 Driver 1.3.6 libcontainer 1.3.7 Docker Container 1.4 Docker运行案例分析 1.4.1 docker pull 1.4.2 docker run 1.5 总结</p><p> <br />第2章 Docker Client创建与命令执行 2.1 引言 2.2 创建Docker Client 2.2.1 Docker命令的flag参数解析 2.2.2 处理flag信息并收集Docker Client的配置信息 2.2.3 如何创建Docker Client 2.3 Docker命令执行 2.3.1 Docker Client解析请求命令 2.3.2 Docker Client执行请求命令 2.4 总结</p><p> ...

October 14, 2019 · 4 min · jiezi

没什么难的Docker入门与开发实战

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐适合不同开发者的Docker工具书! 内容全面:基础命令、进阶用法悉数囊括,知识点全覆盖。 活学活用:大量实践案例展示,指导上手使用,深化理解。 知识新鲜:以*文档、材料为基础,跟进Docker演进的步伐。 内容简介作为引领近几年容器虚拟化领域的技术,Docker的发展方兴未艾。但由于其出现不过数年,关于它的资料,特别是中文资料仍然相对匮乏,导致国内许多开发者对其感到陌生。本书正是以布道Docker为理念,由浅入深地从阐述Docker的基本概念、讲解常规使用方法、进行操作实践的演示、展示提高和进阶用法、剖析内部原理和底层架构等多个方面,全方面的展现Docker所具有的魅力。本书由概念及至实践,从不同方面向读者展现了Docker,实用性非常强,既可以作为一本学习Docker的入门教材,也能作为进行Docker操作实践的说明书,甚至可以作为提高和进阶的知识宝库。不论是对Docker认知程度不同,有着不同知识储备的人,还是处于程序软件研发部署流程中的开发人员、测试人员或运维人员,本书都有着很强的可阅读性。 作者简介熊昌隆,资深架构师,Web全栈开发者,知名博主,Beaver框架作者,开源小组Funcuter的发起者,致力于新兴技术的研究和推广。早年参与智慧路由的研究,多项研究成果影响了家用路由器的发展。设计实现的Beaver框架,已经应用于千万级系统的底层程序架构中。发起组建的Funcuter开源小组,旨在聚集国内的优秀开源项目和开发者,目前已经拥有多个开源项目。近年来一直致力于前沿技术的研究和推广,希望让更多的开发者更轻松的接触、了解*兴科技成果,并应用于开发实践中。 目 录目 录第一部分 基础篇第1章 初识Docker 11.1 虚拟化 21.1.1 虚拟化技术 21.1.2 虚拟化的分类 41.2 容器技术与Docker 61.2.1 容器技术 61.2.2 Docker简介 81.2.3 改变世界的发明 101.3 Docker的安装 101.3.1 在Ubuntu中安装Docker 111.3.2 在CentOS中安装Docker 121.3.3 在Windows中安装Docker 131.3.4 在Mac OS中安装Docker 151.3.5 在其他系统中安装Docker 161.4 Docker的优势 171.4.1 革命性的虚拟化方案 171.4.2 高效的容器技术 181.4.3 社区的力量 191.5 Docker的应用场景 201.5.1 超短时间部署运行 201.5.2 节约迁移时间 211.6 本章小结 21第2章 镜像与仓库 222.1 镜像的概念 222.1.1 联合文件系统 222.1.2 Docker中的镜像 232.1.3 镜像的分层结构 242.1.4 镜像的写时复制 252.2 使用和管理镜像 262.2.1 获取镜像 262.2.2 列出镜像 282.2.3 获得镜像的详细信息 282.2.4 删除镜像 312.2.5 镜像的迁移 322.3 Docker Hub 332.3.1 镜像仓库 332.3.2 Docker Hub 342.3.3 注册Docker Hub账号 352.3.4 搜索镜像 362.3.5 共享自动构建镜像 382.4 搭建私有仓库 402.4.1 镜像分发服务 402.4.2 Docker Registry HTTP API 412.4.3 部署私有仓库 422.5 本章小结 44第3章 管理和使用容器 453.1 管理容器 453.1.1 创建容器 453.1.2 容器的启动过程 483.1.3 列出容器 493.1.4 容器的命名 513.1.5 启动和停止 523.1.6 暂停和恢复 533.1.7 重启容器 543.1.8 删除容器 553.2 连接到容器 553.2.1 查看进程信息 563.2.2 查看容器信息 563.2.3 容器日志 623.2.4 衔接到容器 633.2.5 在容器中执行命令 643.3 容器的保存与迁移 653.3.1 提交容器更改 653.3.2 容器的导入/导出 683.4 本章小结 70第4章 数据卷与网络 714.1 数据卷 714.1.1 关于数据卷 714.1.2 数据卷的特点 724.1.3 创建数据卷 734.1.4 挂载数据卷 744.1.5 删除数据卷 764.2 数据卷容器 774.2.1 关于数据卷容器 774.2.2 创建数据卷容器 784.2.3 连接数据卷容器 794.2.4 数据卷的迁移 804.3 网络基础 824.3.1 网络简介 824.3.2 查看网络配置 834.4 网络访问 854.4.1 宿主机端口映射 854.4.2 容器连接 874.5 本章小结 90第5章 制作镜像 915.1 了解Dockerfile 915.1.1 Dockerfile简介 925.1.2 使用Dockerfile创建镜像 945.2 基础指令 965.2.1 FROM 975.2.2 MAINTAINER 975.3 控制指令 975.3.1 RUN 975.3.2 WORKDIR 995.3.3 ONBUILD 995.4 引入指令 1005.4.1 ADD 1005.4.2 COPY 1025.5 执行指令 1025.5.1 CMD 1025.5.2 ENTRYPOINT 1045.6 配置指令 1075.6.1 EXPOSE 1085.6.2 ENV 1085.6.3 LABEL 1095.6.4 USER 1105.6.5 ARG 1115.6.6 STOPSIGNAL 1125.6.7 SHELL 1135.7 特殊用法 1135.7.1 环境变量 1135.7.2 指令解析 1145.7.3 忽略文件 1165.8 本章小结 117第二部分 实践篇第6章 SSH服务 1186.1 在Docker中使用SSH 1186.1.1 SSH简介 1196.1.2 SSH使用方法简介 1196.1.3 数据卷管理容器 1216.1.4 使用SSH服务容器 1226.2 构建SSH服务镜像 1246.2.1 构建方式比较 1246.2.2 通过提交构建 1256.2.3 使用Dockerfile构建 1276.3 本章小结 131第7章 Web服务器 1327.1 Web服务简介 1327.1.1 万维网与网站 1327.1.2 Web服务 1337.1.3 Web服务程序 1357.2 Apache 1357.2.1 Apache简介 1357.2.2 安装Apache 1367.2.3 构建Apache镜像 1397.2.4 测试Apache容器 1427.3 Nginx 1437.3.1 关于Nginx 1437.3.2 安装Nginx 1447.3.3 构建Nginx镜像 1467.3.4 测试Nginx镜像 1487.4 Tomcat 1487.4.1 Tomcat简介 1497.4.2 安装Tomcat 1497.4.3 构建Tomcat镜像 1527.5 本章小结 153第8章 数据库程序 1558.1 MySQL 1558.1.1 MySQL简介 1568.1.2 安装MySQL 1568.1.3 构建MySQL镜像 1628.1.4 测试MySQL容器 1648.2 MongoDB 1668.2.1 MongoDB简介 1668.2.2 安装MongoDB 1678.2.3 构建MongoDB镜像 1718.2.4 测试MongoDB容器 1738.3 本章小结 176第9章 缓存工具 1779.1 Memcached 1789.1.1 Memcached简介 1789.1.2 安装Memcached 1799.1.3 构建Memcached镜像 1849.1.4 测试Memcached容器 1869.2 Redis 1889.2.1 Redis简介 1889.2.2 安装Redis 1889.2.3 构建Redis镜像 1939.2.4 测试Redis容器 1959.3 本章小结 196第10章 动态处理程序 19710.1 Java 19710.1.1 Java简介 19810.1.2 安装Java 19810.1.3 构建Java镜像 20410.1.4 测试Java容器 20610.2 PHP 20710.2.1 PHP简介 20710.2.2 安装PHP 20810.2.3 构建PHP镜像 21410.2.4 测试PHP容器 21610.3 Python 21710.3.1 Python简介 21710.3.2 安装Python 21810.3.3 构建Python镜像 22310.3.4 测试Python容器 22410.4 Node.js 22510.4.1 Node.js简介 22510.4.2 安装Node.js 22610.4.3 构建Node.js镜像 22810.4.4 测试Node.js容器 23010.5 本章小结 231第11章 综合演练 23211.1 演练目标 23211.1.1 目标概述 23211.1.2 代码编写 23311.2 环境搭建 23711.2.1 准备镜像 23711.2.2 程序配置 23911.3 项目运行 24811.3.1 启动容器 24811.3.2 测试项目 24911.4 本章小结 253第三部分 提高篇第12章 网络进阶 25412.1 网络实现 25412.1.1 容器网络基础 25512.1.2 网络模型 25712.2 Docker中的网络 25812.2.1 默认网络 25812.2.2 自定义网络 26112.2.3 容器与外部通信 26212.2.4 容器间通信 26412.3 网络实践 26512.3.1 管理容器网络 26512.3.2 容器连接网络 26712.3.3 配置docker0网桥 26912.3.4 自定义网桥 27112.3.5 配置DNS 27112.3.6 使用IPv6 27312.4 本章小结 274第13章 安全加固 27513.1 深入理解Docker安全 27513.1.1 命名空间隔离 27613.1.2 资源控制组 27713.1.3 内核能力机制 27713.2 资源使用限制 27813.2.1 通过控制组限制 27813.2.2 通过ulimit限制 28013.2.3 网络访问限制 28013.3 校验与监控 28113.3.1 镜像签名 28113.3.2 运行状态监控 28313.4 联级防护 28413.4.1 组合虚拟化 28413.4.2 文件系统安全 28413.5 内核安全技术 28513.5.1 Capability 28613.5.2 SELinux 28713.5.3 AppArmor 28813.6 本章小结 289第14章 Docker API 29014.1 关于Docker API 29014.1.1 通用操作接口 29014.1.2 关于RESTful 29114.1.3 Docker API的优势 29214.1.4 Docker API的分类 29314.2 使用Docker Remote API 29314.2.1 关于Docker Remote API 29414.2.2 Docker Remote API的版本 29914.2.3 通过Remote API列出容器 30014.2.4 通过Remote API列出镜像 30214.3 使用Docker Registry API 30314.3.1 关于Docker Registry API 30414.3.2 Docker Registry API的主要功能 30414.3.3 Docker Registry API的版本 30514.3.4 通过Registry API拉取镜像 30614.3.5 通过Registry API推送镜像 30714.4 本章小结 309第15章 管理工具 31015.1 Docker Compose 31015.1.1 Docker Compose简介 31115.1.2 安装Docker Compose 31315.1.3 Docker Compose配置文件 31415.1.4 常用的Docker Compose命令 31515.2 Docker Machine 31815.2.1 Docker Machine简介 31815.2.2 安装Docker Machine 32015.2.3 Docker Machine常见命令 32115.3 Docker Swarm 32215.3.1 Docker Swarm简介 32215.3.2 Docker Swarm结构 32315.3.3 使用Docker Swarm 32315.3.4 Docker Swarm常见命令 32515.4 本章小结 327第16章 Docker的技术架构 32816.1 命名空间 32816.1.1 关于Linux命名空间 32816.1.2 命名空间的系统调用 32916.1.3 命名空间的分类 33016.2 控制组 33216.2.1 关于Linux控制组 33216.2.2 Cgroups的组成 33316.2.3 容器与控制组 33416.3 联合文件系统 33616.3.1 关于UFS 33616.3.2 Docker中的UFS 33716.4 Docker Engine架构 33816.4.1 Docker Engine的组成结构 33816.4.2 Docker Daemon 33916.4.3 Docker CLI 34216.5 本章小结 344 ...

October 14, 2019 · 4 min · jiezi

Docker实战

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐权威作者:具有十多年虚拟化研究经验,国内首批研究Docker容器技术的专家,Docker开源项目贡献者 快速入门:透过简单的理论讲解,带你进入Docker的世界 步骤详细:手把手教你配置方法,为你量身定制自己的Docker 内容丰富:揭露镜像制作过程,教你搭建镜像仓库 内容简介自从2013年3月Docker 0.1版本发布以来,以其为代表的容器技术发展也走上了快车道,Docker容器在很大程度上改变了软件的架构设计、开发和运维部署方式,也给早些年就提出的微服务架构模式插上了快速起飞的翅膀。本书由Docker社区第一人Jeff Nickoloff编写,共分为三部分,第一部分(1~6章)重点介绍Docker容器的资源隔离和权限控制及基础理论,第二部分(7~10章)详细解释了如何打包制作镜像以及各种镜像分发基础设施的建设,最后一部分(11~12章)聚焦于Docker容器的组合操作也就是多容器和多主机环境的管理。本书图文并茂,结合基本原理和具体案例给大家提供了多个不错的实战机会。 作为目前最炙手可热的容器技术类图书,本书适用于互联网、云计算及企业级软件开发、架构、测试及运维人员快速上手熟悉Docker容器,搭建以Docker为核心的基础设施,并在生产环境中快速部署应用以及管理容器集群。 作者简介胡震,上海凡用信息科技有限公司CTO,长夜公司首席架构师,DockOne社区优秀翻译。杨润青,90后博士僧,研究方向是网络和信息安全。 黄帅(Henry Huang),目前就职于趋势科技,负责集群运维开发和维护工作,所在项目从2011年使用AWS服务至今,积累一定的AWS运维经验。 Jeff Nickoloff会建立大规模的服务站,写关于技术的文字,并帮助人们实现他们的产品目标。他曾在Amazon.com、Limelight网络和亚利桑那州立大学做这些事情。2014年离开亚马逊,他创办了一家咨询公司,专注于为财富100强的企业和创业公司提供工具、培训和实践。 Jeff Nickoloff 会建立大规模的服务站,写关于技术的文字,并帮助人们实现他们的产品目标。他曾在Amazon.com、Limelight 网络和亚利桑那州立大学做这些事情。2014 年离开亚马逊,他创办了一家咨询公司,专注于为财富100 强的企业和创业公司提供工具、培训和实践。如果你想与他聊天或者一起工作,可以在http://allingeek.com 找到他,或者在Twitter 上找@allingeek。 目 录目 录第1部分 保持一台干净的机器第1章 欢迎来到Docker世界 21.1 什么是Docker 31.1.1 容器 31.1.2 容器不是虚拟化 41.1.3 在隔离的容器中运行软件 41.1.4 分发容器 61.2 Docker解决了什么问题 61.2.1 有条理 71.2.2 提高可移植性 81.2.3 保护你的机器 91.3 为什么Docker如此重要 101.4 何时何处使用Docker 111.5 案例:“hello world” 111.6 小结 13第2章 在容器中运行软件 142.1 从Docker命令行工具获得帮助 142.2 控制容器:建立一个网站的监控器 152.2.1 创建和启动一个新的容器 162.2.2 运行交互式容器 172.2.3 列举、停止、重新启动和查看容器输出 182.3 已解决的问题和PID命名空间 202.4 消除元数据冲突:构建一个网站农场 232.4.1 灵活的容器甄别 242.4.2 容器的状态和依赖 262.5 构建与环境无关的系统 282.5.1 只读文件系统 292.5.2 环境变量的注入 312.6 建立持久的容器 342.6.1 自动重启容器 352.6.2 保持容器运行init和supervisor进程 362.7 清理 382.8 小结 39第3章 软件安装的简化 403.1 甄别软件 413.1.1 什么是仓库 413.1.2 使用标签 423.2 查找和安装软件 433.2.1 命令行使用Docker Hub 433.2.2 通过网站访问Docker Hub 453.2.3 使用替代注册服务器 473.2.4 镜像文件 473.2.5 从Dockerfile安装 493.3 安装文件和隔离 493.3.1 镜像层实战 503.3.2 分层关系 513.3.3 容器文件系统抽象和隔离 523.3.4 工具集和文件系统结构的好处 533.3.5 联合文件系统的不足 533.4 小结 54第4章 持久化存储和卷间状态共享 554.1 存储卷的简介 564.1.1 存储卷提供容器无关的数据管理 564.1.2 NoSQL数据库使用存储卷 574.2 存储卷的类型 604.2.1 绑定挂载卷 604.2.2 Docker托管卷 634.3 共享存储卷 654.3.1 主机依赖的共享 654.3.2 通用共享和volumes-from标志 664.4 托管卷的生命周期 684.4.1 托管卷的权限 684.4.2 存储卷的清理 694.5 存储卷的高级容器模式 704.5.1 存储卷容器模式 704.5.2 数据经压缩的存储卷容器 724.5.3 多态容器模式 734.6 小结 74第5章 网络访问 755.1 网络相关的背景知识 765.1.1 基础:协议,接口和端口 765.1.2 高级:网络,NAT和端口转发 775.2 Docker的网络 795.2.1 本地Docker网络的拓扑结构 795.2.2 四种网络结构原型 805.3 Closed容器 815.4 Bridged容器 835.4.1 访问外部网络 845.4.2 自定义命名解析 855.4.3 开放对容器的访问 885.4.4 跨容器通信 915.4.5 修改网桥接口的配置 925.5 Joined容器 935.6 Open容器 955.7 跨容器依赖 965.7.1 链接——本地服务发现 975.7.2 链接别名 985.7.3 环境变量的改动 995.7.4 链接的本质和缺点 1015.8 小结 102第6章 隔离——限制危险 1036.1 资源分配 1046.1.1 内存限制 1046.1.2 CPU 1056.1.3 设备的访问权 1086.2 共享内存 1086.2.1 跨容器的进程间通信 1096.2.2 开放内存容器 1106.3 理解用户 1116.3.1 Linux用户命令空间 1116.3.2 run-as用户 1116.3.3 用户和卷 1146.4 能力——操作系统功能的授权 1166.5 运行特权容器 1176.6 使用加强工具创建更健壮的容器 1186.6.1 指定额外的安全选项 1196.6.2 微调LXC 1206.7 因地制宜地构建容器 1216.7.1 应用 1216.7.2 高层的系统服务 1226.7.3 低层的系统服务 1226.8 小结 122第2部分 镜像发布:如何打包软件第7章 在镜像中打包软件 1267.1 从容器构建镜像 1267.1.1 打包Hello World 1277.1.2 打包Git 1287.1.3 审查文件系统的改动 1287.1.4 Commit——创建新镜像 1297.1.5 可配置的镜像属性 1307.2 深入Docker镜像和层 1317.2.1 深入联合文件系统 1327.2.2 重新认识镜像、层、仓库和标签 1347.2.3 镜像体积和层数限制 1377.3 导出和导入扁平文件系统 1397.4 版本控制的最佳实践 1417.5 小结 143第8章 构建自动化和高级镜像设置 1448.1 使用Dockerfile打包Git 1448.2 Dockerfile入门 1488.2.1 元数据指令 1488.2.2 文件系统指令 1528.3 注入下游镜像在构建时发生的操作 1558.4 使用启动脚本和多进程容器 1588.4.1 验证环境相关的先决条件 1588.4.2 初始化进程 1608.5 加固应用镜像 1618.5.1 内容可寻址镜像标识符 1618.5.2 用户权限 1628.5.3 SUID和SGID权限 1648.6 小结 166第9章 公有和私有软件分发 1689.1 选择一个分发方法 1699.1.1 分发选项图谱 1699.1.2 选择标准 1699.2 通过托管Registry发布 1729.2.1 通过公有仓库发布:你好!Docker Hub 1729.2.2 使用自动构建发布公有项目 1749.2.3 私有托管仓库 1769.3 私有Registry介绍 1789.3.1 使用Registry镜像 1809.3.2 从Registry使用镜像 1819.4 镜像的手动发布和分发 1819.5 镜像源代码分发工作流程 1869.6 小结 189第10章 运行自定义Registry 19010.1 运行个人Registry 19110.1.1 再度介绍镜像 19210.1.2 介绍V2 API 19310.1.3 定制镜像 19510.2 集中式Registry的增强 19610.2.1 创建一个反向代理 19710.2.2 在反向代理上配置HTTP(TLS) 19910.2.3 添加身份认证层 20210.2.4 客户端兼容性 20610.2.5 应用于生产环境之前 20810.3 持久化的BLOB存储 21010.3.1 微软Azure托管远程存储 21110.3.2 AWS S3托管远程存储 21210.3.3 RADOS(Ceph)的内部远程存储 21410.4 扩展访问和延迟的改进 21510.4.1 与元数据缓存集成 21510.4.2 使用存储中间件简化BLOB传输 21710.5 通过通知集成 21910.6 小结 224第3部分 多容器和多主机环境第11章 Docker Compose声明式环境 22811.1 Docker Compose:第一天的启动并运行 22811.1.1 用一个简单的开发环境入门 22911.1.2 一个复杂的架构:分布式系统和Elasticsearch的集成 23111.2 环境内的迭代 23311.2.1 构建、启动和重新构建服务 23411.2.2 服务伸缩和删除 23711.2.3 迭代和持久化状态 23811.2.4 网络和连接问题 23911.3 开始一个新项目:三个示例中的Compose YAML 24011.3.1 启动前的构建、环境、元数据和网络 24011.3.2 已知的组件和绑定挂载卷 24111.3.3 卷容器和扩展服务 24211.4 小结 243第12章 Docker Machine和Swarm集群 24512.1 介绍Docker Machine 24612.1.1 构建和管理Docker Machine 24612.1.2 配置Docker客户端与远程Daemon工作 24912.2 Docker Swarm介绍 25212.2.1 借助于Docker Machine构建Swarm集群 25212.2.2 Swarm扩展了Docker远程API 25512.3 Swarm调度 25812.3.1 Spread算法 25812.3.2 用过滤器调整调度 26012.3.3 BinPack和随机调度算法 26312.4 Swarm服务发现 26512.4.1 Swarm和单主机网络 26612.4.2 服务发现生态系统和权宜之计 26812.4.3 展望多主机网络 26912.5 小结 270后记 271 ...

October 14, 2019 · 3 min · jiezi

Docker技术入门与实战-第3版

网站更多书籍点击进入>> <font color=blue>CiCi岛</font> 下载<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font> <font color=blue>电子书下载</font>(皮皮云盘-点击“普通下载”)<font color=blue>购买正版</font>封页 编辑推荐入门Docker的首本书,经典畅销书升级,系统化掌握容器技术栈,第3版基于 Docker 新 18.x 系列版本。 内容简介本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员、运维人员快速部署Docker应用。本书分为四大部分:基础入门、实战案例、进阶技能、开源项目,*部分(第1~8章)介绍Docker与虚拟化技术的基本概念,包括安装、镜像、容器、仓库、数据卷、端口映射等;第二部分(第9~16章)通过案例介绍Docker的应用方法,包括与各种操作系统平台、SSH服务的镜像、Web服务器与应用、数据库的应用、各类编程语言的接口、容器云等,还介绍了作者在容器实战中的思考与经验总结;第三部分(第17~21章)介绍一些进阶技能,如Docker核心技术实现原理、安全、高级网络配置、libnetwork插件化网络功能等;第四部分(第22~28章)介绍与容器开发相关的开源项目,包括Etcd、Docker Machine、Docker Compose、Docker Swarm、Mesos、Kubernetes等。第3版根据 Docker 18.x 系列版本对全书内容进行了全面修订。 作者简介杨保华:博士,现为甲骨文架构师。研究方向包括分布式系统、大数据和算法设计等,是容器、网络虚拟化、区块链等技术的早期研究者和布道者。他倡导技术创新与产品、市场相结合,曾负责多个大型平台的架构和设计,以及企业系统的实现和实施。他热爱开源文化,曾积极贡献了多个开源项目。 目 录第3版前言第一部分 基础入门第1章 初识Docker与容器 31.1 什么是Docker 31.2 为什么要使用Docker 61.3 Docker与虚拟化 81.4 本章小结 9第2章 核心概念与安装配置 102.1 核心概念 102.2 安装Docker引擎 112.2.1 Ubuntu 环境下安装 Docker 122.2.2 CentOS 环境下安装 Docker 142.2.3 通过脚本安装 152.2.4 macOS环境下安装 Docker 152.2.5 Windows环境下安装Docker 232.3 配置 Docker 服务 262.4 推荐实践环境 272.5 本章小结 27第3章 使用Docker镜像 283.1 获取镜像 283.2 查看镜像信息 303.3 搜寻镜像 323.4 删除和清理镜像 333.5 创建镜像 353.6 存出和载入镜像 363.7 上传镜像 373.8 本章小结 38第4章 操作Docker容器 394.1 创建容器 394.2 停止容器 444.3 进入容器 464.4 删除容器 474.5 导入和导出容器 484.6 查看容器 494.7 其他容器命令 504.8 本章小结 52第5章 访问 Docker 仓库 535.1 Docker Hub 公共镜像市场 535.2 第三方镜像市场 555.3 搭建本地私有仓库 565.4 本章小结 58第6章 Docker数据管理 596.1 数据卷 596.2 数据卷容器 606.3 利用数据卷容器来迁移数据 626.4 本章小结 62第7章 端口映射与容器互联 637.1 端口映射实现容器访问 637.2 互联机制实现便捷互访 647.3 本章小结 67第8章 使用Dockerfile创建镜像 688.1 基本结构 688.2 指令说明 708.2.1 配置指令 718.2.2 操作指令 748.3 创建镜像 758.3.1 命令选项 768.3.2 选择父镜像 778.3.3 使用.dockerignore文件 778.3.4 多步骤创建 788.4 最佳实践 798.5 本章小结 80第二部分 实战案例第9章 操作系统 839.1 BusyBox 839.2 Alpine 859.3 Debian/Ubuntu 869.4 CentOS/Fedora 889.5 本章小结 89第10章 为镜像添加SSH服务 9010.1 基于commit命令创建 9010.2 使用Dockerfile创建 9310.3 本章小结 95第11章 Web服务与应用 9611.1 Apache 9611.2 Nginx 10011.3 Tomcat 10411.4 Jetty 10811.5 LAMP 10911.6 持续开发与管理 11111.7 本章小结 114第12章 数据库应用 11512.1 MySQL 11512.2 Oracle Database XE 11712.3 MongoDB 11812.4 Redis 12412.5 Cassandra 12612.6 本章小结 129第13章 分布式处理与大数据平台 13013.1 Hadoop 13013.2 Spark 13313.3 Storm 13613.4 Elasticsearch 14013.5 本章小结 141第14章 编程开发 14214.1 C/C++ 14214.2 Java 14614.3 Python 14914.3.1 使用Python官方镜像 15014.3.2 使用PyPy 15114.3.3 使用 Flask 15114.3.4 相关资源 15414.4 JavaScript 15414.4.1 使用Node.js 15414.4.2 相关资源 15814.5 Go 15814.6 本章小结 161第15章 容器与云服务 16215.1 公有云容器服务 16215.1.1 AWS 16215.1.2 Google Cloud Platform 16315.1.3 Azure 16415.1.4 腾讯云 16515.1.5 阿里云 16515.1.6 华为云 16615.1.7 UCloud 16715.2 容器云服务 16815.3 阿里云容器服务 17215.4 时速云介绍 17415.5 本章小结 175第16章 容器实战思考 17616.1 Docker 为什么会成功 17616.2 研发人员该如何看待容器 17716.3 容器化开发模式 17816.4 容器与生产环境 18016.5 本章小结 182第三部分 进阶技能第17章 核心实现技术 18517.1 基本架构 18517.2 命名空间 18717.3 控制组 19117.4 联合文件系统 19317.5 Linux网络虚拟化 19517.6 本章小结 197第18章 配置私有仓库 19918.1 安装Docker Registry 19918.2 配置TLS证书 20118.3 管理访问权限 20218.4 配置Registry 20518.5 批量管理镜像 21118.6 使用通知系统 21418.7 本章小结 217第19章 安全防护与配置 21819.1 命名空间隔离的安全 21819.2 控制组资源控制的安全 21919.3 内核能力机制 21919.4 Docker服务端的防护 22119.5 更多安全特性的使用 22119.6 使用第三方检测工具 22219.6.1 Docker Bench 22219.6.2 clair 22319.7 本章小结 224第20章 高级网络功能 22520.1 启动与配置参数 22520.2 配置容器DNS和主机名 22720.3 容器访问控制 22820.4 映射容器端口到宿主主机的实现 22920.5 配置容器网桥 23120.6 自定义网桥 23220.7 使用OpenvSwitch网桥 23320.8 创建一个点到点连接 23520.9 本章小结 236第21章 libnetwork插件化网络功能 23721.1 容器网络模型 23721.2 Docker网络命令 23821.3 构建跨主机容器网络 24121.4 本章小结 243第四部分 开源项目第22章 Etcd—高可用的键值数据库 24722.1 Etcd简介 24722.2 安装和使用Etcd 24822.3 使用客户端命令 25322.3.1 数据类操作 25522.3.2 非数据类操作 25822.4 Etcd集群管理 26022.4.1 构建集群 26022.4.2 集群参数配置 26322.5 本章小结 264第23章 Docker三剑客之Machine 26523.1 Machine简介 26523.2 安装Machine 26523.3 使用Machine 26623.4 Machine命令 26823.5 本章小结 272第24章 Docker三剑客之Compose 27324.1 Compose简介 27324.2 安装与卸载 27424.3 Compose模板文件 27724.4 Compose命令说明 29224.5 Compose环境变量 29924.6 Compose应用案例一:Web负载均衡 30024.7 Compose应用案例二:大数据Spark集群 30424.8 本章小结 309第25章 Docker三剑客之Swarm 31025.1 Swarm简介 31025.2 基本概念 31125.3 使用Swarm 31325.4 使用服务命令 31625.5 本章小结 319第26章 Mesos—优秀的集群资源调度平台 32126.1 简介 32126.2 Mesos安装与使用 32226.3 原理与架构 33026.3.1 架构 33026.3.2 基本单元 33126.3.3 调度 33126.3.4 高可用性 33226.4 Mesos配置解析 33326.4.1 通用项 33326.4.2 master专属配置项 33326.4.3 slave专属配置项 33526.5 日志与监控 33826.6 常见应用框架 34026.7 本章小结 341第27章 Kubernetes—生产级容器集群平台 34327.1 简介 34327.2 核心概念 34527.3 资源抽象对象 34827.3.1 容器组 34827.3.2 服务 34927.3.3 存储卷 35027.4 控制器抽象对象 35127.5 其他抽象对象 35327.6 快速体验 35527.7 重要组件 35927.7.1 Etcd 36027.7.2 kube-apiserver 36027.7.3 kube-scheduler 36127.7.4 kube-controller-manager 36227.7.5 kubelet 36327.7.6 kube-proxy 36427.8 使用kubectl 36527.8.1 获取kubectl 36527.8.2 命令格式 36627.8.3 全局参数 36727.8.4 通用子命令 36927.9 网络设计 37227.10 本章小结 374第28章 其他相关项目 37528.1 持续集成 37528.2 容器管理 37728.2.1 Portainer 37728.2.2 Panamax 37828.2.3 Seagull 37828.3 编程开发 38028.4 网络支持 38128.4.1 Pipework 38128.4.2 Flannel项目 38228.4.3 Weave Net项目 38228.4.4 Calico项目 38328.5 日志处理 38328.6 服务代理 38528.7 标准与规范 38928.8 其他项目 39228.9 本章小结 396附录附录A 常见问题总结 398附录B Docker命令查询 404附录C 参考资源链接 411 ...

October 14, 2019 · 3 min · jiezi

K8S-生态周报-Docker-19033-DNS-不再区分大小写

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 文末有活动,欢迎参与。Docker 19.03.3 正式发布在本周 Docker 发布了 19.03.3 版本,这个版本的变更内容 很重要,我会将主要内容都列出来。(上周周报介绍了 19.03.3-rc1 的一些情况) 已知问题DOCKER-USER iptables 链丢失;如果你并不需要在 DOCKER-USER 链上定义规则的话,那你也并不会受此问题的影响。 临时解决办法:手动添加丢失的链,操作如下: iptables -N DOCKER-USERiptables -I FORWARD -j DOCKER-USERiptables -A DOCKER-USER -j RETURN这个问题会在 19.03.4 中进行修复, 很快会进行发布; 实际会把 libnetwork 中有问题的那段代码先去掉。 如果已经升级了此版本的用户,受到此问题影响的话,可以使用上述方式进行临时解决。 安全问题将 runc 更新到了 v1.0.0-rc8-92-g84373aaa 这其中包含了 runc 中对 CVE-2017-18367 的修复,该漏洞的根本原因在于 libseccomp-golang 中一个错误的逻辑运算 ,有兴趣的朋友可以点开链接看看实际的修复代码,并且也可以发现该代码其实在 2017 年 4 月就已经合并进 libseccomp-golang 的主干中了,但实际上在今年 6 月在 runc 中才真正修复。这个问题其实反映出来的是当我们在维护项目时,对自己所用的各种依赖需要有所了解和把握,整体来讲,尽可能避免依赖项过旧是个好事儿;并且安全问题非常值得关注。 常规更新修改了仍使用 schema1 进行镜像 push/pull 操作时的通知逻辑,早在今年 6 月份我推送的周报中就已经提到过建议升级至 schema2 来获得长久的支持,以及更好的兼容性。具体的升级版本之一就是使用最新版的 Docker, 将镜像 pull 后再重新 push 即可(适用于大多数情况);根据 RFC4343 Docker 修改了内部 DNS 的逻辑,使其符合了 RFC4343 的规范, DNS 开始不再区分大小写了 。如果在实际使用中有依赖大小写解析的情况,请及时修改逻辑。对此版本感兴趣的朋友可以参考 ReleaseNote ...

October 14, 2019 · 1 min · jiezi

Docker入门学习

docker简介1.什么是虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。 2.什么是Docker Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。 Docker自开源后受到广泛的关注和讨论,以至于dotCloud公司后来都改名为Docker Inc。Redhat已经在其RHEL6.5中集中支持Docker;Google也在其PaaS产品中广泛应用。Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。 3.为什么选择Docker?1)上手快用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy:on-write)54681模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。2)职责的逻辑分类使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”3)快速高效的开发生命周期Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)4)鼓励使用面向服务的架构Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序) 4.容器与虚拟机比较下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。 5.Docker服务器与客户端Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTfulAPl。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。 6.Docker镜像与容器镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:执行一个命令;打开一个窗口。也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。 Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。所以Docker容器就是:一个镜像格式;一些列标准操作;一个执行环境。 Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分钱,并且尽量通用。 7.Registry(注册中心)Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。https://hub.docker.com/ Docker安装与启动1.安装Docker Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。由于我们学习的环境都使用的是CentoS,因此这里我们馨诺我e头联输2-e医看裸颖这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。 yum包更新到最新 sudo yum update安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum instal1-y yum-utils device-mapper-persistent-data 1vm2设置yum源为阿里云 sudo yum-config-manager,-add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker-ce docker sudo yum install docker-ce安装后查看docker版本 docker-v2.设置ustc的镜像ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。https:/lug.ustc.edu.cn/wiki/m...: vi/etc/docker/daemon.json在该文件中输入如下内容: “registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]3.Docker的启动与停止systemctl命令是系统服务管理器指令启动docker: systemct1 start docker停止docker: systemct1 stop docker重启docker: systemct1 restart docker查看docker状态: systemct1 status docker开机启动:| systemct1 enable docker查看docker概要信息 docker info查看docker帮助文档 docker--help常用命令1.镜像相关命令查看镜像 docker images REPOSITORY:镜像名称TAG.镜像标签IIMAGEID:镜像IDCREATED:镜像的创建日期(不是获取该镜像的日期)SIZE:镜像大小这些镜像都是存储在Docker宿主机的/var/lib/docker目录下 搜索镜像如果你需要从网络中查找需要的镜像,可以通过以下命令搜索 docker search 镜像名称NAME:仓库名称DESCRIPTION:镜像描述STARS:用户评价,反应一个镜像的受欢迎程度OFFICIAL:是否官方AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的拉取镜像拉取镜像就是从中央仓库中下”本地 ...

October 13, 2019 · 2 min · jiezi

Docker-安装-MySQL

本篇将介绍如何使用 Docker 部署 MySQL 数据库及远程访问配置 安装 MySQL拉取镜像使用下面的命令拉取 MySQL 数据库的镜像: $ sudo docker pull mysql # 拉取最新版本的镜像,当前为 MySQL 8 版本,tag 为 latest$ sudo docker pull mysql:5.7 # 指定拉取 MySQL 5.7 版本也可以使用搜索命令,查找其他的 MySQL 相关镜像,其中有标识 Stars 数,即受欢迎程度。 $ sudo docker search mysql运行 MySQL$ sudo docker run -p 3306:3306 \ --name mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your-password \ -d mysql命令说明: -p 3306:3306 :将容器的 3306 端口映射到主机的 3306 端口。-v $PWD/conf:/etc/mysql/conf.d :将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。-v $PWD/logs:/logs :将主机当前目录下的 logs 目录挂载到容器的 /logs。-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。-e MYSQL_ROOT_PASSWORD=your-password :初始化 root 用户的密码,建议使用复杂度高的密码。-d mysql : 要部署的镜像名,如果是5.7版本的话,这里则为mysql:5.7配置远程访问远程访问 MySQL 属于基本配置,但是在配置的时候要注意安全性问题,否则将存在安全性隐患,尤其是企业用服务器更要注重安全性。 ...

October 13, 2019 · 2 min · jiezi

K8s-从懵圈到熟练-–-集群网络详解

导读:阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于 terway 支持 Pod 弹性网卡,以及 NetworkPolicy 功能。本文中,作者基于当前的 1.12.6 版本,以 flannel 为例,深入分析阿里云 K8S 集群网络的实现方法。鸟瞰总体上来说,阿里云 K8S 集群网络配置完成之后,如下图所示:包括集群 CIDR、VPC 路由表、节点网络、节点的 podCIDR、节点上的虚拟网桥 cni0、连接 Pod 和网桥的 veth 等部分。 类似的图大家可能在很多文章中都看过,但因为其中相关配置过于复杂,比较难理解。这里我们可以看下这些配置背后的逻辑。 基本上我们可以把这些配置分三种情况来理解:集群配置,节点配置以及 Pod 配置。与这三种情况对应的,其实是对集群网络 IP 段的三次划分:首先是集群 CIDR,接着是为每个节点分配 podCIDR(即集群 CIDR 的子网段),最后在 podCIDR 里为每个 Pod 分配自己的 IP。 集群网络搭建初始阶段集群的创建,基于云资源 VPC 和 ECS,在创建完 VPC 和 ECS 之后,我们基本上可以得到如下图的资源配置。我们得到一个 VPC,这个 VPC 的网段是 192.168.0.0/16,我们得到若干 ECS,他们从 VPC 网段里分配到 IP 地址。 ...

October 9, 2019 · 2 min · jiezi

dacker安装kafka

docker安装使用kafka收集整理而来,学习kafka时使用使用时请注意开放相关端口,将脚本中IP改成自己的使用Kafka需要安装zk镜像如需定制请在镜像的docker hub官网上参考使用文档docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka启动docker run -d --name zookeeper \ -p 2181:2181 \ -t wurstmeister/zookeeperdocker run -d --name kafka \ -p 9092:9092 \ -e KAFKA_BROKER_ID=0 \ -e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 \ -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ -t wurstmeister/kafka创建topic/opt/kafka/bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic mykafka创建生产者/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka创建消费者另起一个ssh窗口进入容器/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafka --from-beginning测试在生产者窗口输入数据在消费者窗口查看消费的数据

October 9, 2019 · 1 min · jiezi

使用docker从零开始搭建私人代码仓库之gogs搭建

docker搭建gogs教程上一篇教程《使用docker从零开始搭建私人代码仓库之MySQL搭建》已经搭建好了MySQL,也是搭建gogs代码仓库的前置准备。今天我们来用docker搭建gogs代码仓库的教程。添加gogs容器打开上一个教程中的docker-compose.yml文件,填入如下内容: gogs: image: gogs/gogs depends_on: - mysql tty: true networks: frontend: restart: always volumes: - ${DATA_DIR}/gogs:/data最终docker-compose.yml文件内容如下: version: "3"networks: frontend:services: mysql: image: mysql:${MYSQL_VERSION} networks: frontend: tty: true restart: always ports: - 3306:3306 volumes: - ${DATA_DIR}/mysql/:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} gogs: image: gogs/gogs depends_on: - mysql tty: true networks: frontend: restart: always volumes: - ${DATA_DIR}/gogs:/data启动gogs容器> docker-compose up -d gogs 看到该界面时候证明gogs已经成功启动。下一个教程我们通过nginx转发请求到gogs容器,实现可以通过域名访问代码仓库。 更多精彩文章,请关注我的博客SOCKSTACK,分享我的工作经验。

October 9, 2019 · 1 min · jiezi

使用docker从零开始搭建私人代码仓库之mysql搭建

docker搭建MySQL教程本教程非零基础教程,本教程不需要你具备docker和docker-compose基本知识,照葫芦画瓢也能把代码仓库搭建起来使用,但如果对docker和docker-compose感兴趣的可以在网上找一下相关的教程学习,后面也会出一个简单的docker入门教程,前提是机器必须先安装好了docker和docker-compose。本教程搭建mysql数据是为了搭建代码仓库gogs做准备的,这里不对mysql做过多的解析,做开发的都知道MySQL是干嘛用的。 MySQL搭建创建项目1.命令行输入以下命令创建项目: > mkdir docker注意:该命令只在类unix系统生效的,window系统的可以使用makedir docker或者手动创建 2.进入项目目录并创建docker-compose.yml文件: > cd docker && touch docker-compose.yml注意:该命令只在类unix系统生效的,window系统的可以使用type null>docker-compose.yml或者手动创建 3.编辑docker-compose.yml: > vim docker-compose.yml添加mysql的编排内容: version: "3"networks: frontend:services: mysql: image: mysql:${MYSQL_VERSION} networks: frontend: tty: true restart: always ports: - 3306:3306 volumes: - ${DATA_DIR}/mysql/:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD}编排内容中的DATA_DIR、MYSQL_ROOT_PASSWORD、MYSQL_USER、MYSQL_PASSWORD是环境变量,我们可以项目的根目录创建.env文件: > vim .env在.env中定义环境变量: #容器映射数据存储的路径DATA_DIR=./data#mysql相关环境变量的定义MYSQL_VERSION=5.7 #mysql数据库的版本MYSQL_ROOT_PASSWORD=root # root账户的密码MYSQL_USER=default # 创建一个default用户MYSQL_PASSWORD=secret # default用的密码mysql的编排内容就绪完毕。 4.启动MySQL > docker-compose up -d mysql如果是第一次启动会进行build构建进行,等待构建完成后,MySQL容器就启动成功了。 测试MySQL这里使用navicat进行测试的,添加MySQL链接,然后填入主机,端口,账号,密码,点击链接测试。 出现该界面证明MySQL搭建成功。 更多精彩文章,请关注我的博客SOCKSTACK,分享我的工作经验。

October 9, 2019 · 1 min · jiezi

使用docker从零开始搭建私人代码仓库之nginx搭建

docker搭建nginx教程通过《使用docker从零开始搭建私人代码仓库之MySQL搭建》和《使用docker从零开始搭建私人代码仓库之gogs搭建》的搭建其实已经可以搭建成功了代码仓库的了,但是为了访问方便,我们有时候需要绑定域名,那么我们可以通过nginx进行转发。添加nginx容器打开上一个教程中的docker-compose.yml文件,填入如下内容: gogs_nginx: build: context: nginx tty: true depends_on: - gogs restart: always networks: frontend: ports: - 80:80 volumes: - ./nginx/conf:/etc/nginx/conf.d - ${DATA_DIR}/nginx/conf:/var/log/nginx最终docker-compose.yml文件内容如下: version: "3"networks: frontend:services: mysql: image: mysql:${MYSQL_VERSION} networks: frontend: tty: true restart: always ports: - 3306:3306 volumes: - ${DATA_DIR}/mysql/:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} gogs: image: gogs/gogs depends_on: - mysql tty: true networks: frontend: restart: always volumes: - ${DATA_DIR}/gogs:/data gogs_nginx: build: context: nginx tty: true depends_on: - gogs restart: always networks: frontend: ports: - 80:80 volumes: - ./nginx_conf:/etc/nginx/conf.d - ${DATA_DIR}/nginx/conf:/var/log/nginx在项目根目录创建nginx_conf目录并创建nginx的配置文件default.conf ...

October 9, 2019 · 1 min · jiezi

DjangoDocker容器化部署DjangoDocker本地部署

本章将在本地搭建一个容器化的 Django 项目,感受 Docker 的运作方式。 前期准备开发环境虽然有基于 Windows 的 Docker 版本,但各方面兼容做得都不太好(安装也麻烦些),因此建议读者在学习前,自行安装好 Linux 或 Mac 系统。当然你愿意折腾的话,在 Windows 上搞也行。 别担心,以后开发 Django 项目仍然可以在 Windows 下进行,仅仅是开发时不使用 Docker 而已。软件安装Docker:学习 Docker 当然要安装 Docker 软件了(免费的社区版),安装方法见官方文档。Docker-compose:这是 Docker 官方推出的用于编排、运行多个容器的工具,安装方法见官方文档。本教程大部分内容都与它有关。Python3:教程部署的是 Django 项目,那 Python3 是当然要有的了(包括 python 的包管理工具 pip)。准备就绪后就继续下一步吧。 创建 Django 项目打开 Linux/Mac 的终端,安装 Django 库: $ pip install django==2.2在一个你喜欢得位置(比如/home/)创建新的 Django 项目: $ django-admin startproject django_app进入项目根目录: $ cd django_app教程后面的内容全部都在此目录中操作了。为方便阅读,命令提示符 $ 代表目前在项目根目录 django_app/,mysql $ 则代表目前在目录 django_app/mysql/ 中,请读者操作时稍加留意当前的工作目录。 然后迁移数据: $ python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK ... Applying sessions.0001_initial... OK准备工作就搞定了。 ...

October 8, 2019 · 4 min · jiezi

写给前端工程师看的Docker教程基础篇

最近公司在推进容器化和k8s,项目都要改成Docker部署。负责的工程里有几个node项目,只能从零开始学习Docker了。 安装Docker支持window, Mac, Linux, 教程参考Docker安装教程。 建议在Mac和Linux系统里使用Docker。 平时开发,我使用的是vscode编辑器,可以顺便安装docker插件。在插件商店搜索docker,安装完成后,我们可以很方便的管理Docker镜像和容器。 快速使用首先我们来体验一下Docker。 平时工作中,如果我们电脑的开发环境是Windows, 有一天希望在Linux环境做一些事情,那该怎么办?(没有云服务器的前提下)大多数人这时会选择去用虚拟机安装一个ubuntu系统。不过安装虚拟机前,你得先去下载几个G的镜像,然后在VMware里配置一些参数,最后还要等待最少十几分钟的系统安装。等你安装完一个ubuntu系统,估计已经浪费了几个小时。 然而使用Docker,你只需要几分钟! # 拉取ubuntu镜像docker pull ubuntu# 创建一个ubuntu容器并且使用终端进行交互docker run -it --name my-ubuntu --rm ubuntu /bin/bash创建成功后,你就进入一个ubuntu系统里,现在你可以在其中进行任意的操作了。 注意:虽然当前容器里是ubuntu系统,但是你只能把它想象成一个精简版的ubuntu,因此有很多常用命令,需要自己去安装。 curl -v bilibili.com直接运行curl命令会提示命令不存在 # 安装curlapt-get updateapt-get install -y curl安装完成后,才能使用curl命令 退出容器 exit基本概念镜像(Image):类似于虚拟机中的镜像。镜像有两种:基础镜像和个人镜像。基础镜像由各大厂商提供,比如ubuntu镜像,node镜像。个人镜像则是由个人开发者构建上传。容器(Container):类似于一个轻量级的沙盒。容器是基于镜像来创建的,ubuntu镜像并不能和我们进行各种交互,我们希望有个环境能运行ubuntu,于是基于ubuntu镜像创建了一个容器。仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。我们可以这样类比: # 下载源代码git clone deepred5/app# 启动appnpm run start# 拉取镜像docker pull deepred5/app# 创建容器docker run deepred5/appDocker是基于c/s架构:我们在Client中执行Docker命令,最后创建的Container和Image则会在Server中运行 # 可以查看server和client信息docker info镜像(Image)常用命令 # 查找镜像docker search ubuntu# 拉取特定tag版本的镜像(默认是latest)docker pull ubuntu:18.0.4# 查看下载的所有本地镜像docker images# 删除镜像docker rmi ubuntu:18.0.4构建镜像 我们一般都是基于基础镜像来构建个人镜像。镜像是由一条条指令构建出来(Dockerfile) 我们来构建一个node-pm2镜像,这个镜像自带node和pm2: 创建一个node-pm2目录,并新建一个Dockerfile文件 ...

October 8, 2019 · 2 min · jiezi

写给前端工程师看的Docker教程实战篇

在上篇文章里,我们学习了Docker常用的命令和基本操作,现在可以开始实战了。 单页应用前端工作中最常见的就是单页应用了。我们首先用create-react-app快速创建一个应用 npm i create-react-app -gcreate-react-app react-appcd react-appnpm run start可以看见正常启动的页面。 打包试一下 npm run build可以看到本地生成了一个build目录,这就是最后线上运行的代码。 <!-- more --> 我们先在本地运行下build目录看看 npm i http-server -ghttp-server -p 4444 ./build访问 http://localhost:4444 即可看到打包后的页面 单页应用Docker化在react-app目录下新建Dockerfile .dockerignore和nginx.conf .dockerignore node_modulesbuilddockerignore指定了哪些文件不需要被拷贝进镜像里,类似.gitignore。 我们知道单页应用的路由一般都被js托管,所以对于nginx需要特别配置 nginx.conf server { listen 80; server_name localhost; location / { root /app/build; # 打包的路径 index index.html index.htm; try_files $uri $uri/ /index.html; # 防止重刷新返回404 } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}Dockerfile ...

October 8, 2019 · 3 min · jiezi

DjangoDocker容器化部署前言

这是教你手把手部署 Docker + Django + MySQL + Nginx + Gunicorn 的傻瓜式教程,目的是让 Docker 菜鸟也能快速部署容器化的 Django 应用。 需要全面深入了解 Docker 的读者,请系统性地学习官方文档。教程共四章: 前言Docker + Django 本地部署Docker + Django + MySQL 本地部署Docker + Django + MySQL + Nginx + Gunicorn 本地 + 云端部署章节之间是继承关系,建议小白读者按顺序阅读,不要着急。 教程特色零基础、免费、中文、完整项目代码基于最新的 Docker 19.03.1、Python 3.7、Django 2.2博主热情的技术支持教程适宜人群完全没接触过 Docker,但却想迅速搭建容器化项目的接触过 Docker,但是却不清楚如何用 Docker 搭建 Django 项目的什么是DockerDocker 是一种基于 Linux 的容器技术,它可以将你的代码以及代码需要的环境打包到一起,从而组装为一个标准、轻量级、安全的隔离环境。 在容器技术之前,业界类似的明星产品是虚拟机:也就是在你的操作系统里面装一个软件,通过这个软件模拟出多个子系统出来。子系统之间是隔离的,互不影响。但虚拟机要模拟出整个系统,因此占用空间巨大,启动更是缓慢。 而 Docker 没有虚拟机的缺点。它只需要虚拟一个小规模的环境(小到甚至只有几MB),类似于“沙箱”。 为什么要学Docker看本教程的读者,相信你已经看过博主的Django 搭建个人博客教程了,也在部署项目时挣扎痛苦过了。部署为什么难,是因为各云服务器的环境都有所不同,而这些微小的不同累积多了,就导致同样的部署流程,这台机器行,到另外一台机器就怎么都不行了。 但如果你有了 Docker 就不一样了,因为 Docker 可以把系统环境和代码一同打包进去,真正做到了"一次开发,处处运行",不管你的机器有多复杂的环境,容器就像一个集装箱,把无关的东西统统隔离在外面。 有了 Docker,更换服务器也变得非常的简单,只需要把项目代码、数据、Docker 构建文件下载到新服务器上,几条指令就搞定了。啥配置 Nginx 、配置 Gunicorn 、配置 Mysql,统统都可以不管了,因为 Docker 构建文件里早就写好了。 ...

October 7, 2019 · 1 min · jiezi

CentOS-7-使用-docker-安装-typecho-博客系统

前言我的博客 https://savokiss.com 用的是 typecho,一直使用的是 阿里云ECS 直接安装的 MySQL 和 PHP,由于买的时间比较早,当时用的是 CentOS 6.5。后来想玩 docker,发现 docker 只支持 CentOS 7+,加上之前的系统上东西太乱了,所以这次有时间就将数据库和 typecho 源码备份了一下,然后换了一个纯净的 CentOS 7.6 的镜像。由于我买的 ECS 是 1CPU 1GB 内存,之前还一直担心跑不起来 docker,这次升级完之后发现完全没问题,内存用了一半都不到哈~于是记录下这个过程,说不定可以帮到其他小伙伴。 升级系统,建议备份好数据,由于我的 ECS 上面主要就一个博客,所以直接用全新的镜像,安装完后啥都木有,当然也可以直接将快照创建为自定义镜像,然后升级系统的时候选择即可该快照即可。本人也是 docker 小白,如果对 docker 不熟悉,可以先看笔者的另一篇文章: 写给前端工程师的 docker 入门 下面开搞: 配置新用户如果想要用非 root 用户执行 docker 命令,请参考此步骤。新增的用户名叫 savokiss。下面的命令使用 root 执行。添加用户useradd savokiss修改密码passwd savokiss加入 sudo 权限visudo找到下面两行,将新用户写入,如: ## Allow root to run any commands anywhereroot ALL=(ALL) ALLsavokiss ALL=(ALL) ALL创建 docker 用户组groupadd docker将新用户加入 docker 组usermod -aG docker savokiss让变更生效: ...

October 7, 2019 · 3 min · jiezi

K8S-生态周报-runc-v100rc9-发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。runc v1.0.0-rc9 发布不知不觉,runc v1.0.0-rc9 于近日发布了。早先关注过我文章的朋友们应该看到过我从去年开始每次在 runc 新版本发布时都有专门写一篇文章进行介绍。这次版本的定位主要是修复 CVE-2019-16884 所以我也就不再单独写文章介绍了(另一个原因是现在在假期,还是多抽空陪陪家人) 先对 CVE-2019-16884 做个简单的介绍。这是一个中等级别的漏洞,其主要影响是 runc 源码中的 libcontainer/rootfs_linux.go 在文件挂载至 /proc 时,少做了一些检查,可绕过 AppArmor 的限制,所以可能导致被一些恶意镜像所利用。 主要的修复方式是将原先的 checkMountDestination 函数改写为 checkProcMount,并在其中添加了对源文件类型的判断,只允许 procfs 类型的文件挂载至 /proc 。 此漏洞影响到的范围是 runc 以及一些使用 runc 作为基础组件的容器管理软件。请尽快进行升级。 此版本的地址是:https://github.com/opencontai... Docker v19.03.3-rc1 发布自从 Docker 修改维护周期后,Docker 对软件的质量要求有了显著提高,每次版本发布前会经历多阶段的测试和回归,确保软件没有什么问题后才会发布正式版。 按现在的进度来看 v19.03.3 应该会在一两周内放出。新版本会将 containerd 升级至最新的 1.2.10 ,并修复了一个在 5.2 版本内核上 overlay2 文件系统挂载时的错误。 关于此版本感兴趣的朋友可以参考 ReleaseNote 上游进展Kubernetes v1.17 已经进入发布周期,这个版本的发布周期会比较短,现在已经发布了 v1.17.0-alpha 版本,计划是在 12 月 9 日可以最终发布。(想想看,距现在也就两个月的时间,你的集群现在是哪个版本呢?) 另外,在近期将会发布 v1.13.12 版本,这将是 v1.13 分支的最后一个版本,如果还是使用此版本的朋友,请尽快进行升级了。(当然,与它同时发布的也还有 1.16.2,1.15.5 和 1.14.8 如果要升级可以等这几个版本发布后再进行升级,免得还得重复升级) ...

October 7, 2019 · 1 min · jiezi

Linux搭建自己Nexus私服

本文介绍如何在Linux服务器通过Docker搭建Nexus私服 一、安装Nexusdocker run -d -p 8081:8081 --name nexus -v /srv/nexus/nexus-data:/var/nexus-data --restart=always sonatype/nexus3通过docker logs -f nexus查看启动日志,当出现Started Sonatype Nexus OSS说明启动成功,这时通过http://ip:8081即可访问点击右上角Sign in进行登录,账号为admin,密码需要去镜像中查看 # 进入镜像docker exec -it nexus bash# 查看密码,路径在登录框会提示,然后复制即可,登陆成功后会让你修改密码cat /nexus-data/admin-password至此,就启动完成了,进入主页后点击左边菜单栏的Browse即可查看你拥有的仓库啦 二、Nexus仓库1、仓库类型Nexus有四种仓库和四种仓库类型 a、仓库仓库名描述maven-centralmaven中央库,默认从https://repo1.maven.org/maven...maven-releases私库发行版jarmaven-snapshots私库快照(调试版本)jarmaven-public仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用b、类型类型描述group(仓库组类型)用于方便开发人员自己设定的仓库hosted(宿主类型)内部项目的发布仓库(内部开发人员,发布上去存放的仓库)proxy(代理类型)从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径)virtual(虚拟类型)虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)2、拉取jar包流程Maven可直接从宿主仓库下载构件,也可以从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件,为了方便,Maven可以从仓库组下载构件,而仓库组并没有实际的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容) 3、创建仓库进过上面的讲解,我们对仓库已经有了了解,接下来我们进行创建仓库,分为是代理仓库(proxy)、宿主仓库(hosted)、仓库组(group),点击主页上面的小螺丝然后在选择Repositories进入仓库管理列表,然后就可以开始创建我们的仓库啦,选择仓库类型的时候一定要选择maven2 a、proxy代理仓库我们使用阿里的中央仓库 b、hosted宿主仓库这里可以创建releases和snapshot类型的仓库,这里就演示一种 c、group仓库组 三、项目配置前两章走完我们已经在Linux服务器部署好了nexus并且创建好了我们的仓库,接下来我们就来试着在项目中配置 1、创建一个Maven项目为了演示,就随便创建个工具类玩,以下是目录结构 2、pom文件这里为了演示我就配了release仓库,实际上应该同时要配置snapshot仓库,maven会判断版本后面是否带了-SNAPSHOT,如果带了就发布到snapshots仓库,否则发布到release仓库 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gjing</groupId> <artifactId>demo</artifactId> <version>1.0</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <distributionManagement> <repository> <!--ID可以随便写,但是要与maven的setting文件中一致--> <id>releases</id> <!--指向仓库类型为hosted(宿主仓库)的储存类型为Release的仓库----> <url>http://你nexus仓库的IP:8081/repository/me-release/</url> </repository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </build></project>3、maven配置setting文件id一定要和项目pom文件中的一致 ...

October 7, 2019 · 1 min · jiezi

Linux搭建自己的Docker镜像仓库

介绍如何在自己的服务器搭建docker镜像仓库 一、查看宿主机docker版本如果版本小于17,需要下载新的版本docker,如果你的docker版本大于17的话,以下跳过,请直接跳到第二块 docker -v1、更新yum源yum update2、卸载旧版本的docker,如果有安装的话sudo yum remove docker docker-common docker-selinux docker-engine3、安装需要的软件包sudo yum install -y yum-utils device-mapper-persistent-data lvm24、设置yum源sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo5、查看仓库中的所有docker版本,并选择其中的下载yum list docker-ce --showduplicates | sort -r6、安装dockersudo yum install docker-ce-<版本号>7、启动并加入开机自启sudo systemctl start dockersudo systemctl enable docker8、安装最新的docker-compose# 下载wget https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64# 移动到/user/local/binmv docker-compose-Linux-x86_64 /user/local/bin# 改名mv docker-compose-Linux-x86_64 docker-compose9、将可执行权限用于二进制文件sudo chmod +x /usr/local/bin/docker-compose二、仓库搭建1、下载Harborgithub地址:https://github.com/vmware/harbor/releases/,可以自行去选择版本下载 # 下载wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-online-installer-v1.9.0.tgz# 解压缩tar xvf harbor-online-installer-v1.9.0.tgz2、配置Harbor进入Harbor文件夹,找到harbor.yml文件,并配置 vim /harbor/harbor.yml一般配置这两项即可,其他的自行决定配置,hostname为您harbor所在服务器的IP或者服务器的域名,port为暴露的端口(我这里配置5000),一定不能是localhost或者是127.0.0.1,修改完毕后保存退出 3、启动在harbor文件夹执行以下命令启动harbor ./install.sh启动完毕后浏览器访问http://你设置的IP或者域名:你设置的端口,账号默认为:admin,密码:Harbor12345,登录后就进入了主页 4、新建项目这里我们建了一个叫guojing的项目 5、push镜像修改下配置由于docker的版本从13开始,register只能用https,由于我们配的都是http的,所以要先在/etc/docker/目录创建daemon.json文件并加入如下 { "insecure-registries":["xxx:5000"] }重启docker systemctl restart docker重启harbor相关的容器,因为重启docker后这些都关闭了,所以我们通过docker ps -a找到所有与harbor相关的镜像,通过docker restart xx xx xx对应容器名重启即可 ...

October 4, 2019 · 1 min · jiezi

使用Docker封装java应用

使用Docker封装java应用本文介绍如何使用docker应用封装一个java应用(名字叫cspj)。这个java应用涉及数据持久化以及RMI调用。 1. docker介绍docker是一种容器技术,对操作系统、文件系统、网络等进行了封装,使其中的进程可以完整运行。 docker和虚拟机是不同的技术。虚拟机虚拟了一套硬件环境,需要在这个硬件环境之上安装完整的操作系统、jdk等相关软件,才能运行一个java应用,虚拟机和宿主机在操作系统层面就是相互隔离的。以Linux下的docker为例,它使用的依旧是宿主机中的Linux内核,只不过在宿主机的用户层上虚拟了一个容器,这个容器中的Linux只是操作系统中的一小部分,使用的依旧是宿主机的Linux内核。比如宿主机是Ubuntu,docker虚拟的操作系统可以是alpine,这只是虚拟了alpine和Ubuntu不同的部分。 一个docker容器中一般只运行一个应用,这和虚拟机也是不同的。比如我们的一个应用有java应用,有数据库mysql,那么java应用运行在一个容器里,mySql运行在另一个容器里。他们之间可以通过docker虚拟的网络进行交互。 docker中的容器就是运行中的进程。它是通过镜像进行启动的。docker中的镜像就相当于一个模板,启动一个容器就相当于通过模板创建一个可执行的应用。因此,只要镜像不变,所有通过这个镜像创建的容器都是一摸一样的。又因为docker进行了操作系统、文件系统、网络等方面的封装,所以这个镜像就可以在各种不同的环境上运行,从而保证一致的执行效果。 容器运行之后,在其中会有一个可读写层,这是用来临时保存容器中应用在运行中产生的数据的。当这个容器被销毁之后,所保存的数据也就消失了。使用原有的镜像重新运行一个新的容器,就又是一个全新的应用了。 所以,如果我们需要对容器中的数据进行持久化,就需要用到volume或者bind mounts技术。比如我们的java应用中有一个内置文件数据库Derby,如果需要保留对这个文件数据库的修改,同时又不想改变镜像文件,就可以把这个文件数据库使用volume或bind mounts技术保存到宿主机的文件系统中。这样,即使容器被销毁,容器中所修改的文件数据库也会被保留下来。 还有一种方法保存容器中的临时数据,就是使用commit命令把容器可读写层中的临时数据也一起生成一个新的镜像。以后通过这个新镜像运行的容器,就都保留了这部分数据,这部分数据也就成了新镜像的一层,而且无法被修改。通过这个新镜像运行的容器,会生成一个新的可读写层,用来临时保存此次运行中生成的数据。如果一直使用commit保存数据,新的镜像就会越来越大。docker官方不推荐使用这种方法保存数据。 在详细说一下docker的镜像。docker的镜像是使用Dockerfile制作的。Dockerfile是一个脚本,docker build命令会读取这个脚本,按照其指令构造镜像。docker的镜像是一层一层的。每一个Dockerfile指令,都会生成镜像中的一层。 我们自己制作的docker镜像通常不会从最底层开始构建。比如我们要制作一个java应用的镜像,我们就要依赖于openjdk:8-alpine的官方镜像。在这个基础之上,再制作我们的java应用镜像层。而官方的openjdk:8-alpine则是基于alpine操作系统制作的镜像,在这个操作系统之上,它为我们设置好了各种环境变量,我们在这个镜像之上就可以直接制作我们自己的java应用镜像,而不必关心jdk的设置了。 aphine 是一个特别简洁的官方的Linux操作系统系统容器镜像,只有5M大小。从中也可以看出docker和虚拟机的区别,虚拟机中运行的操作系统一定是完整的操作系统,通常都会有几个G的大小。 2. 环境准备Intel-Core-i7 CPU, 安装Windows10操作系统,使用VirtualBox安装了CentOS-7虚拟机。我们将在CentOS-7虚拟机上安装Docker。关于如何在安装设置虚拟机,请参看这里。 如果要执行8.2节中的实例,必须使用VMWare虚拟机安装CentOS-7系统,因为VMWare支持nested vm。还需要设置vmware虚拟机的处理器中,选择“虚拟化Intel VT-x/EPT或AMD-V/RVI(V)。 如果使用AMD处理器,则可以使用VirtualBox安装CentOS-7,因为最新的VirtualBox-6支持在AMD系统上打开netstad vm。 VirtualBox中安装的CentOS-7系统的IP地址是192.168.56.104. 3. 安装DockerDocker分为社区版和企业版,我们使用社区版即可。 卸载旧docker$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine安装docker# 安装依赖$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2# 设置国内镜像源$ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo# 安装最新版本$ sudo yum install docker-ce docker-ce-cli containerd.io# 启动$ sudo systemctl start docker# 验证,或从docker官方下载hello-world镜像并根据镜像运行容器。这个镜像只有不到2K$ sudo docker run hello-world# 把用户添加到docker组中,这样执行docker命令时就不必使用sudo了$ sudo usermod -aG docker your-user设置镜像加速器可以加速从Docker Hub获取镜像的速度。在/etc/docker/daemon.json文件中(如不存在请新建)添加如下内容: ...

October 4, 2019 · 10 min · jiezi

Docker安装Gitlab和GitlabRunner并实现项目CICD

本文详细介绍如何在Linux系统使用Docker安装Gitlab、Gitlab-Runner并实现项目的CICD 一、安装Gitlab1、拉取镜像并启动由于服务器的80端口可能被占用,所以这里我们改成了其他端口来启动 docker run -d -p 2443:443 -p 5678:80 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce2、修改配置文件修改gitlab.yml文件vim /src/gitlab/data/gitlab-rails/etc/gitlab.yml找到如下配置,修改host为你服务的IP或者域名(不能加http://),修改完毕后保存退出 修改gitlab.rb文件vim /srv/gitlab/config/gitlab.rb找到external_url,默认是被注释的,要打开,并填写暴露出去的http://ip:port,IP一定要和gitlab.yml文件配置的相同,port为你启动时指定的,我们这里是5678,最后加上ssh协议下使用的IP和端口(这里的端口是你启动时指定的,我们这里是2222),最后保存并退出 停止并移除之前启动的gitlab# 停止docker stop gitlab# 移除docker rm gitlab重新启动gitlab这里要将容器端口改为5678 docker run -d -p 2443:443 -p 5678:5678 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce二、安装Gitlab-Runner可以在某个项目里``settings --> CICD --> Runner进行配置,也可以在GitLab主设置页安装共享Runner,安装方法都一致 1、拉取Runner镜像并启动docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest2、进入Runner容器内docker exec -it gitlab-runner bash3、运行以下命令gitlab-runner register输入Gitlab实例的地址Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )http://xxx输入tokenPlease enter the gitlab-ci token for this runnerxxx输入Runner的描述Please enter the gitlab-ci description for this runner[hostname] my-runner输入与Runner关联的标签Please enter the gitlab-ci tags for this runner (comma separated):my-tag,another-tag输入Ruuner的执行者Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:docker如果上面执行者为docker,需要你在.gitlab-ci.yml中指定docker版本Please enter the Docker image (eg. ruby:2.1):alpine:latest通过以上命令后,就可以在gitlab中查看到了这个刚刚创建的runner ...

October 4, 2019 · 2 min · jiezi

Docker-容器镜像删除

不知不觉发现 自己下了一堆镜像 今天都清理下 停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q)如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q)查看当前有些什么images docker images删除images,通过image的id来指定删除谁 docker rmi <image id>想要删除untagged images,也就是那些id为<None>的image的话可以用 docker rmi $(docker images | grep "^<none>" | awk "{print $3}")要删除全部image的话 docker rmi $(docker images -q)

October 4, 2019 · 1 min · jiezi

DOCKER-PHPNGINX

临近国庆,又回过头来鼓捣docker,因为从事php开发,所以还是先从环境入手。 本来考虑搭建php+mysql+nginx+redis全部,但是由于使用的都是公司的mysql和redis,故只搭建php+nginx,因为我的操作系统是win10,一下操作都是在win下完成的。 首先先拉取镜像,当然你也可以自己编写dockerfile去构建自己的镜像。这里先拉取nginx镜像: docker pull nginx这里会默认拉取最新的镜像,完成后可以使用docker images查看已有镜像。 接下来安装php,跟nginx镜像一样,可以通过直接拉取镜像完成操作,拉取的php镜像只有部分扩展,自己需要的扩展需要进入容器里面去安装,官方给出了三种安装php扩展的方法: docker-php-ext-installpecl install name-xxxcurl 源码安装但是通过这种方式运行的php存在一个问题,那就是重新创建的镜像或重新运行的容器,是没有上次安装好的扩展的,需要重新安装,所以,这里采用dockerfile构建自己的php镜像。 先创建一个目录,然后在这个目录里面创建dockerfile文件,文件内容如下: FROM php:7.2-fpm AS php7.2RUN docker-php-ext-install mysqli pdo pdo_mysql \ && pecl install redis-5.0.0 \ && pecl install yaf-3.0.8 \ && pecl install xdebug-2.7.2 \ && docker-php-ext-enable redis xdebug yaf \ && cd /usr/local/etc/php \ && touch php.ini然后在当前目录打开cmd,执行: docker build -t php7.2 .然后就会开始构建自己的php镜像,上述dockerfile比较简单,只是在php:7.2-fpm镜像的基础上,使用docker-php-ext-install、pecl安装了mysqli,pdo,redis,yaf,xdebug扩展,并创建了一个php.ini文件,用于后面挂载本地php.ini文件。 dockerfile还可以执行更复杂的操作,我们可以在ubuntu镜像里面通过RUN去执行终端命令安装php和nginx,并运行nginx、php-fpm服务,这样就可以在一个镜像里面同时安装php+nginx,但是这里只进行最简单的php镜像构建。 等一切完成之后,我们现在就有两个镜像 现在我们需要做的就是启动这两个镜像,并将本地的工作目录和配置文件挂载到容器对应的目录,但是,每次都要分别启动两个镜像并挂载相应的文件,属实比较麻烦,并且每次的ip还会变化导致需要更改nginx配置,这样还不如直接安装集成环境呢。。。 因此,这里采用docker-compose去启动这两家伙: version: '2'services: nginx: container_name: "nginx" image: nginx ports: - "80:80" depends_on: - php volumes: - "F:/phpstudy/PHPTutorial/nginx/conf.d:/etc/nginx/conf.d" - "F:/phpstudy/PHPTutorial/WWW:/usr/www/html" - "F:/logs/error.log:/var/log/nginx/error.log" - "F:/logs/access.log:/var/log/nginx/access.log" networks: - app_net php: image: php7.2:latest ports: - "9000:9000" volumes: - "F:/phpstudy/PHPTutorial/WWW:/var/www/html" - "F:/lnmp/php.ini:/usr/local/etc/php/php.ini" networks: - app_net container_name: "php"networks: app_net: ipam: driver: default config: - subnet: 10.10.0.0/16上面就是我们的docker-compose.yml文件,通过该文件和docker-compose命令可以快速部署分布式应用,这个文件同样放在刚才的dockerfile目录内,该文件里面指定了需要挂载的文件,以及映射的端口,这样就不需要每次都去手动输入,执行命令: ...

September 30, 2019 · 1 min · jiezi

从零开始入门-K8s-K8s-的应用编排与管理

作者 | 张振 阿里巴巴高级技术专家 一、资源元信息1. Kubernetes 资源对象我们知道,Kubernetes 的资源对象组成:主要包括了 Spec、Status 两部分。其中 Spec 部分用来描述期望的状态,Status 部分用来描述观测到的状态。 今天我们将为大家介绍 K8s 的另外一个部分,即元数据部分。该部分主要包括了用来识别资源的标签:Labels, 用来描述资源的注解;Annotations, 用来描述多个资源之间相互关系的 OwnerReference。这些元数据在 K8s 运行中有非常重要的作用。 2. labels第一个元数据,也是最重要的一个元数据——资源标签。资源标签是一种具有标识型的 Key:Value 元数据,如下图所示,展示了几个常见的标签。 前三个标签都打在了 Pod 对象上,分别标识了对应的应用环境、发布的成熟度和应用的版本。从应用标签的例子可以看到,标签的名字包括了一个域名的前缀,用来描述打标签的系统和工具, 最后一个标签打在 Node 对象上,还在域名前增加了版本的标识 beta 字符串。 标签主要用来筛选资源和组合资源,可以使用类似于 SQL 查询 select,来根据 Label 查询相关的资源。 3. Selector最常见的 Selector 就是相等型 Selector。现在举一个简单的例子: 假设系统中有四个 Pod,每个 Pod 都有标识系统层级和环境的标签,我们通过 Tie:front 这个标签,可以匹配左边栏的 Pod,相等型 Selector 还可以包括多个相等条件,多个相等条件之间是逻辑”与“的关系。 在刚才的例子中,通过 Tie=front,Env=dev 的 Selector,我们可以筛选出所有 Tie=front,而且 Env=dev 的 Pod,也就是下图中左上角的 Pod。另外一种 Selector 是集合型 Selector,在例子中,Selector 筛选所有环境是 test 或者 gray 的 Pod。 ...

September 20, 2019 · 4 min · jiezi

全世界最简单的kubernetes高可用安装工具sealos

English docs 概述与设计原则sealos旨在做一个简单干净轻量级稳定的kubernetes安装工具,能很好的支持高可用安装。 其实把一个东西做的功能强大并不难,但是做到极简且灵活可扩展就比较难。 所以在实现时就必须要遵循这些原则。 sealos特性与优势: 支持离线安装,工具与资源包(二进制程序 配置文件 镜像 yaml文件等)分离,这样不同版本替换不同离线包即可证书延期使用简单支持自定义配置内核负载,极其稳定,因为简单所以排查问题也极其简单为什么不使用ansile1.0版本确实是用ansible实现,但是用户还是需要先装ansible,装ansible有需要装python和一些依赖等,为了不让用户那么麻烦把ansible放到了容器里供用户使用。如果不想配置免密钥使用用户名密码时又需要ssh-pass等,总之不能让我满意,不是我想的极简。 所以我想就来一个二进制文件工具,没有任何依赖,文件分发与远程命令都通过调用sdk实现所以不依赖其它任何东西,总算让我这个有洁癖的人满意了。 为什么不用keepalived haproxyhaproxy用static pod跑没有太大问题还算好管理,keepalived现在大部分开源ansible脚本都用yum 或者apt等装,这样非常的不可控,有如下劣势: 源不一致可能导致版本不一致,版本不一直连配置文件都不一样,我曾经检测脚本不生效一直找不到原因,后来才知道是版本原因系统原因安装不上,依赖库问题某些环境就直接装不上了看了网上很多安装脚本,很多检测脚本与权重调节方式都不对,直接去检测haproxy进程在不在,其实是应该去检测apiserver是不是healthz的,api挂了即使haproxy在集群也会不正常了,就是伪高可用了。管理不方便,通过prometheus对集群进行监控,是能直接监控到static pod的但是用systemd跑又需要单独设置监控,且重启啥的还需要单独拉起。不如kubelet统一管理来的干净简洁。我们还出现过keepalived把CPU占满的情况。所以为了解决这个问题,我把keepalived跑在了容器中(社区提供的镜像基本是不可用的) 改造中间也是发生过很多问题,最终好在解决了。 总而言之,累觉不爱,所以在想能不能甩开haproxy和keepalived做出更简单更可靠的方案出来,还真找到了。。。 本地负载为什么不使用envoy或者nginx我们通过本地负载解决高可用问题 解释一下本地负载,就是在每个node节点上都启动一个负载均衡,上游就是三个master,负载方式有很多 ipvs envoy nginx等,我们最终使用内核ipvs 如果使用envoy等需要在每个节点上都跑一个进程,消耗更多资源,这是我不希望的。ipvs实际也多跑了一个进程lvscare,但是lvscare只是负责管理ipvs规则,和kube-proxy类似,真正的流量还是从很稳定的内核走的,不需要再把包走到用户态中去处理。 实现上有个问题会让使用envoy等变得非常尴尬,就是join时如果负载均衡没有建立那是会卡住的,kubelet就不会起,所以为此你需要先把envory起起来,意味着你又不能用static pod去管理它,同上面keepalived宿主机部署一样的问题,用static pod就会相互依赖,逻辑死锁,鸡说要先有蛋,蛋说要先有鸡,最后谁都没有。 使用ipvs就不一样,我可以在join之前先把ipvs规则建立好,再去join就可以join进去了,然后对规则进行守护即可。一旦apiserver不可访问了,会自动清理掉所有node上对应的ipvs规则, master恢复正常时添加回来。 为什么要定制kubeadm首先是由于kubeadm把证书时间写死了,所以需要定制把它改成99年,虽然大部分人可以自己去签个新证书,但是我们还是不想再依赖个别的工具,就直接改源码了。 其次就是做本地负载时修改kubeadm代码是最方便的,因为在join时我们需要做两个事,第一join之前先创建好ipvs规则,第二创建static pod,如果这块不去定制kubeadm就把报静态pod目录已存在的错误,忽略这个错误很不优雅。 而且kubeadm中已经提供了一些很好用的sdk供我们去实现这个功能。 且这样做之后最核心的功能都集成到kubeadm中了,sealos就单单变成分发和执行上层命令的轻量级工具了,增加节点时我们也就可以直接用kubeadm了 使用教程安装依赖安装并启动docker下载kubernetes 离线安装包.下载最新版本sealos.支持kuberentes 1.14.0+务必同步服务器时间安装教程多master HA: sealos init --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password \ --version v1.14.1 \ --pkg-url /root/kube1.14.1.tar.gz 或者单master多node: ...

September 19, 2019 · 4 min · jiezi

kubernetes-CNI详解

CNI接口很简单,特别一些新手一定要克服恐惧心里,和我一探究竟,本文结合原理与实践,认真读下来一定会对原理理解非常透彻。<!--more--> 环境介绍我们安装kubernetes时先不安装CNI. 如果使用了sealyun离线包 那么修改下 kube/conf/master.sh 只留如下内容即可: [root@helix105 shell]# cat master.sh kubeadm init --config ../conf/kubeadm.yamlmkdir ~/.kubecp /etc/kubernetes/admin.conf ~/.kube/configkubectl taint nodes --all node-role.kubernetes.io/master-清空CNI相关目录: rm -rf /opt/cni/bin/*rm -rf /etc/cni/net.d/*启动kubernetes, 如果已经装过那么kubeadm reset一下: cd kube/shell && sh init.sh && sh master.sh此时你的节点是notready的,你的coredns也没有办法分配到地址: [root@helix105 shell]# kubectl get pod -n kube-system -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScoredns-5c98db65d4-5fh6c 0/1 Pending 0 54s <none> <none> <none> <none>coredns-5c98db65d4-dbwmq 0/1 Pending 0 54s <none> <none> <none> <none>kube-controller-manager-helix105.hfa.chenqian 1/1 Running 0 19s 172.16.60.105 helix105.hfa.chenqian <none> <none>kube-proxy-k74ld 1/1 Running 0 54s 172.16.60.105 helix105.hfa.chenqian <none> <none>kube-scheduler-helix105.hfa.chenqian 1/1 Running 0 14s 172.16.60.105 helix105.hfa.chenqian <none> <none>[root@helix105 shell]# kubectl get nodeNAME STATUS ROLES AGE VERSIONhelix105.hfa.chenqian NotReady master 86s v1.15.0安装CNI创建CNI配置文件$ mkdir -p /etc/cni/net.d$ cat >/etc/cni/net.d/10-mynet.conf <<EOF{ "cniVersion": "0.2.0", "name": "mynet", "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "subnet": "10.22.0.0/16", "routes": [ { "dst": "0.0.0.0/0" } ] }}EOF$ cat >/etc/cni/net.d/99-loopback.conf <<EOF{ "cniVersion": "0.2.0", "name": "lo", "type": "loopback"}EOF这里两个配置一个是给容器塞一个网卡挂在网桥上的,另外一个配置负责撸(本地回环)。。 ...

September 19, 2019 · 3 min · jiezi

kustomize-颤抖吧helm

本人是helm的重度用户,但是吧越用越不爽。。。 helm v2版本三大弊病: 多租户支持不了搞个tiller服务端,鸡肋扯出自己很多概念未来一定是 kustomize + operator生态 v3版本抛弃tiller算是个进步,但是听说要上撸啊(lua)我就瞬间崩溃了,我只是想渲染个yaml文件而已。好在好多chart包貌似生态很繁荣。。。 今天给大家介绍kustomize是如何让helm寝食难安,做梦都在颤抖的. <!--more--> 安装kustomize已经集成在高版本(1.14+)的kubectl里了,可以使用 kubectl apply -k [目录] 来执行 安装太低级不说了,装不上的智商估计就不用往下继续看了。。。 快速开始mkdir ~/helloDEMO_HOME=~/helloBASE=$DEMO_HOME/basemkdir -p $BASEcurl -s -o "$BASE/#1.yaml" "https://raw.githubusercontent.com\/kubernetes-sigs/kustomize\/master/examples/helloWorld\/{configMap,deployment,kustomization,service}.yaml"看下目录结构: base ├── configMap.yaml ├── deployment.yaml ├── kustomization.yaml └── service.yamlconfigmap deployment service里就是我们普通的yaml文件,再加个kustomizeation文件: 文件中指定了一些配置,指定我们把哪些个文件进行合并 ➜ hello cat base/kustomization.yaml # Example configuration for the webserver# at https://github.com/monopole/hellocommonLabels: app: helloresources:- deployment.yaml- service.yaml- configMap.yamlbuild一下就会输出整个yaml了: # kustomize build baseapiVersion: v1data: altGreeting: Good Morning! enableRisky: "false"kind: ConfigMapmetadata: labels: app: hello name: the-map---apiVersion: v1kind: Servicemetadata: labels: app: hello name: the-service...很简单吧,是不是发现没什么卵用,咱再继续 ...

September 19, 2019 · 2 min · jiezi

从零开始入门-K8s-详解-Pod-及容器设计模式

作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 一、为什么需要 Pod容器的基本概念我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单位,但是为什么我们会需要这样一个概念呢?在使用容器 Docker 的时候,也没有这个说法。其实,如果想要理解 Pod,首先要理解容器,所以来回顾一下容器的概念:容器的本质实际上是一个进程,是一个视图被隔离,资源受限的进程。容器里面 PID=1 的进程就是应用本身,这意味着管理虚拟机等于管理基础设施,因为我们是在管理机器,但管理容器却等于直接管理应用本身。这也是之前说过的不可变基础设施的一个最佳体现,这个时候,你的应用就等于你的基础设施,它一定是不可变的。在以上面的例子为前提的情况下,Kubernetes 又是什么呢?很多人都说 Kubernetes 是云时代的操作系统,这个非常有意思,因为如果以此类推,容器镜像就是这个操作系统的软件安装包,它们之间是这样的一个类比关系。 真实操作系统里的例子如果说 Kubernetes 就是操作系统的话,那么不妨看一下真实的操作系统的例子。例子里面有一个程序叫做 Helloworld,这个 Helloworld 程序实际上是由一组进程组成的,需要注意一下,这里说的进程实际上等同于 Linux 中的线程。因为 Linux 中的线程是轻量级进程,所以如果从 Linux 系统中去查看 Helloworld 中的 pstree,将会看到这个 Helloworld 实际上是由四个线程组成的,分别是 {api、main、log、compute}。也就是说,四个这样的线程共同协作,共享 Helloworld 程序的资源,组成了 Helloworld 程序的真实工作情况。这是操作系统里面进程组或者线程组中一个非常真实的例子,以上就是进程组的一个概念。 那么大家不妨思考一下,在真实的操作系统里面,一个程序往往是根据进程组来进行管理的。Kubernetes 把它类比为一个操作系统,比如说 Linux。针对于容器我们前面提到可以类比为进程,就是前面的 Linux 线程。那么 Pod 又是什么呢?实际上 Pod 就是我们刚刚提到的进程组,也就是 Linux 里的线程组。 进程组概念说到进程组,首先建议大家至少有个概念上的理解,然后我们再详细的解释一下。还是前面那个例子:Helloworld 程序由四个进程组成,这些进程之间会共享一些资源和文件。那么现在有一个问题:假如说现在把 Helloworld 程序用容器跑起来,你会怎么去做?当然,最自然的一个解法就是,我现在就启动一个 Docker 容器,里面运行四个进程。可是这样会有一个问题,这种情况下容器里面 PID=1 的进程该是谁? 比如说,它应该是我的 main 进程,那么问题来了,“谁”又负责去管理剩余的 3 个进程呢?这个核心问题在于,容器的设计本身是一种“单进程”模型,不是说容器里只能起一个进程,由于容器的应用等于进程,所以只能去管理 PID=1 的这个进程,其他再起来的进程其实是一个托管状态。 所以说服务应用进程本身就具有“进程管理”的能力。比如说 Helloworld 的程序有 system 的能力,或者直接把容器里 PID=1 的进程直接改成 systemd,否则这个应用,或者是容器是没有办法去管理很多个进程的。因为 PID=1 进程是应用本身,如果现在把这个 PID=1 的进程给 kill 了,或者它自己运行过程中死掉了,那么剩下三个进程的资源就没有人回收了,这个是非常严重的一个问题。反过来,如果真的把这个应用本身改成了 systemd,或者在容器里面运行了一个 systemd,将会导致另外一个问题:使得管理容器不再是管理应用本身了,而等于是管理 systemd,这里的问题就非常明显了。比如说我这个容器里面 run 的程序或者进程是 systemd,那么接下来,这个应用是不是退出了?是不是 fail 了?是不是出现异常失败了?实际上是没办法直接知道的,因为容器管理的是 systemd。这就是为什么在容器里面运行一个复杂程序往往比较困难的一个原因。这里再帮大家梳理一下:由于容器实际上是一个“单进程”模型,所以如果你在容器里启动多个进程,只有一个可以作为 PID=1 的进程,而这时候,如果这个 PID=1 的进程挂了,或者说失败退出了,那么其他三个进程就会自然而然的成为孤儿,没有人能够管理它们,没有人能够回收它们的资源,这是一个非常不好的情况。 ...

September 19, 2019 · 4 min · jiezi

使用clientgo包访问Kubernetes-CRD

使用client-go包访问Kubernetes CRDKubernetes API服务器可通过自定义资源定义轻松扩展。但是,用client-go库访问这些资源有点麻烦,官方也没有完整的文档。如kubebuilder operator-framework都能很方便的帮助我们去创建实现一个controller,但是封装的过于好导致我们并不清楚内部是怎么调用client-go的,很多场景我们是需要自己去调用接口操作CRD的而不是在controller中去访问CRD。 本文非常实用,比较全比较完善的相关文档也比较难找到。 举个栗子: 我们在实现虚拟机CRD时,节点上agent需要查询虚拟机CRD,这种情况显然我们不会通过controller进行操作,此时我们就需要知道怎么直接用client-go操作CRD。<!--more--> 创建CRDapiVersion: "apiextensions.k8s.io/v1beta1"kind: "CustomResourceDefinition"metadata: name: "projects.example.sealyun.com"spec: group: "example.sealyun.com" version: "v1alpha1" scope: "Namespaced" names: plural: "projects" singular: "project" kind: "Project" validation: openAPIV3Schema: required: ["spec"] properties: spec: required: ["replicas"] properties: replicas: type: "integer" minimum: 1这个可以使用kubebuilder或者operator-framework生成, 自己写太累 要定义自定义资源定义,您需要考虑API组名称(在本例中example.sealyun.com)。按照惯例,这通常是您控制的域的域名(例如,您组织的域),以防止命名冲突。然后CRD的名称遵循模式<plural-resource-name>.<api-group-name>,因此在这种情况下projects.example.sealyun.com。 通常,您希望根据特定架构验证用户在自定义资源中存储的数据。这就是spec.validation.openAPIV3Schema它的用途:它包含一个描述资源应具有的格式的JSON模式。 使用kubectl创建资源定义, 如果用kubebuilder可以直接make && make deploy: > kubectl apply -f projects-crd.yamlcustomresourcedefinition "projects.example.sealyun.com" created可以创建此新资源类型的实例: apiVersion: "example.sealyun.com/v1alpha1"kind: "Project"metadata: name: "example-project" namespace: "default"spec: replicas: 1> kubectl apply -f project.yamlproject "example-project" created> kubectl get projectsNAME AGEexample-project 2m创建Golang客户端接下来,我们将使用client-go包来访问这些自定义资源。 ...

September 19, 2019 · 4 min · jiezi

Crawlab-单节点服务集群搭建部署简明教程

本文经授权转载自清雨的博客,作者会定期更新相关信息,欢迎前往阅读。1、安装 Docker CE → 传送门CentOS 使用者可以直接参考这篇文章:Docker CE 简明安装步骤 for CentOS 2、一些前期准备sudo mkdir -p /opt/dockersudo chown ${USER} -R /opt/dockermkdir -p /opt/docker/crawlab/data/mongodbmkdir -p /opt/docker/crawlab/data/redismkdir -p /opt/docker/crawlab/logs/crawlabmkdir -p /opt/docker/crawlab/spidersmkdir -p /opt/docker/crawlab/tmptouch /opt/docker/crawlab/docker-compose.ymlcat /dev/null > /opt/docker/crawlab/docker-compose.yml3、编排 Docker Composecat << EOF > /opt/docker/crawlab/docker-compose.ymlversion: '3.3' # Docker Compose Version 根据自己的需要选择,不同版本的配置参数略有不同,请自行查阅官方文档services: master: # 主节点(服务名称) image: tikazyq/crawlab:latest container_name: crawlab-master environment: # 环境变量 # CRAWLAB_API_ADDRESS 请根据需求改成自己宿主机的物理 IP 地址 CRAWLAB_API_ADDRESS: "192.168.31.200:8000" # localhost IP,前端调用的 API 地址,默认为 localhost:8000 CRAWLAB_SERVER_MASTER: "Y" # 主节点(Y/N) CRAWLAB_TASK_WORKERS: "5" # 任务并行执行个数,未配置此参数时,默认为:4 CRAWLAB_LOG_LEVEL: "info" # 日志级别 CRAWLAB_MONGO_HOST: "mongo" # MongoDB Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称 CRAWLAB_REDIS_ADDRESS: "redis" # Redis Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称 volumes: # 卷映射格式 "宿主:容器" - "/opt/docker/crawlab/spiders/:/app/spiders/" # 持久化爬虫项目文件到宿主机本地 - "/opt/docker/crawlab/logs/crawlab/:/var/logs/crawlab/" # 持久化日志数据到宿主机本地 - "/opt/docker/crawlab/tmp/:/tmp/" # 持久化临时文件目录到宿主机本地 - "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步 networks: # 固定 ipv4_address,请根据自己的需求分配 default: ipv4_address: "172.31.16.100" ports: # 端口映射格式 "宿主:容器" - "8080:8080" # frontend 开放前端页面访问端口 - "8000:8000" # frontend 和 backend 的通信端口(前端和后端的通信端口) depends_on: # 依赖的服务 - mongo - redis worker: # 工作节点(服务名称)设置(如不需要工作节点,可将此 sercive 的整段配置此 docker-compose.yml 文件里删除) image: tikazyq/crawlab:latest container_name: crawlab-worker volumes: # 卷映射格式 "宿主:容器" - "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步 networks: # 固定 ipv4_address,请根据自己的需求分配 default: ipv4_address: "172.31.16.101" environment: CRAWLAB_SERVER_MASTER: "N" # 主节点(Y/N) CRAWLAB_TASK_WORKERS: "5" # 任务并行执行个数,未配置此参数时,默认为:4 CRAWLAB_MONGO_HOST: "mongo" # MongoDB Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称 CRAWLAB_REDIS_ADDRESS: "redis" # Redis Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称 depends_on: # 依赖的服务 - mongo - redis mongo: # MongoDB 服务 image: mongo:latest restart: always volumes: # 卷映射格式 "宿主:容器" - "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步 - "/opt/docker/crawlab/data/mongodb/:/data/db/" # 持久化 MongoDB 数据到宿主机本地 networks: # 固定 ipv4_address,请根据自己的需求分配 default: ipv4_address: "172.31.16.251" ports: # 端口映射格式 "宿主:容器" - "27017:27017" redis: # Redis 服务 image: redis:latest restart: always volumes: # 卷映射格式 "宿主:容器" - "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步 - "/opt/docker/crawlab/data/redis/:/data/" # 持久化 Redis 数据到宿主机本地 networks: # 固定 ipv4_address,请根据自己的需求分配 default: ipv4_address: "172.31.16.252" ports: # 端口映射格式 "宿主:容器" - "6379:6379"networks: # 配置此 Docker Compose Cluster 服务集群的网络 default: driver: bridge ipam: driver: default config: - subnet: "172.31.16.0/24" # 固定网域,请根据自己的需求分配 # 以下配置为 Docker Compose 2.X 版本的参数,3.X 版本已移除部分支持 # gateway: "172.31.16.254" # 配置固定的子网网关 # ip_range: "172.31.16.1/24" # 固定网域里允许分配的 IP 地址子网段范围# 配置参考资料:# https://tikazyq.github.io/crawlab-docs/Config/# https://docs.docker.com/compose/compose-file/EOF一些关于配置的说明: ...

September 9, 2019 · 2 min · jiezi

如何快速搭建实用的爬虫管理平台

本篇文章内容较多,涉及知识较广,读完需要大约 20 分钟,请读者耐心阅读。 前言大多数企业都离不开爬虫,爬虫是获取数据的一种有效方式。对搜索引擎来说,爬虫不可或缺;对舆情公司来说,爬虫是基础;对 NLP来说,爬虫可以获取语料;对初创公司来说,爬虫可以获取初始内容。但是爬虫技术纷繁复杂,不同类型的抓取场景会运用到不同的技术。例如,简单的静态页面可以用 HTTP 请求+HTML 解析器直接搞定;一个动态页面需要用 Puppeteer 或 Selenium等自动化测试工具;有反爬的网站需要用到代理、打码等技术;等等。因此,对爬虫有规模量级要求的企业或个人需要同时处理不同类别的爬虫,这会凭空增添很多附加的管理成本。同时,爬虫管理者还需要应对网站内容变更、持续增量抓取、任务失败等问题。因此一个成熟的爬虫管理流程应该包含一个管理系统,能够有效处理上述问题。 理解什么是爬虫管理平台定义爬虫管理平台是一个一站式管理系统,集爬虫部署、任务调度、任务监控、结果展示等模块于一体,通常配有可视化 UI 界面,可以在 Web 端通过与 UI 界面交互来有效管理爬虫。爬虫管理平台一般来说是支持分布式的,可以在多台机器上协作运行。当然,上述这个定义是狭义的,通常针对于技术人员或开发者或技术经理。企业内部一般都会开发自己的内部爬虫管理系统,以应对复杂的爬虫管理需求。这样的系统就是上述定义的狭义的爬虫管理平台。 广义爬虫管理平台而什么是广义的爬虫管理平台呢?您可能听说过神箭手(后转型为后羿采集器)和八爪鱼吧。前者是基于云服务的,可以在线上编写、运行和监控爬虫,在广义爬虫平台中最接近狭义定义的爬虫管理平台;后者是一个大众的商业爬虫抓取工具,可以让小白用户拖拉拽编写、运行爬虫,导出数据。您也可能见过各种 API 聚合服务商,例如聚合数据,这是一个可以直接调用网站接口获取数据的平台,这其实也算作爬虫平台的一个变种,只是它帮你完成了爬虫编写这一过程。而介于这两者之间的呢,国外有一家叫 Kimonolab 的公司,它开发了一个叫 Kimono 的 Chrome 插件,可以让用户在页面上可视化的点击元素并生成抓取规则,并在其网站上生成爬虫程序,用户提交任务,后台就可以自动在网站上抓取数据了。Kimono 是一个伟大的爬虫应用,但可惜的是,Kimonolab 已经被大数据公司 Plantir 收购,现在也就无法体验了。 在本文中,我们主要关注狭义定义的爬虫管理平台,因此后面所讲到的爬虫管理平台都是指狭义的定义。 爬虫管理平台模块以下是一个典型的爬虫管理平台所涉及的模块。 典型爬虫管理平台的模块主要包含以下内容: 任务管理:如何执行、调度爬虫抓取任务,以及如何监控任务,包括日志监控等等;爬虫管理:包括爬虫部署,即将开发好的爬虫部署(打包或复制)到相应的节点上,以及爬虫配置和版本管理;节点管理:包括节点(服务器/机器)的注册和监控,以及节点之间的通信,如何监控节点性能状况等;前端应用:包括一个可视化 UI 界面,让用户可通过与其交互,与后台应用进行通信。当然,有些爬虫管理平台可能还不止这些模块,它可能包括其他比较实用的功能,例如可配置的抓取规则、可视化配置抓取规则、代理池、Cookie 池、异常监控等等。 为什么需要爬虫管理平台有了爬虫管理平台,开发者特别是爬虫工程师就能够方便的添加爬虫、执行任务、查看结果,而不用在命令行之间来回切换,非常容易出错。一个常见的场景就是爬虫工程师最初技术选型用了 scrapy 和 crontab 来管理爬虫任务,他不得不小心翼翼的选择定时任务的时间区间,以至于不会将服务器 CPU 或内存占满;更棘手的问题是,他还需要将 scrapy 产生的日志存到文件里,一旦爬虫出错了,他不得不用 shell 命令一个一个来查看日志来定位错误原因,严重时会花上一个整天;还有个严重的问题,爬虫工程师可能发现公司业务量在增加,他需要写上百个爬虫来满足公司的业务需求,而用 scrapy 和 crontab 来管理完全就是个噩梦。可怜的爬虫工程师其实完全可以选择一个合适爬虫管理平台来解决他的问题。 如何选择一个合适的爬虫管理平台当您愿意解决前面提到的爬虫工程师遇到的困难问题,而转而想选择一个合适的爬虫管理平台时。 您首先应该回答的问题是:我们是否需要从零开始开发一套系统(Start from scratch)?要回答这个问题,您应该先回答下面几个问题: 我们的需求是否复杂到需要完全定制化开发一套新系统(例如要求复杂的权限管理)?我们的团队是否有足够的技术实力来开发这套系统(例如有经验丰富的前后端开发工程师)?我们的时间资源是否足够我们开发这套系统(例如项目计划周期为一年)?如果上述三个问题的答案任意一个为“否”,您应该好好考虑利用市面上已有的开源爬虫管理平台来满足您的需求。 以下为市面上已有的开源爬虫管理平台: 平台名称技术优点缺点SpiderKeeperPython Flask基于 scrapyd,开源版 Scrapyhub,非常简洁的 UI 界面,支持定时任务可能有些过于简洁了,不支持分页,不支持节点管理,不支持 scrapy 以外的爬虫 GerapyPython Django + VueGerapy 是崔庆才大神开发的爬虫管理平台,安装部署非常简单,同样基于 scrapyd,有精美的 UI 界面,支持节点管理、代码编辑、可配置规则等功能同样不支持 scrapy 以外的爬虫,而且据使用者反馈,1.0 版本有很多 bug,期待 2.0 版本会有一定程度的改进ScrapydwebPython Flask + Vue精美的 UI 界面,内置了 scrapy 日志解析器,有较多任务运行统计图表,支持节点管理、定时任务、邮件提醒、移动界面,算是 scrapy-based 中功能完善的爬虫管理平台同样不支持 scrapy 以外的爬虫,Python Flask 为后端,性能上有一定局限性Python Flask + VueCrawlabGolang + Vue不局限于 scrapy,可以运行任何语言和框架的爬虫,精美的 UI 界面,天然支持分布式爬虫,支持节点管理、爬虫管理、任务管理、定时任务、结果导出、数据统计等功能部署稍微有一些麻烦(不过利用 Docker 可以一键部署),最新版本暂时不支持可配置爬虫总的来说,SpiderKeeper 可能是最早的爬虫管理平台,但功能相对来说比较局限;Gerapy 虽然功能齐全,界面精美,但有不少 bug 需要处理,建议有需求的用户等待 2.0 版本;Scrapydweb是一个比较完善的爬虫管理平台,不过和前两者一样,都是基于 scrapyd 的,因此只能运行 scrapy 爬虫;而Crawlab是一个非常灵活的爬虫管理平台,可以运行 Python、Nodejs、Java、PHP、Go 写的爬虫,而且功能比较齐全,只是部署起来相对于前三者来说要麻烦一些,不过对于 Docker 使用者来说可以做到一件部署(后面我们会讲)。 ...

September 9, 2019 · 4 min · jiezi

教你如何做出自己想要的PHP-Docker镜像

之前有片文章讲过如何通过Docker来构建Laravel的开发环境,其实变通一下就能够在本地电脑上用Docker运行任何PHP项目,让任何PHP项目都能运行在Docker环境中主要是需要根据PHP项目的依赖制作PHP镜像的Dockerfile。这篇文章就主要讲一下如何根据需求制作PHP的Docker镜像文件。 1. 继承基础镜像首先需要根据你的PHP项目对PHP的要求找到基础镜像,然后再在基础镜像的基础上按需安装PHP的扩展。在Dockerfile中使用FROM命令指定基础镜像。 From <image>FROM 指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。FROM 必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 语句开始。这里我们打算制作一个PHP7.2的包括FPM的定制化镜像,所以首先在Dockerfile中指定基础镜像: FROM php:7.2-fpm2. 安装PHP扩展定制PHP镜像的主要工作就是安装各种PHP扩展,在Dockerfile中PHP镜像安装扩展有三种方法,每种方法都有它特定的使用场景,下面依次来说。 2.1安装dockerhub中php官方提供的扩展在DockerHub中提供了一些官方的PHP扩展,可以通过docker-php-ext-install脚本命令在Dockerfile中列出要安装的扩展,下面让我们的PHP镜像安装上常用的pdo、pdo_mysql、mcrypt这些扩展。 FROM php:7.2-fpmRUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath如果你需要对扩展指定一些自定义的编译参数的话,docker提供了另外一个有用的脚本docker-php-ext-configure来传递编译参数(一般情况下用不到)。 FROM php:7.2-fpmRUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd2.2 使用PECL安装扩展DockerHub上只是提供了一部分PHP的扩展,安装这些以外的扩展仍然需要PECL, 在Docker镜像中使用pecl install下载、编译、安装扩展然后使用docker-php-ext-enable 下面使用PECL安装了PHP的redis还有grpc扩展。 RUN pecl install grpc \ && docker-php-ext-enable grpc \ && pecl install -o -f redis \ && docker-php-ext-enable redis \ && rm -rf /tmp/pear2.3 源码安装扩展有些扩展即无法使用docker-php-ext-install安装也无法通过PECL安装,只能通过源码编译安装(PHP扩展型的框架Phalcon就是这样,不过设置比较复杂,以后再讲), 在Docker中同样能够通过源码安装PHP扩展 ...

September 8, 2019 · 1 min · jiezi

开发者必备Docker命令

SpringBoot实战电商项目mall(20k+star)地址:https://github.com/macrozheng/mall摘要本文主要讲解Docker环境的安装以及Docker常用命令的使用,掌握这些对Docker环境下应用的部署具有很大帮助。 Docker 简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows机器上。使用Docker可以更方便低打包、测试以及部署应用程序。 Docker 环境安装安装yum-utils:yum install -y yum-utils device-mapper-persistent-data lvm2为yum源添加docker仓库位置:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装docker:yum install docker-ce启动docker:systemctl start dockerDocker 镜像常用命令搜索镜像docker search java 下载镜像docker pull java:8如何查找镜像支持的版本由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过docker hub来搜索支持的版本。进入docker hub的官网,地址:https://hub.docker.com然后搜索需要的镜像: 查看镜像支持的版本: 进行镜像的下载操作:docker pull nginx:1.17.0列出镜像docker images 删除镜像指定名称删除镜像docker rmi java:8指定名称删除镜像(强制)docker rmi -f java:8强制删除所有镜像docker rmi -f $(docker images)Docker 容器常用命令新建并启动容器docker run -p 80:80 --name nginx -d nginx:1.17.0-d选项:表示后台运行--name选项:指定运行后容器的名字为nginx,之后可以通过名字来操作容器-p选项:指定端口映射,格式为:hostPort:containerPort列出容器列出运行中的容器:docker ps 列出所有容器docker ps -a 停止容器# $ContainerName及$ContainerId可以用docker ps命令查询出来docker stop $ContainerName(或者$ContainerId)比如: docker stop nginx#或者docker stop c5f5d5125587强制停止容器docker kill $ContainerName(或者$ContainerId)启动已停止的容器docker start $ContainerName(或者$ContainerId)进入容器先查询出容器的pid:docker inspect --format "{{.State.Pid}}" $ContainerName(或者$ContainerId)根据容器的pid进入容器:nsenter --target "$pid" --mount --uts --ipc --net --pid ...

September 8, 2019 · 1 min · jiezi

Kubernetes初体验Minikube

本文会指引读者完成minikube及其相关工具的安装,通过一个单节点的kubernetes集群来进行学习和体验。 STEP 1: 安装 kubectl本文仅演示macOS上通过Homebrew安装kubectl的过程,windows和linux用户请移步官方文档寻找最方便的安装方法:通过Homebrew安装kubectl的过程非常简单: $ brew install kubernetes-cli安装完成后,查看版本信息以确认安装成功: $ kubectl versionSTEP 2: 安装 minikubeminikube可以让我们很方便的体验Kubernetes,不过由于一些众所周知的原因,我们在大陆使用起来会有些麻烦,所以我们这次采用阿里云社区里提供的版本。 在开始前,请确保本机装了对应的驱动,我的是VirtualBox,没有的话请先安装一个 minikube在MacOS, Windows和Linux上的安装方法: MacOS: $ curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.3.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/Linux: $ curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.3.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/Windows:下载 minikube-windows-amd64.exe 文件,并重命名为 minikube.exe STEP 3: 初始化环境(可选)如果在之前有安装过官方的minikube,在启动前需要先清除之前的配置: 删除旧集群: $ minikube delete删除配置文件: $ rm -rf ~/.minikubeSTEP 4: 启动 minikube 并打开 dashboard我们需要通过minikube start来创建本地Kubernetes环境,如果不指定驱动,则默认是Virtualbox,我们也可以加上--registry-mirror来提高速度: ...

September 7, 2019 · 1 min · jiezi

docker常用指令详解

指令详解从远程仓库拉取镜像//docker image pull library/hello-world默认从library拉取可以省略docker image pull hello-world查看镜像列表docker image ls运行一个docker的镜像,产生一个容器实例//运行docker run hello-world//echo会在shell打印一段文字,起提示作用Hello world检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止查看容器// 列出本机正在运行的容器docker container ls// 列出本机所有容器,包括终止运行的容器docker container ls --all启动一个可交互的容器docker run -t -i ubuntu:14.04 /bin/bashdocker run 命令,并启动名称为ubuntu:14.04的容器 。-t 表示在新容器内指定一个伪终端或终端-i表示允许我们对容器内的 (STDIN) 进行交互。可以将-t -i缩减为-it好记我们在容器内还指定了一个新的命令: /bin/bash 。这将在容器内启动 bash shell,这是一个交互程序注意":"后面为TAG,如果没有指定默认就为latest所以当容器(container)启动之后,我们会获取到一个命令提示符: root@af8bae53bdd3:/#这代表我们已经进入了容器内部 启动守护进程,后台一直运行容器docker run -d ubuntu:14.04//注意-d和-it同时使用,-it会无效,-d需要返回一个容器id端口映射,挂载数据卷,命名容器docker run -d --name=ant_web_pro -v /宿主机绝对路径:/容器内目录 -p docker外部端口:docker内部端口 nginx-P: 随机端口映射,容器内部端口随机映射到主机的高端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口--name="nginx-lb": 为容器指定一个名称;--volume , -v: 绑定一个卷如果是容器里的目录不存在,两者都会自动创建-v $PWD/目录:/容器内目录 $PWD表示当前文件夹当你在容器容器内部改变数据卷是其实软连接到了外部,数据直接在宿主机改变查看数据卷docker volume ls启动已终止的容器容器可以通过run新建一个来运行,也可以重新start已经停止的container,但start不能够再指定容器启动时运行的指令,因为docker只能有一个前台进程。容器stop(或Ctrl+D)时,会在保存当前容器的状态之后退出,下次start时保有上次关闭时更改。而且每次进入attach进去的界面是一样的,与第一次run启动或commit提交的时刻相同。 docker start $CONTAINER_IDdocker stop $CONTAINER_IDdocker restart $CONTAINER_ID退出容器exit进入容器docker exec -it ant-design-pro_web /bin/bash//docker exec -it 64b9ded82141 bash (可以是id) 删除一个或多个container、image(rm、rmi)// 删除容器docker rm <container_id/contaner_name>// 删除所有停止的容器docker rm $(docker ps -a -q)// 删除镜像docker rmi <image_id/image_name ...>commit 容器,创建新镜像我们期望能定制自己的镜像,在里面安装一些基础环境(比如上文中的 node),然后制作出自己要的基础镜像。 ...

September 7, 2019 · 1 min · jiezi

Vim高手从来不用鼠标2替换撤销缩进查找

本文章原创首发于公众号:编程三分钟 vim 替换、撤销、缩进、查找上一次我们掌握了移动、跳转、定位、操作(删除、复制、粘贴),基本使用vim脱离鼠标完全是可以做到的了。速记如下: 移动: h,l,j,k,w,b 跳转:G nG f/F+字母 定位:G代表尽头, $代表行尾,^代表行首,w代表下一个单词,b上一个单词,e当前单词末尾 操作:y d p 知识点字符替换缩进与调整文本位置(居左、居中、居右)字符查找字符的替换及撤销查找和替换是编辑器中最常用的功能之一,在普通编辑器当中查找替换时,你可能需要先移动鼠标在菜单中点击查找的功能,输入查找内容,再点击确认查找。而在vim中,所有的操作只需要敲击几下键盘就行了,手不用离开键盘区域,速度自然会快很多很多。 替换和撤销(Undo)替换和Undo命令都是针对普通模式下的操作,这次用到三个字母,r/R,c/C,u/U r+<待替换字母>    将游标所在的一个字母替换为其他字母(如下#替换成i) 当然了,一个一个替换甚是麻烦,不妨使用R连续替换 R    连续替换,直到按下Esc cw   删除一个单词,并进入插入模式 C   删除从游标处开始到当前行尾,并进入插入模式 u    撤销一次操作(如下,粘贴了Internet单词三次,按u三次,撤销粘贴操作) U(大写)    无论当前行修改了多少次,撤销当前行的所有修改 Ctrl+r    redo,即撤销undo的操作(如下,删除一个单词,写入123,之后交替u和Ctrl+r,可以观察到重复撤销123输入,再恢复123输入) 快速缩进快速缩进在编辑代码时极其有用,快速调整代码缩进非常的爽,缩进操作均在普通模式下有效 使用命令进行快速调整缩进操作>> 整行将向右缩进 << 整行向左回退 设置缩进字符数命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数 (可以简写成sw,下面我都用简写) 获取目前的设定值 :set shiftwidth? 设置缩进为n个字符 :set shiftwidth=n 输入 ESC 回到普通模式,再次尝试 >> 看缩进量是否变化 调整文本位置命令行模式下输入:le(left)命令使本行内容靠左 :le命令行模式下输入:ce(center)命令使本行内容居中 :ce命令行模式下输入:ri(right)命令使本行文本靠右 ...

September 6, 2019 · 1 min · jiezi

记录一下-本次使用的-docker

1、简介Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像; 运行中的这个镜像称为容器,容器启动是非常快速的。 2、核心概念docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上); docker客户端(Client):连接docker主机进行操作; docker仓库(Registry):用来保存各种打包好的软件镜像; docker镜像(Images):软件打包好的镜像;放在docker仓库中; docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用 3、安装Docker3.1 检查内核版本,必须是3.10及以上uname -r 3.2 使用 root 权限登录 Centos。确保 yum 包更新到最新(不然运行会报错)yum update3.3 安装依赖yum install -y yum-utils \ device-mapper-persistent-data \ lvm23.4 安装dockeryum install docker3.5 查看docker版本docker version3.6 启动dockersystemctl start docker3.7 设置docker开启启动systemctl enable docker3.8 关闭dockersystemctl stop docker3.9 测试安装效果Docker的简单运用---Hello World将名为 hello-world 的 image 文件从仓库抓取到本地。 docker pull library/hello-world运行 docker run hello-world正确的效果: 4、Docker常用命令&操作4.1 镜像操作 https://hub.docker.com/ 4.2、容器操作(安装mysql为例)搜索镜像 docker search mysql拉取镜像(下载) docker pull mysql 若需要选择版本则如: docker pull mysql:8.0启动(做了端口映射) ...

August 27, 2019 · 1 min · jiezi

K8s-实战之概念集群部署与服务配置

K8s 实战之概念、集群部署与服务配置本文是对于 Kubernetes 实战系列文章的提炼。 Kubernetes [koo-ber-nay'-tice] 是 Google 基于 Borg 开源的容器编排调度引擎,其支持多种底层容器虚拟化技术,具有完备的功能用于支撑分布式系统以及微服务架构,同时具备超强的横向扩容能力;它提供了自动化容器的部署和复制,随时扩展或收缩容器规模,将容器组织成组,并且提供容器间的负载均衡,提供容器弹性等特性。作为 CNCF(Cloud Native Computing Foundation)最重要的组件之一,可谓云操作系统;它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态。 设计理念与一般的 PaaS 平台相比,K8s 也是支持服务部署、自动运维、资源调度、扩缩容、自我修复、负载均衡,服务发现等功能,而其独特之处就是其对于基础设施层进行了较好的能力抽象。K8s 并没有处理具体的存储、网络这些差异性极大的部分,而是做云无关,开始实现各类 interface,做各种抽象。比如容器运行时接口(CRI)、容器网络接口(CNI)、容器存储接口(CSI)。这些接口让 Kubernetes 变得无比开放,而其本身则可以专注于内部部署及容器调度。 Kubernetes 有类似于 Linux 的分层架构,如下图所示: 基础设施层:包括容器运行时、网络、存储等。核心层:Kubernetes 最核心的功能,对外提供 API 构建高层的应用,对内提供插件式应用执行环境。应用层:部署(无状态、有状态应用、Job 等)和路由(服务发现、负载均衡等)管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态 Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)接口层:kubectl 命令行工具、客户端 SDK 以及集群联邦生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS 应用、ChatOps 等外部生态以及 CRI、CNI、CSI、镜像仓库、Cloud Provider、集群自身的配置和管理等内部生态。Kubernetes 中所有的配置都是通过 API 对象的 spec 去设置的,也就是用户通过配置系统的理想状态来改变系统,这是 Kubernetes 重要设计理念之一,即所有的操作都是声明式(Declarative)的而不是命令式(Imperative)的。声明式操作在分布式系统中的好处是稳定,不怕丢操作或运行多次,例如设置副本数为 3 的操作运行多次也还是一个结果,而给副本数加 1 的操作就不是声明式的,运行多次结果就错了。 相对于命令式操作,声明式操作会更稳定且更容易被用户接受,因为该 API 中隐含了用户想要操作的目标对象,而这些对象刚好都是名词性质的,比如 Service、Deployment、PV 等;且声明式的配置文件更贴近“人类语言”,比如 YAML、JSON。声明式的设计理念有助于实现控制闭环,持续观测、校正,最终将运行状态达到用户期望的状态;感知用户的行为并执行。比如修改 Pod 数量,应用升级/回滚等等。调度器是核心,但它只是负责从集群节点中选择合适的 Node 来运行 Pods,显然让调度器来实现上诉的功能不太合适,而需要有专门的控制器组件来实现。 ...

August 21, 2019 · 5 min · jiezi

Docker-Swarms-跨主机集群搭建

解决的问题想要在多台物理实体机或虚拟机,而不是一台机器上构建集群。由于使用windows10 + VirtualBox,并在VirtualBox中安装linux系列系统,并卡在文档"docker-machine create --driver virtualbox myvm1"的读者搭建环境搭建时间:2019.8.16设备系统:windows10虚拟软件:VirtualBox虚拟系统:Ubuntu 18.04 LTS 参考博客感谢以下博客在问题解决中提供的帮助JerryWangSAP --- 错误消息 This computer doesn't have VT-X/AMD-v enabled向上的路 --- docker跨主机通信方式四 docker-machine 背景为什么我会想到要在多台物理实体主机或虚拟机搭建来搭建集群呢?原因有两个:单台设备性能极限以及灾备。第一条原因很好理解,单台设备的算力是有限的。而灾备的考虑点并不是容器内的服务宕机,而是物理范畴的灾备。国内可靠性达到99.99%的云服务供应商不时出事的新闻时常会听到,但两个或以上云服务上同时出事的情况呢? 理论分析一下,以99.99%作为标准,这个数字乍一看却是有种万无一失的感觉,但实际算下来,一年的宕机时间是:52.56分钟.如果将服务同时放在两个供应商上呢?一年里两家云服务供应商同时宕机导致的理论宕机时间为:0.31秒。当然这只是个理论分析,只是在这种理论下,相同预算时,购买分布在2个或多个云服务提供商的主机会不会是一种更好的选择呢? 思路Docker文档在Swarms部分通过"docker-machine create --driver virtualbox myvm1"命令宿主系统内创建虚拟节点,但该命令在本就已经是由虚拟机创建的ubuntu系统内是无法执行成功的,参见JerryWang的Blog。解决这个问题的方法有很多,更换虚拟机软件、双系统、Mac等都可行,但受限于某些客观原因,并且想要尝试跨主机构建集群,因此采用了一下解决方案:在VirtualBox虚拟出3套ubuntu系统:A、B、C。其中将A等价为教程中的数组操作系统,B、C等价为教程中宿主操作系统中的两个节点。通过联通A、B、C来达到与教程在该处相同的效果,同时也是实现了跨主机集群的搭建。 具体步骤在主机A中预先装好docker(参见官网教程!), B、C虚拟机只需要安装ssh服务器即可。(此处B、C可以为云服务供应商的虚拟主机)使用以下指令获取B、C虚拟机的IP地址。 ifconfig // 若信息过长使用 ifconfig >> output 输出大文件里使用vim打开查看B、C主机配置ssh允许直接使用root帐号登录:在/etc/ssh/sshd_config文件内,添加 PermitRootLogin yes在A中执行以下命令生成密钥文件(此步骤开始的所有操作都只需在A中完成) ssh-keygen将公钥复制到B、C ssh-copy-id IP //执行两次,分别将IP替换为B、C的IP使用一下指令验证是否配置成功 ssh IP //成功后使用logout推出登录使用以下指令在A中给B、C安装docker。(同时也将建立起A与B、C的链接) // docker文档到此处前并没有要求安装docker-machine,常见官方文档安装// 此命令需要执行两次,分别使用B、C的IP,NodeName官方文档分别命名为了:myvm1 、myvm2,此处我命名为docker1、docker2docker-machine create -d generic --generic-ip-address=IP NodeName使用以下指令检查连接是否建立完成 docker-machine ls解释说明以上步骤实现的效果就可以将独立的多台物理主机或位于不同平台的虚拟机实现连接,同时也等效官方文档以下两条指令,后续可以无缝衔接后续教程内容docker-machine create --driver virtualbox myvm1docker-machine create --driver virtualbox myvm2关于IP,若是同我一样的场景(拥有固定IP的主机和云服务器除外),不推荐去花费时间在局域网内配置静态IP,因为还需要在/etv/netplan(ubuntu17.04以后启用的)下的配置文件里配置子网掩码、网关以及DNS服务器等,很容易出错。花费时间的性价比不高,IP有可能会发生变化,但从我实际操作来说,晚间完全足够完成练习。为什么需要在B、C中修改ssh配置文件?由于ssh默认不可使用root帐号登录,常规流程我们都属使用自己创建的帐号如:ubuntu登录,再使用sudo su切换到root帐号,但在该场景下需要需要将此登录方式开启。(毕竟这样我们没有必要再去繁琐的操作节点主机)后记最终的效果如下完成docker文档所有get-star教程的效果如下 ...

August 20, 2019 · 1 min · jiezi

Docker管理面板URLOS易用高效强大

一.介绍URLOS是一个Docker管理面板,它把服务器端软件应用的安装行为简化到极致,堪称服务器端的应用宝,具有集群管理、自动故障转移、自动负载均衡等高级功能,可轻易搭建7*24小时在线的网站运行环境。 借助URLOS可轻松让网站在拥有多个主机的集群上运行,单机故障不会导致网站停止。 演示网址:http://demo.urlos.com:9968 用户名:urlos 密码:urlos 登录后你会有一种眼前一亮的感觉,简洁清新的设计,友好的中文界面。 左右结构的设计,将菜单功能放置于界面左侧,符合绝大多数用户的使用习惯,功能分类清晰一目了然。URLOS将Docker指令巧妙的隐藏在各种功能交互操作之中,即使用户对Docker技术一无所知,也不会影响用户的正常使用,可以说URLOS已经将Docker容器技术变成了普通百姓都可以使用的技术。 二.安装看起来是不是很棒?那么就让我们安装起来玩玩吧。 硬件要求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;系统要求推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian8X、Debian9X的64位的<u>纯净的操作系统</u>;安装URLOS请在安装URLOS之前确认操作系统版本是否符合安装要求,推荐您使用Ubuntu-18.04 64位系统。 登陆操作系统:使用ssh客户端工具登录系统,如果登录用户不是root,则执行sudo -s命令切换到root用户;下载安装脚本并执行安装命令:集群模式(多台主机组集群,支持弹性伸缩、故障自动转移和负载均衡等高级功能): curl -LO www.urlos.com/iu && sh iu单机模式: curl -LO www.urlos.com/siu && sh siu<u>注:如果系统中没有curl工具,则需先执行“apt-get install -y curl || yum -y install curl”安装curl</u> 如果系统里已经安装了Docker,也可以使用docker run命令直接运行(用此方法可省略后面的3、4、5步): docker run -itd --name urlos --restart always -p 9968:9968 -p 9966:9966 -v /data/urlos:/data/urlos urlos/urlos选择服务器所在区域的编号:服务器在中国选1,如果1不能安装则选2,如果服务器在海外则选3(如下载过程比较缓慢,请换一个编号),然后按回车;选择Docker数据的存储目录:/data/docker选1,/home/docker选2,/var/lib/docker选3,然后按回车;安装成功并重启服务器:安装完成后可能会自动重启服务器,重启过程一般需要1分钟左右;访问并使用URLOS:请在防火墙(或安全组)中开放9966,9967,9968,9969,9970端口(入站规则),然后使用浏览器访问“https://您的服务器使用IP:9966”或“http://您的服务器IP:9968”访问URLOS;用户名:urlos,密码:urlos提示: URLOS同时支持HTTPS和HTTP协议进行访问,但我们强烈推荐您使用HTTPS协议,因为HTTP协议非常不安全,很容易被抓包从而导致密码泄露!付费版本需绑定授权解密才能正常使用,详情请查看授权码绑定方法。三.使用说起Docker管理面板,大多数小伙伴印象中出现的都是满屏英文、不明所以的操作界面。而URLOS的出现恰恰是打破了国内用户对Docker管理面板的刻板印象。 下面,让我们举几个简单例子来说明一下吧。 使用URLOS管理服务器集群与节点 使用URLOS管理网站 使用URLOS管理数据库 URLOS应用市场 四.总结URLOS不仅仅是一款Docker管理面板,它还是一个服务器集群管理面板、网站管理面板。它基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 感兴趣的小伙伴们不妨安装体验一下。

August 19, 2019 · 1 min · jiezi

Rainbond集群的安装和运维的原理

本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。 1.Rainbond集群节点概述1.1 节点分类属性类型说明manage管理节点集结平台自身组件,提供应用构建、调度、管理等功能,提供数据中心基础服务与API接口,充当控制集群的角色。gateway网关节点集群内应用被外网访问的流量入口和负载均衡器,提供HTTP, HTTPs路由, TCP/UDP服务, 负载均衡器, 高级路由(A/B测试, 灰度发布)等功能。compute计算节点提供应用运行的计算资源,N个计算节点组成计算资源池供给管理节点灵活调度。1.2 节点部署主要服务组件概述角色组件说明rbd-dns提供本地dns服务,服务于集群内应用的DNS解析。 etcd管理节点etcd kube-controller-managerKubernetes管理组件之一, Pod编排器 rbd-webcli提供应用web方式进入容器命令行的服务 nfs_server远程存储挂载 rbd-hub基于Docker Registry封装,提供Docker镜像存储服务,服务于数据中心内部 kube-schedulerKubernetes管理组件之一,Pod调度器 docker应用容器引擎 rbd-mq消息队列服务 calico集群SDN服务,为应用提供网络支持 rbd-chaos应用构建服务,提供源码,Docker镜像等方式持续构建应用。 rbd-worker应用运行控制器 kube-apiserverKubernetes管理组件之一, 提供API服务 rbd-eventlogRainbond 事件处理与日志汇聚服务 rbd-monitorRainbond 监控管理服务,基于Prometheus封装 rbd-apiRainbond API服务,数据中心控制层面的入口。 rbd-dbRainbond 数据库服务,支持MySQL,Tidb与CockroachDB rbd-app-ui应用控制台web服务 rbd-repo源码构建仓库服务,基于Artifactory OSS封装 nodeRainbond 集群和节点控制器服务etcd-proxy计算节点etcd-proxy rbd-dnsRainbond内部dns服务,与管理节点DNS服务共同对当前节点的应用提供DNS解析 kubeletKubernetes 计算负载节点组件 docker应用容器引擎 calico集群SDN服务,为应用提供网络支持 nodeRainbond节点控制器,提供服务守护、自动运维、日志收集、服务发现等服务。网关节点docker应用容器引擎 calico集群SDN服务,为应用提供网络支持 rbd-dnsRainbond内部dns服务,可作为集群dns服务使用 rbd-gateway 1.3 节点规划一个完整的Rainbond集群中必须包含manage、gateway、compute角色的节点和暂不作为Rainbond安装支持的存储节点,当然三种属性可以在同一个节点上组成单节点的Rainbond集群。安装Rainbond之前需要根据企业自身需求合理的规划计算资源,这里主要是指物理机或虚拟机节点。 从上文中列举的主要Rainbond服务组件来综合分析,管理节点的合理规划是关键。 Rainbond的主要数据存储组件是: Etcd根据Etcd集群组建特性,其必须部署为1,3,5奇数节点。 MysqlMysql数据库的部署模式主要有主从、多主等模式, Rbd-monitor(Prometheus)Prometheus具有单机自治特性,因此每一个Rbd-monitor节点都是独立的数据采集和存储,基本上可以认为多节点数据是一致的。 Rainbond安装脚本对Etcd,Rbd-monitor做了较好的自动安装支持,对于Mysql数据库,我们更建议用户独立安装Mysql数据库并提供给Rainbond安装脚本。管理节点其他的组件基本上可以认为是无状态的,或有状态的组件都自身实现了良好的工作节点选举。对部署节点数无关键要求。因此我们推荐的管理节点数量是3个及以上。 网关节点处理流量入口,每一个Rainbond节点目前都独立提供了所有访问策略的支持,因此上层可以采用4层负载均衡策略或VIP策略,因此我们推荐的节点数量是2个及以上。 计算节点提供计算负载,节点越多,集群计算容量越大,因此计算节点的规划取决于集群需要运行的应用数量,随时可以增加或下线节点。因此我们推荐的节点数量是2个及以上。 2. 安装原理说明Rainbond-Ansible 项目是Rainbond子项目之一,提供Rainbond集群便捷的安装支持,采用Ansible自动化部署框架实现。其具有安装简单、工作原理简单、模块化、生态完善等特点。 早期我们采用了SaltStack 实现,其工作模式复杂,不透明的节点通信机制。Rainbond安装过程受限于SaltStack的稳定性,因此我们从5.0版本后对安装脚本进行了重构。2.1 安装脚本结构.├── callback_plugins # 任务失败时打印帮助消息回调插件│ └── help.py # 回调插件示例├── hack # 部署本地资源文件目录│ ├── chinaos # 操作系统的安装包源│ │ ├── CentOS-Base.repo # CentOS的源│ │ ├── centos-release # CentOS的全局配置│ │ ├── sources.list # Ubuntu的源│ │ ├── ubuntu-lsb-release # Ubuntu的版本配置│ │ └── ubuntu-release # Ubuntu的全局配置│ ├── docker # Docker部署资源文件目录│ │ ├── get-docker.sh # 快速部署Docker脚本│ │ └── rainspray.list # 快速部署Docker的Ubuntu源│ ├── files # 好雨工具包│ │ ├── bin # grctl的二进制文件│ │ ├── health # 健康监测脚本│ │ ├── ssh # ssh配置脚本│ │ └── ssl # 好雨加密证书│ ├── manifests # 应用配置文件│ │ ├── dashboard # 仪表盘-配置│ │ ├── efk # efk-配置│ │ ├── es-cluster # es集群-配置│ │ ├── heapster # heapster-配置│ │ ├── ingress # ingress-配置│ │ ├── jenkins # jenkins-配置│ │ ├── metrics-server # metrics-配置│ │ ├── prometheus # prometheus-配置│ │ └── storage # storage-配置│ ├── step # Ansible安装步骤剧本│ │ ├── 00.prepare.yml # 安装前检测│ │ ├── 01.docker.yml # docker-配置│ │ ├── 02.image.yml # image-配置│ │ ├── 10.etcd.yml # etcd-配置│ │ ├── 11.kube-master.yml # kube-master-配置│ │ ├── 12.kube-worker.yml # kube-worker-配置│ │ ├── 13.network.yml # network-配置│ │ ├── 20.db.yml # database-配置│ │ ├── 21.storage.yml # storage-配置│ │ ├── 22.lb.yml # lb-配置│ │ ├── 23.node.yml # node-配置│ │ └── 90.setup.yml # setup-配置│ ├── thirdparty # 第三方服务对接│ │ ├── addmaster.yml # 增加master-role│ │ ├── addnode.yml # 增加node-role│ │ └── setup.yaml # 配置安装│ ├── tools # 工具包目录│ │ ├── get_images.sh # 拉取docker镜像│ │ ├── update-domain.sh # 更换域名│ │ └── yc-ssh-key-copy.sh # 批量部署服务器ssh-key│ ├── upgrade # 升级配置目录│ │ └── upgrade.yml # 升级配置文件│ ├── vagrant # vagrant服务配置目录│ │ ├── README.md # 说明文件│ │ ├── Vagrantfile # ruby获取系统信息│ │ ├── install.sh # 安装文件│ │ └── setup.sh # 配置文件│ └── windows # windows节点配置目录│ ├── cni # 配置文件目录│ ├── scripts # 脚本目录│ │ ├── helper.psm1 # 帮助信息脚本│ │ ├── hns.psm1 # hns配置脚本│ │ ├── start-flannel. # 开启flannel脚本│ │ ├── start-kubelet. # 开始kubelet脚本│ │ └── start-node.ps1 # 开始node服务脚本│ ├── README.md # 说明文件│ ├── daemon.json # 域名配置│ ├── net-conf.json # 网络配置│ └── win.yaml # Windows配置├── inventory # Ansible剧本执行主机│ ├── hosts.all # 主机模版│ └── hosts.master # 主机模版├── log # 日志文件目录├── offline # 离线安装配置文件目录│ ├── image # 离线包制作脚本目录│ │ ├── download.sh # 缓存docker离线镜像脚本│ │ ├── image.txt # rainbond镜像列表│ │ ├── load.sh # 加载离线缓存镜像包脚本│ │ └── offimage.sh # 压缩理想缓存镜像包脚本│ └── pkgs # 离线包存储目录│ ├── Dockerfile.centos # 构建离线CentOS镜像│ ├── Makefile # 构建离线CentOS镜像│ ├── README.md # 说明文档│ ├── download.centos # 创建本地CentOS源│ └── rbd.repo # Centos源├── scripts # 部署脚本存放目录│ ├── installer # 安装脚本目录│ │ ├── default.sh # 默认网络配置脚本│ │ ├── functions.sh # 安装的示例库脚本│ │ └── global.sh.example # 全局变量示例脚本│ ├── op # 网络配置目录│ │ ├── README.md # 说明文件│ │ ├── lb.sh # 配置lb服务脚本│ │ └── network.sh # 配置网络脚本│ ├── upgrade # 升级脚本目录│ │ └── upgrade.sh # 升级脚本文件│ ├── yaml # 网络配置剧本目录│ │ ├── init_network.yaml # 初始化网络剧本│ │ └── reset_network.yaml # 重置网络剧本│ └── node.sh # 用于管理节点脚本├── test # 测试剧本语法脚本目录│ ├── hosts.ini # 主机配置信息│ ├── k8s-master.role.1.j2 # k8s-master配置信息│ ├── k8s-worker.role.1.j2 # k8s-worker配置信息│ ├── kubelet.sh.1.j2 # kubelet配置信息│ └── test.sh # 检测Ansible剧本语法脚本├── roles # Ansible部署规则配置文件目录│ ├── bootstrap # bootstrap服务规则配置│ ├── db # database服务规则配置│ ├── docker # docker服务规则配置│ ├── etcd # etcd服务规则配置│ ├── k8s # k8s服务规则配置│ ├── lb # lb服务规则配置│ ├── monitor # monitor服务规则配置│ ├── network_plugin # network_plugin服务规则配置│ ├── node # node服务规则配置│ ├── prepare # prepare服务规则配置│ ├── rainvar # rainvar服务规则配置│ ├── storage # storage服务规则配置│ ├── thirdparty # thirdparty服务规则配置│ └── upgrade # upgrade服务规则配置├── docs # 说明文档文件夹├── CHANGELOG.md # 版本迭代说明├── Dockerfile # 创建rainbond-ansible的Ubuntu镜像源├── LICENSE # 开发协议├── Makefile # 语法检测配置├── README.md # 说明文件├── addmaster.yml # 增加master节点剧本├── addnode.yml # 增加node节点剧本├── ansible.cfg # Ansible程序配置优化├── lb.yml # 增加lb节点剧本├── setup.sh # 主安装脚本入口├── setup.yml # Ansible本地安装剧本├── upgrade.yml # Ansible升级剧本└── version # 安装包版本2.2 ansible-playbook各角色剧本角色剧本说明managerainvar初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) bootstrap对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) prepare对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) storage/nfs/client以nfs方式挂载本节点的存储卷 storage/nas以nas方式挂载本节点的存储卷 storage/gfs以gfs方式挂载本节点的存储卷 docker/install在本节点上安装Docker服务 k8s/manage在本节点上安装k8s服务的管理端 etcd/manage在本节点上安装etcd服务的管理端 gateway在本节点上安装负载均衡组件 monitor在本节点上安装监控组件 network_plugin/calico切换docker网络为calico network_plugin/flannel切换docker网络为flannel node/exm安装基础依赖包(python-pip、ansible) node/core在本节点安装node核心组件gatewayrainvar初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) bootstrap对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) prepare对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) storage/nfs/client以nfs方式挂载本节点的存储卷 storage/nas以nas方式挂载本节点的存储卷 storage/gfs以gfs方式挂载本节点的存储卷 docker/install在本节点上安装Docker服务 network_plugin/calico切换docker网络为calico network_plugin/flannel切换docker网络为flannel gateway在本节点上安装负载均衡组件 node/exlb在本节点安装node负载组件computerainvar初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) bootstrap对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) prepare对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) storage/nfs/client以nfs方式挂载本节点的存储卷 storage/nas以nas方式挂载本节点的存储卷 storage/gfs以gfs方式挂载本节点的存储卷 docker/install在本节点上安装Docker服务 k8s/compute在本节点上安装k8s服务的客户端 etcd/compute在本节点上安装etcd服务的客户端 network_plugin/calico切换docker网络为calico network_plugin/flannel切换docker网络为flannel gateway在本节点上安装负载均衡组件 node/core在本节点安装node核心组件2.3 安装脚本部署流程2.3.1 集群初始化集群初始化包括三个重要步骤,安装脚本获取、安装环境构建和第一个节点的安装。 ...

August 19, 2019 · 5 min · jiezi

Docker入门docker-compose的使用

Compose简介Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在https://github.com/docker/com... 上开源。 Compose定位是定义和运行多个Docker容器的应用,其前身是开源项目Fig。 通过前面内容的介绍,我们知道使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要加上后端的数据库服务容器,甚至还包括负载均衡容器等。 Compose恰好满足了这样的需求。它允许用户通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器为一个项目(project)。 Compose中有两个重要的概念: 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。项目(project):由一组关联的应用容器组成的一个完整业务单元。Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。 安装和卸载Compose支持Linux、macOS、Windows10三大平台。 Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在Docker容器中运行。 Docker for Mac、Docker for Windows自带docker-compose二进制文件,安装Docker之后可以直接使用。 docker-compose --versionLinux系统需要单独使用二进制或者pip方式进行安装。 Linux安装docker-compose二进制包在Linux上的安装十分简单,从官方GitHub Release处直接下载编译好的二进制文件即可。例如,在Linux64位系统上直接下载对应的二进制包。 sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose #赋予可执行权限 PIP安装如果您计算机的架构是ARM(例如,树莓派),建议使用pip安装。 sudo pip install -U docker-compose使用场景:最常见的项目是web网站,一般的web网站都会依赖第三方提供的服务(比如:DB和cache),我们拿dubbo-admin进行讲解(dubbo-admin依赖zookeeper)。 Compose构建dubbo-admin服务从github上获取dubbo-admin的master分支源码 git clone -b master https://github.com/apache/incubator-dubbo-ops.git修改admin中的application配置,把zookeeper地址改为zookeeper://zookeeper:2181 使用maven进行编译打包 mvn clean package -Dmaven.test.skip=true 在dubbo-admin目录下编写Dockerfile文件,内容为 # FROM,表示使用JDK8环境为基础镜像,如果镜像不是本地会从DockerHub进行下载FROM openjdk:8-jdk-alpine# 作者MAINTAINER Simon<xueyao.me@gmail.com>VOLUME /tmp# ADD,拷贝文件并且重命名ADD ./target/dubbo-admin-0.0.1-SNAPSHOT.jar app.jar# ENTRYPOINT,为了缩短Tomcat启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINTENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]使用docker build -t dubbo-admin:1.0 .命令进行构建。 ...

August 19, 2019 · 2 min · jiezi

Docker入门镜像容器仓库

镜像镜像是Docker运行容器的前提获取镜像docker pull NAME[:TAG] // 不指定TAG,默认选择latest标签运行镜像docekr run -t -i ubuntu /bin/bash查看镜像信息docker images添加镜像标签docker tag ubuntu:latest my/ubuntu:latest查看镜像详细信息docker inspect 镜像iddocker inspect -f {{".Architecture"}} id // 查询某一项内容搜寻镜像docker search TERM--automated=false 仅展示自动创建的镜像--no-trunc=false 输出信息不截断显示-s=0 仅显示评价为指定星级以上的镜像删除镜像docker rmi IMAGE[IMAGE...] 其中IMAGE可以为标签或者id删除正在运行的镜像docker rmi -f ubuntu 强制删除(不建议)推荐:1. 删除容器;2. 再用id删除镜像docker rm id docker rmi ubuntu 创建镜像基于已有镜像创建docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]选项包括:-a,--author="" 作者信息-m,--message="" 提交信息-p,--pause=true 提交时暂停容器运行下面是一个展示: $ winpty docker run -ti ubuntu bashroot@39b31ce63c14:/# touch testroot@39b31ce63c14:/# exit# 查看容器id$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES39b31ce63c14 ubuntu "bash" 12 minutes ago Exited (0) 11 minutes ago friendly_chebyshev$ docker commit -m "added a new file" -a "coderluo" 39b test:coderluosha256:489150941c65c552268ddacd10d9fe05c01e30c8c3bd111e4217d727e8f724c4基于本地模板导入可以直接从一个操作系统模板文件导入一个镜像,推荐使用OpenVZ提供的模板来创建。下载地址为: ...

August 18, 2019 · 4 min · jiezi

Docker入门数据挂载

Docker数据管理在容器中管理数据主要有两种方式: 数据卷(Volumes)挂载主机目录(Bind mounts) 数据卷数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新,不会影响镜像数据卷默认会一直存在,即使容器被删除注意: 数据卷的使用,类似于Linux下对目录或文件进行mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。 Docker中提供了两种挂载方式,-v和-mount Docker新用户应该选择 --mount参数 经验丰富的Docker使用者对-v或者--volume已经很熟悉了,但是推荐使用-mount参数。 创建一个数据卷 docker volume create my-volume查看指定数据卷的信息 docker volume inspect my-volume 启动一个挂载数据卷的容器: 在用docker run命令的时候,使用--mount标记来将数据卷挂载到容器里。 创建一个名为session-web的容器,并加载一个数据卷到容器中的/webapp目录。 # 方法一docker run --name session-web -d -p 8888:8080 --mount source=my-volume,target=/webapp session-web:latest# 方法二docker run --name session-web -d -p 8888:8080 -v my-volume:/webapp session-web:latest删除数据卷 docker volume rm my-volume数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用docker rm -v这个命令。 无主的数据卷可能会占据很多空间,要清理请使用以下命令 docker volume prune挂载主机目录使用--mount标记可以指定挂载一个本地主机的目录到容器中去 # 方法一docker run --name session-web -d -p 8888:8080 \-v my-volume:/webapp \session-web:latest# 方法二docker run --name session-web -d -p 8888:8080 \--mount type=bind,source=/src/webapp,target=/opt/webapp session-web:latest上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。 ...

August 18, 2019 · 1 min · jiezi

centos-fastdfs-nginx-docker-化

环境准备:使用的软件:libfatscommon:FastDFS分离出的一些公用函数包 https://github.com/happyfish1... FastDFS:FastDFS本体 https://github.com/happyfish1... fastdfs-nginx-module:FastDFS和nginx的关联模块 https://github.com/happyfish1... nginx:nginx1.16.1 http://nginx.org/en/download.... 将以上文件,下载下来,并放到一个地方 Dockerfile 编写FROM centosMAINTAINER 陈少平 18250073990@163.com# install dependencyRUN yum -y upgrade \ && yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel -yWORKDIR /usr/local/src# copy tool packageADD fastdfs-5.11.tar.gz ./ADD fastdfs-nginx-module-1.20.tar.gz ./ADD libfastcommon-1.0.39.tar.gz ./ADD nginx-1.16.1.tar.gz ./# install libfastcommonWORKDIR /usr/local/src/libfastcommon-1.0.39RUN ./make.sh && ./make.sh install# install FastDFSWORKDIR /usr/local/src/fastdfs-5.11RUN ./make.sh \ && ./make.sh install# install fastdfs-nginx-moduleADD config /usr/local/src/fastdfs-nginx-module-1.20/src# install nginxWORKDIR /usr/local/src/nginx-1.16.1RUN ./configure --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src \ && make \ && make install# copy filesRUN cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf \ && cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf \ && cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf \ && cp /usr/local/src/fastdfs-5.11/conf/http.conf /etc/fdfs/ \ && cp /usr/local/src/fastdfs-5.11/conf/mime.types /etc/fdfs/ \ && cp /usr/local/src/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs# create fastdfs storage RUN mkdir /home/dfsWORKDIR /etc/fdfs# nginx portEXPOSE 80# fdfs-tracker portEXPOSE 22122# fdfs-client portEXPOSE 8888CMD ["/bin/bash"]修改 /usr/local/src/fastdfs-nginx-module/src/config 文件信息(ngx_module_incs,CORE_INCS, CORE_LIBS 修改这 3个地方)ngx_addon_name=ngx_http_fastdfs_module ...

August 17, 2019 · 2 min · jiezi

干货-博云基于OVS自研容器网络插件在金融企业的落地实践

本文根据博云在dockerone社区微信群分享内容整理 过去几年博云在企业中落地容器云平台遇到了很多痛点,其中一个比较典型的痛点来自网络方面,今天很高兴跟大家聊聊这个话题并介绍下我们基于OVS自研的CNI插件——内部称之为fabric项目。 01容器平台落地时网络方面的需求 从2013年左右Docker技术在开发者中流行起来,到如今kubernetes已经成为事实上的容器编排引擎,容器、微服务、DevOps互相支持互相促进,容器云平台的实际落地案例开始越来越多。特别是2018年以来,越来越多的企业开始思考如何利用容器云平台支持其生产场景最终提高生产效率。 不同于开发测试场景,生产场景上线一套平台或系统要求会严格很多。安全、监控、流程、现有系统集成、业务暴露等等的建设要求都要匹配上,否则不可能上线。在这个过程中,特别是在传统的金融类企业对监管要求严格的情况下,容器云平台落地时会碰到很多问题,这其中,最典型的一个需求就是容器云平台的网络建设,必须同时满足业务方,运维人员,安全人员,网络人员的诉求。 现在容器云平台大部分都是基于Kubernetes构建,市面上的CNI插件也非常多,各个企业现网的需求也有很大的不同,所以几乎不可能出现一种网络模型适配所有客户场景的情况。现在主流的比较成熟稳定的CNI比如calico在扩展性、稳定性等方面表现优秀,但在传统金融类企业落地时非常困难,经常需要对不同的需求做出妥协。 我们和多家客户进行了深入沟通,虽然需求有所差异,但总结下来主要的诉求包括:在主流的二层组网的数据中心中,受限于硬件能力或管理复杂度,大部分客户不希望引入BGP等三层路由概念。企业业务系统往往会在容器云平台内外同时同时部署,希望平台内外网络能够直接打通。IP地址是业务的身份识别,希望能够具备固定IP的能力,而且是可管理、可审计的IP地址。管理网络和数据网络分离。具备网络隔离能力,硬件隔离的强安全性和软件隔离的灵活性都需要。网络模型应该尽量简单,易于掌控,易于调试。高性能,低抖动的网络吞吐能力。其他的高级特性,如双向限速、DPDK、overlay等。 我们对市面上主流的CNI插件进行了广泛的调研后,发现主流的CNI对以上“国产化”的需求的支持并不理想,主要的不满足点包括: 网络模型差异(三层VS二层,当然L2的方案也很多,OVS有流表等等高级功能,非常适合当今云化的环境),要适配现网环境、安全策略等。 云原生理念。主流的CNI较好的满足了云原生的概念,但客户的实际需求中其实是有些“anti-cloudnative”的,如何在cloudnative和anti-cloudnative之间做到平衡其实普遍缺少实践经验。 简单稳定可靠。这其实是非常重要的要考虑的点,厂商、企业都要有相应的人员能够掌控网络模型,毕竟网络作为云平台的底层,出现问题后影响太大。 我们针对网络建设的核心需求及社区现状综合分析之后,决定启动beyondFabric项目,目前该项目已经作为博云容器云平台重点支持的两个网络模型(calico/beyondFabric)之一,支撑了多家企业的生产系统的稳定运行。 02BeyondFabric BeyondFabric是我们自研的kubernetes CNI插件,利用etcd作为其数据存储单元,内置完善的IPAM能力,能够很好的满足前面提到的客户的核心诉求。因为BeyondFabric是基于二层网络设计的,同时针对特定需求做了很多优化,所以其在一部分场景下(特别是国内高度重视安全的金融类企业数据中心中)表现良好;但同时也决定了BeyondFabric不能适合于所有的场景,具体选择哪种CNI还是要根据自身情况作出评估。(实际上没有任何一种CNI能满足所有的场景需求。) fabric经典模式示意图 从fabric的概念图中可以一目了然的看清楚云平台的网络拓扑,每个计算节点上安装一个OVS,并且作为一个单纯的虚拟交换机使用,容器通过veth pair连接到OVS的端口上从而自然的获得物理环境下的网络身份;在网络的层面上,容器、虚拟机、物理机是完全对等的。不论是网络管理人员还是业务人员都可以简单清晰的了解到网络的拓扑情况。而且在这种简化的部署模型中(同时也是使用度最广的模型)不包括控制器等复杂逻辑,提供了简单、高效、稳定的网络环境。 fabric的组件图 fabric是基于OVS的CNI插件,其具体职能为为POD组建网络并设置IP地址。fabric-ctl负责网络及IP地址管理,通过RESTFUL API提供网络/IP的管理能力,如创建网络, 编辑网络,查找IP等。fabric-ctl本身是无状态的,所有状态信息存储到etcd中。fabric-admin的主要使用人员为平台管理员或BOC运维人员,方便使用人员查看和管理网络及IPAM等。fabric-admin的命令行格式参考Kubectl。 在经典组网模式下,将ovs作为一个基本的虚拟交换机使用即可,非常简单。如果使用networkpolicy等隔离策略,需要在每个节点上引入一个分布式控制器。 网络管理能力fabric项目除了CNI协议规定的组建容器网络的功能之外,还以restful API、annotation等方式额外提供了对网络的管理能力。通过界面集成后可以方便管理人员使用,如下图中的增加网络,查看网络,查看IP地址使用,固定IP等。 增加网络 查看网络 查看IP地址使用 固定IP地址 成熟度接下来看一下fabric项目的成熟度,一个项目的成熟度是由很多方面决定的,除了fabric设计之初的简单网络模型,成熟的组件(无额外复杂组件,即使在做策略控制/overlay等场景下,也只是在每个节点上引入一个分布式控制器)之外,我们还做了以下几个方面的工作。 fabric-admin考虑到软硬件层面的异常情况,例如kubelet或fabric的bug,环境(硬件损坏)等均可能对系统的正常运行造成不同程度的影响,所以提供了一个fabric-admin的工具,位于/opt/cni/bin目录下,其作用类似于文件系统的FSCK能力,为运行时管理提供保障。同时其命令行格式完全匹配kubectl,对熟悉kubernetes的用户非常友好。 例如可以查看pod的IP占用情况(示例输出已被截断) : 同时,fabric-admin还提供了多种运行时管理能力支持,运行--help后可以提示: 如同FSCK是文件系统成熟的重要标志,fabric-admin是beyondFabric项目成熟的有力保障!(fabric-admin虽然功能强大,但客户现网环境中还从来没有被使用过,也从侧面说明了fabric项目的成熟度) kubernetes社区CNI测试套件因为fabric项目完全满足CNI协议规范,因此可以使用任意的CNI测试工具进行测试。我们的测试团队结合社区提供的CNI测试工具及k8s job对象等对beyondFabric进行了长时间的严格测试,测试结果证明fabric项目具备生产可用能力。 多种平台支持私有云建设中,容器云平台一般运行在物理环境或vmware/openstack等虚拟化环境中。fabric对于这几种部署环境均能完善支持。对于网络环境复杂不易变更的场景下,fabric基于overlay可以显著减少环境依赖。 多个落地案例博云容器云平台基于fabric已经有多个的落地案例,在可管理性、稳定性、性能等多个方面运行良好。 BeyondFabric性能接下来看一下fabric的性能表现。由于fabric采用了稳定可靠的OVS作为其基本单元,所以从原理上讲其性能损耗应该是非常小的,我们在物理环境中基于万兆网络的性能测试也验证了这一点。图中可以看出pod-pod/pod-node的损耗较node-node约在5%左右。 博云容器云平台网络模型选型建议然后我们来看一下选型建议。在客户落地容器云平台的过程中,我们会和客户进行大量沟通,其中一个很重要的沟通就是涉及业务方、安全人员、网络人员、运维人员的网络模型沟通。具体的选型建议如下表所示,最终的选型结果由所有涉及人员共同决定。 fabric项目的小结OK,简单总结一下fabric项目。fabric项目解决了企业落地容器云平台的一些主要的痛点,通过经典网络模式可以很好的满足各个职能部门的诉求。但毕竟没有任何一种网络方案能满足所有的网络诉求,fabric也有其天生的缺点,例如经典网络模式下需要客户真实的IP网络,这些网络资源在容器化的环境下消耗速度很快,需要根据业务需要提前创建好网络资源,然而有些客户的IPV4资源会比较紧张。当然这一点随着VXLAN的支持和IPV6的普及,将会得到很大的改善。fabric核心是二层的解决方案,二层就必然面临扩展性的问题,我们目前的解决方案是通过分区的概念去映射真实的网络分区,然后通过扩展分区的方式扩展Kubernetes集群。 Q:IPAM的固定IP是怎么实现的?IP与Pod UID关联吗?A:管理员录入网络信息后,Fabric会将所有IP地址存储到etcd中统一管理。目前固定IP是通过给deployment等workload对象增加Annotation实现的。IP不与Pod UID关联。 Q:这里面提到的三层网络和二层网络是指七层协议的三层二层吗?A:是的,比如交换机工作在2层,路由器工作在三层。 Q:服务负载均衡怎么实现的呢?A:外部流量导入集群的负载均衡是通过另外一个组件,ingress controller实现的,没有实现在CNI里面。Kubernetes svc的负载均衡是通过iptables实现的,Fabric项目也会往iptables里面加入一些规则,主要是跨节点SNAT。 Q:支持流量限流么?A:支持Ingress/Egress限速,通过给容器加Annotation即可以实现容器的限速。 Q:有和Contiv做过对比吗?A:选型阶段做过,比较早了,那时候貌似Contiv还不太成熟,所以没深入研究。 Q:这些网络方案有什么好的学习方式吗?A:网络虽然很复杂,但万变不离其宗。容器网络这个词最近几年比较流行,是因为网络再容器环境下遇到了一些挑战,但网络本质的概念还是过去非常成熟的那一套。所以首先得学习基本的网络知识,然后去看下容器环境快速弹性等带来的痛点。 Q:TC怎么实现的?A:这个实现的比较久了,早在过去重点支持Calico的时候就已经做了。有些细节模糊了,但基本是通过Linux tc实现的,因为本质是veth pair,所以限速可以在主机侧veth端实现。基本的限速命令可以查找tc机制就可以了,我们碰到限速不太准确,最后也通过调整参数解决了,误差控制在百分之几吧。 Q:与Kube-OVN做过对比吗?A:Kube-OVN是友商开源的产品,我了解过。首先Kube-OVN和Fabric项目都是基于OVS进行研发的,都支持Overylay/underlay模式,都可以实现CNI协议。但其实差别还是比较大。OVN项目源于OpenStack,OpenStack里的网络模型是非常重的,概念、组件都比较多,OVN也在试图统一Kubernetes/OpenStack的网络模型,所以Kube-OVN里有一些能力其实已经不在CNI spec的范围内了,比如负载均衡,DNS等,其实在社区都有对应的实现。而Fabric会简单很多,是一个标准的CNI实现,网络模型也非常清晰,能够把容器直接融入现网环境,企业的网管一般都能掌控,对安全监管等已有体系兼容性比较好。 网络是非常复杂的,很难有一个统一的模型去兼顾所有的场景,个人认为这也是Kubernetes社区聪明的地方,把这些复杂的,不宜标准的东西抽象出来,交给第三方去做。也正是由于CNI协议的简单性和网络的复杂性,现在市场上CNI可以说百家争鸣,各有所长。个人认为这是一个非常好的现象。具体使用哪种CNI,还是要根据企业自身的情况作出决定。

August 8, 2019 · 1 min · jiezi

istio入门教程

广告 | kubernetes各版本离线安装包安装安装k8s 强势插播广告三步安装,不多说 安装helm, 推荐生产环境用helm安装,可以调参<!--more-->release地址 如我使用的2.9.1版本 yum install -y socat # 这个不装会报错[root@istiohost ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz[root@istiohost ~]# tar zxvf helm-v2.9.1-linux-amd64.tar.gz[root@istiohost ~]# cp linux-amd64/helm /usr/bin先创建一个service account 把管理员权限给helm: [root@istiohost ~]# cat helmserviceaccount.yamlapiVersion: v1kind: ServiceAccountmetadata: name: tiller namespace: kube-system---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: tiller-clusterrolebindingsubjects:- kind: ServiceAccount name: tiller namespace: kube-systemroleRef: kind: ClusterRole name: cluster-admin apiGroup: ""kubectl create -f helmserviceaccount.yaml安装helm 服务端 tiller : helm init --service-account tiller # 如果已安装更新加 --upgrade 参数helm list #没任何返回表示成功安装istiocurl -L https://git.io/getLatestIstio | sh -cd istio-1.0.0/export PATH=$PWD/bin:$PATHhelm 2.10.0以前的版本需要装一下CRD: ...

August 7, 2019 · 3 min · jiezi

kubernetes离线包分析

k8s离线包解析产品地址 鸣谢大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去。感谢大家对付费产品的认可,尊重付费产品介绍我们专注于k8s离线包的制作,优化细节,让大家可以很方便快速的安装k8s集群。下面详细介绍安装包的原理以及如何去制作一个这样的包,大家参考我的方法也可以制作自己想要的版本然后用于自己的离线环境<!--more--> 目录结构.├── bin # 指定版本的bin文件,只需要这三个,其它组件跑容器里│   ├── kubeadm│   ├── kubectl│   └── kubelet├── conf│   ├── 10-kubeadm.conf # 这个文件新版本没用到,我在shell里直接生成,这样可以检测cgroup driver│   ├── dashboard│   │   ├── dashboard-admin.yaml│   │   └── kubernetes-dashboard.yaml│   ├── heapster│   │   ├── grafana.yaml│   │   ├── heapster.yaml│   │   ├── influxdb.yaml│   │   └── rbac│   │   └── heapster-rbac.yaml│   ├── kubeadm.yaml # kubeadm的配置文件│   ├── kubelet.service # kubelet systemd配置文件│   ├── net│   │   └── calico.yaml│   └── promethus├── images # 所有镜像包│   └── images.tar└── shell ├── init.sh # 初始化脚本 └── master.sh # 运行master脚本init.sh解析# 网络配置,让calico可以路由cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --systemsysctl -w net.ipv4.ip_forward=1# 关闭防火墙 交换分区 selinuxsystemctl stop firewalld && systemctl disable firewalldswapoff -asetenforce 0# 导入镜像docker load -i ../images/images.tarcp ../bin/kube* /usr/bin# Cgroup drivercp ../conf/kubelet.service /etc/systemd/system/mkdir /etc/systemd/system/kubelet.service.d# 获取docker Cgroup driver类型,kubelet systemd配置需要一致cgroupDriver=$(docker info|grep Cg)driver=${cgroupDriver##*: }echo "driver is ${driver}"cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf[Service]Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=${driver}" # 看这里Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"ExecStart=ExecStart=/usr/bin/kubelet \$KUBELET_KUBECONFIG_ARGS \$KUBELET_SYSTEM_PODS_ARGS \$KUBELET_NETWORK_ARGS \$KUBELET_DNS_ARGS \$KUBELET_AUTHZ_ARGS \$KUBELET_CADVISOR_ARGS \$KUBELET_CGROUP_ARGS \$KUBELET_CERTIFICATE_ARGS \$KUBELET_EXTRA_ARGSEOFsystemctl enable kubeletsystemctl enable dockermaster.sh解析# 启动kubeadmkubeadm init --config ../conf/kubeadm.yaml# kubectl配置拷贝mkdir ~/.kubecp /etc/kubernetes/admin.conf ~/.kube/config# 装网络kubectl apply -f ../conf/net/calico.yaml# 去污点,生产环境中最好不去,我是为了heapster能正常启动kubectl taint nodes --all node-role.kubernetes.io/master-# 装heapsterkubectl apply -f ../conf/heapster/kubectl apply -f ../conf/heapster/rbac# 装dashboardkubectl apply -f ../conf/dashboard制作过程下载bin文件我们到github kubernetes下把bin文件下载下来,只需要下载node的bin即可,当然如果你master镜像不好下载也可以下载全部bin如:node bin文件 ...

August 7, 2019 · 1 min · jiezi

定制开发kubernetes流程

kubernetes集群三步安装概述本文介绍如何对kubernetes进行二次开发,仓库如何管理,git分支如何管理,怎样利用CI去编译与发布以及如何给社区贡献代码等,结合实际例子,望对大家有所帮助。 <!--more--> 开发环境构建 Fork把github.com/kubernetes/kubernetes 项目fork到自己的仓库 Clone到本地git clone https://github.com/<your-username>/kubernetes 设置remotegit remote add upstream https://github.com/kubernetes/kubernetes.gitgit remote set-url --push upstream no-pushing注意此时你的本地仓库就有了两个远程仓库,一个叫upstream(社区仓库) 一个叫origin(你fork的) 代码同步当社区仓库代码更新时,我们希望与之同步,那么: git pull upstream master # 先同步到本地git push # push 到origin你修改了代码希望同步给社区,那么PR即可 分支管理 假设我们要定制一个功能,比如我之前做的对kubelet进行lxcfs增强,而我们线上又运行了多个版本的k8s,我们希望这个特性几个版本都可以加上,而且未来k8s发布新版本时同样能merge进去这功能。 要做到这个git里的两个命令非常重要: git cherry-pick 能指定merge特定的变更git rebase 通常我用来合并多个commit, 虽然cherry-pick也支持多个commit,但是多了容易混乱首先从master分支HEAD切出一个分支,我们有所的功能开发在这个分支上进行,如我做了c1 c2两次commit。 然后希望把这个功能merge到2.0版本中,我们先从2.0的tag切一个分支出来,然后在这个分之上去cherry-pick c1 c2即可,非常简单方便,其它版本需要此功能同理。 这里注意,如果不用cherry-pick 直接merge的话,因为2.0版本之后还有很多次变更,会产生大量冲突。 CI编译与发布笔者比较喜欢drone,所以编译与发布都是用的drone,安利个drone免费公有服务非常好用 由于k8s各个版本可能需要的golang版本都不太一样,所以最方便的还是在容器中进行构建,但并不是随便一个golang的镜像都可以进行构建,因为k8s还需要拷贝代码,生成代码等依赖了一些小工具,我这里提供了一个官方的编译镜像:fanux/kube-build:v1.12.1-2发布时用了drone一个非常方便的插件:plugins/github-release, 可以直接把二进制文件放到github的release pages里.drone.yml 长这样: kind: pipelinename: defaultworkspace: base: /go path: src/k8s.io/kubernetes # 要注意工作目录一定要写这个steps:- name: build # 编译,名字随便写 image: fanux/kube-build:v1.12.1-2 environment: GO111MODULE: on # 启动go mod commands: - make generated_files UPDATE_API_KNOWN_VIOLATIONS=true # 这个是一个known api校验,不加编译可能会报错 - KUBE_GIT_TREE_STATE="clean" KUBE_GIT_VERSION=v1.14.0 KUBE_BUILD_PLATFORMS=linux/amd64 make all WHAT=cmd/kubelet GOFLAGS=-v # 几个环境变量特别重要,如不加clean编译出来版本号就会加dirty后缀,需要加版本号不然很多时候无法正常工作,加构建平台,这样无需编译多个bin文件加快编译速度,WHAT里指定需要编译什么代码,大部分情况无需编译有所组件 - ls _output/bin/ # 这里能看到编译后的二进制文件- name: publish image: plugins/github-release settings: api_key: from_secret: git-release-token files: _output/bin/kubelet # 把上一步二进制文件放到release page中 title: ${DRONE_TAG} # 使用你打的tag作为标题 note: Note.md # 指定一个文件说明你release中干了啥 when: event: tag这样提交代码后刷刷抖音等结果即可。。 ...

August 7, 2019 · 1 min · jiezi

实现在docker中安装php拓展

一:php核心拓展包安装 在docker中安装的php有一些核心的拓展包,他们一般放置在/usr/src/php/ext/目录下 如下: docker exec -it php /bin/bash #进入php容器cd /usr/src/php/ext/dir如下展示的就是php的核心拓展包 安装方式: #相关依赖安装apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev#安装mysqlidocker-php-ext-install mysqli安装完成之后按CTRL+D退出容器,然后重启php容器 docker restart php二:安装PECL 扩展 因为一些扩展并不包含在 PHP 源码文件中,所有需要使用 PECL(PHP 的扩展库仓库,通过 PEAR 打包)。用 pecl install 安装扩展,然后再用官方提供的 docker-php-ext-enable 快捷脚本来启用扩展 PECL 扩展下载地址:https://pecl.php.net/ 安装方式: docker exec -it php /bin/bash #进入php容器#相关依赖安装apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-devpecl install swoole-4.2.12 #安装swoole拓展docker-php-ext-enable swoole #启用swoole拓展安装完成之后按CTRL+D退出容器,然后重启php容器 docker restart php

July 16, 2019 · 1 min · jiezi

Docker入门基础之应用实战

Docker入门基础之应用实战当我们掌握了Docker镜像和容器的基本用法后,我们现在能做些什么事情呢?现在我们就来看看使用Docker容器如何安装常见的软件,然后运行一个动态网站。 下面我们来学习: 1、安装Nginx2、安装PHP3、使用MySQL服务4、运行wordpress博客安装Nginx运行一个Alpine的容器,选择Alpine作为系统基础镜像是因为Alpine轻巧的体积,基础镜像只有5.53MB,相比ubuntu镜像的88.9MB要小十几倍。 root@ubuntu:~# docker run -it -p 8080:80 alpine sh安装nginx apk add nginx修改nginx配置 vi /etc/nginx/conf.d/default.confdefault.conf内容如下: server { listen 80 default_server; root /home/www; index index.php index.html; }创建Hello World mkdir /home/www && echo "Hello World" > /home/www/index.html创建/run/nginx目录 mkdir /run/nginx启动nginx nginx在浏览器中访问 http://192.168.43.122:8080 nginx安装成功,WEB服务访问正常! 安装PHP现在我们来安装PHP,方法还是一样,使用 apk add 命令来安装php7,php-fpm以及相关扩展。 apk add --no-cache php7 php7-fpm php7-ftp php7-pdo php7-mysqli php7-simplexml php7-xmlwriter php7-zlib php7-imagick php7-memcached php7-sockets php7-mcrypt php7-zip php7-pgsql php7-pdo_odbc php7-odbc php7-curl php7-iconv php7-xml php7-json php7-gd php7-session php7-opcache php7-pdo_sqlite php7-mbstring php7-common php7-pdo_mysql以上顺带安装了很多php扩展,可根据实际需求增减。 ...

July 16, 2019 · 1 min · jiezi

Docker入门基础之容器使用

Docker入门基础之容器使用Docker简介Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Ubuntu Docker 安装1、Docker官方安装方法Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。获取安装包: root@ubuntu:~# wget -qO- https://get.docker.com/ | sh安装完成后有提示: If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker runoob Remember that you will have to log out and back in for this to take effect! 启动docker服务 ...

July 16, 2019 · 3 min · jiezi

docker安装gitlab

docker安装gitlabGitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了。 下载镜像首先需要先下载 GitLab CE 的镜像,使用下面的命令进行下载,因为文件较大,所以可能需要一点时间,耐心等待即可。# 不加 tag 则默认为最新版本 latest$ docker pull gitlab/gitlab-ce创建目录通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录。mkdir -p /srv/gitlab/configmkdir -p /srv/gitlab/logs mkdir -p /srv/gitlab/data启动运行$ docker run --detach \ --hostname gitlab.example.com \ --publish 8443:443 --publish 8880:80 --publish 8222:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ --privileged=true \ gitlab/gitlab-ce:latest说明: ...

July 16, 2019 · 2 min · jiezi

借助URLOS快速安装swoole环境

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iuswoole环境安装流程登录URLOS系统后台,在应用市场中搜索“swoole”,找到之后,选择合适的版本点击安装按钮 填写服务名称、选择运行节点、服务端口、选择智能部署 填写ssh密码(这里的密码是root密码) 然后点击“提交”按钮,等待部署完成;

July 15, 2019 · 1 min · jiezi

借助URLOS快速安装nodejs环境

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iunodejs环境安装流程登录URLOS系统后台,在应用市场中搜索“nodejs”,找到之后,直接点击安装按钮 填写服务名称、选择运行节点、服务端口、选择智能部署 填写ssh密码(这里的密码是root密码) 然后点击“提交”按钮,等待部署完成;

July 15, 2019 · 1 min · jiezi

借助URLOS快速安装MixPHP201框架

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iuMixPHP安装流程登录URLOS系统后台,在应用市场中搜索“MixPHP”,找到之后,直接点击安装按钮 填写服务名称、选择运行节点、服务端口、选择智能部署 填写网站域名、ssh密码(这里的密码是root密码) 然后点击“提交”按钮,等待部署完成; 访问网站访问:www.aaa.com:8088(这里是自己的域名) 登录sftp网站根目录在 data/www/mix/

July 15, 2019 · 1 min · jiezi

借助URLOS快速安装Netdata主机监控

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iuNetdata主机监控安装流程登录URLOS系统后台,在应用市场中搜索“Netdata”,找到之后,直接点击安装按钮填写服务名称、选择运行节点、选择智能部署填写域名:www.aaa.com(这里填写自己的域名)然后点击“提交”按钮,等待部署完成;

July 15, 2019 · 1 min · jiezi

docker

docker build docker-compose build

July 15, 2019 · 1 min · jiezi

借助URLOS快速安装subversion服务

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iusubversion服务安装流程登录URLOS系统后台,在应用市场中搜索“subversion”,找到之后,直接点击安装按填写服务名称、选择运行节点、服务端口号、选择智能部署填写ssh密码然后点击“提交”按钮,等待部署完成;签出代码库 svn checkout svn://ip/project # 这里的ip是你服务器的ip用户名是:admin密码是:urlos520

July 15, 2019 · 1 min · jiezi

宜信开源漏洞管理平台『洞察』部署指南

『洞察』是一个集成应用系统资产管理、漏洞全生命周期管理、安全知识库管理三位一体的管理平台。 『洞察』使用了Python语言进行开发,利用Flask框架+MySQL+Docker部署实现。 一、部署和启动mysqldocker pull mysql:5.7.13docker run -d -p 127.0.0.1:6606:3306 \--name open_source_mysqldb \-e MYSQL_ROOT_PASSWORD=root \mysql:5.7.13二、创建数据库和账号权限配置$ mysql -h 127.0.0.1 -P 6606 -u root -pEnter password:rootmysql> CREATE DATABASE IF NOT EXISTS vuldb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;mysql> grant all on vuldb.* to vuluser@'%' identified by 'vulpassword';mysql> flush privileges;mysql> quit三、部署和启动APP1、下载源码$ git clone https://github.com/creditease-sec/insight.git2、修改srcpm/config.py 配置文件1)修改公司邮箱后缀 #公司邮箱后缀限制,只能使用公司邮箱注册账号。CORP_MAIL = '@qq.com'2)修改邮件CC抄送列表 #平台发送的每封邮件的邮件抄送列表,可以设置发送给安全部邮箱列表,可自行修改,也可以保持不变为空 ''' 示例: CC_EMAIL = ['xxx1@creditease.cn', 'xxx2@creditease.cn', ] ''' CC_EMAIL = [ ]3)修改开发模式的邮箱服务器和发件邮箱配置 ...

July 15, 2019 · 2 min · jiezi

使用Jenkins构建Docker镜像

准备1.安装Centos7虚拟机2.安装JDK3.安装Git4.安装Maven5.安装Docker (1)使用yum命令进行安装: yum install -y docker -y 表示不询问 使用默认配置进行安装(2)查看是否安装成功 yum list installed | grep docker(3)启动docker systemctl start docker(4)查看是否启动成功 systemctl status docker(5)修改docker国内镜像源 vi /etc/docker/daemon.json修改为下面这样 { "registry-mirrors": ["http://hub-mirror.c.163.com"] }(6)重启docker systemctl restart docker(7)设置docker远程访问 vi /lib/systemd/system/docker.service 添加下面这行 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock安装/配置Jenkins下载Jenkins Jenkins安装有3种方式,下载jenkins.war放在Tomcat的webapp目录下运行、docker安装Jenkins、yum在线安装。使用jenkins.war安装 (1)下载jenkins.war、Tomcat通过xshell上传到虚拟机definesys目录 (2)把jenkins.war复制到tomcat的webapp目录下 (3)java -jar jenkins.war启动Jenkins (4)cat /var/lib/jenkins/secrets/initialAdminPassword查看初始登录密码 (5)登录进去后会一直卡住不动,在$JENKINS_HOME/hudson.model.UpdateCenter.xml文件 中,默认内容如下 <?xml version='1.0' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>http://updates.jenkins-ci.org/update-center.json</url> </site></sites这个地址在外国的服务器,因为墙的原因,下载初始化界面所需插件不了,就一直处于等待状态 把url改为http://mirror.xmission.com/je... (6)登录进去后创建一个用户 (7)提示安装的插件安一安 配置Jenkins 点击系统管理-》系统设置maven配置Gitee配置Docker配置,其中docker host url就是虚拟机的IP,端口就是安装docker时配置docker远程访问的端口。 点击系统管理-》全局工具配置JDK配置 Git配置Maven配置使用创建一个项目 创建一个springboot项目 在项目根目录下创建dockerfile ...

July 15, 2019 · 1 min · jiezi

Nginx-镜像不同端口映射情形时重定向-uri-端口不正确

使用 docker 镜像 nginx:1.17.0-alpine 构建容器。将主机端口 8080 映射到容器的 80 端口,由于采用默认的配置访问目录名不加 / 时,不会返回其中的 index 内容,所以需要额外配置。如下的配置适用于同端口映射的情形,当宿主机的端口和容器的端口不一致时,访问 http://localhost:8080/abc, 则会重定向到 http://localhost/abc/, 这显然不是我们想要的结果。 listen 80; location / { index index.html index.htm; try_files $uri $uri/ =404; }于是我去问搜索引擎,终于找到了此情形下的配置。 location / { index index.html index.htm; } location ~ ^.*[^/]$ { try_files $uri @rewrite; } location @rewrite { return 302 $scheme://$http_host$uri/; }参考 https://serverfault.com/quest...

July 15, 2019 · 1 min · jiezi

Docker-快速部署一个-node-App

Docker 快速部署一个 node App⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅用 Docker 快速部署 node App 需要如下几个步骤: 安装 Docker 和 VSCode Docker 插件(方便操作 Docker)创建 node 应用创建 Dockerfile 并将应用打包成 image事例化 image 创建 Container首先安装 DockerDocker 的安装看官方文档,文档很详细了 https://docs.docker.com/docker-for-mac/install/ 然后安装 Docker 的 VSC 插件,安装这个插件仅仅是为了方便操作 Docker。 安装完毕后打开 Docker 服务执行命令检查是否安装完毕: $ docker -vDocker version 18.09.2, build 6247962最后使用国内的镜像源: https://registry.docker-cn.com 创建 node App我们的目的是要在 nginx 的 Container 中对外暴露一个端口,Container 中是我们打包后的 node App,外部可通过这个端口访问我们的服务。 npm initnpm install -S express安装完成后创建一个简单的 node App: // app.jsconst express = require('express')const url = require('url')const execa = require('execa') const app = express()app.use((req, res, next) => { console.log(url.resolve(req.url)) res.end('hello world')})app.listen(8888, () => { console.log('listening at port: 8888')})创建 Dockerfile然后 VSC 调用 >dockerfile 通过 docker 插件创建一个新的 dockerfile,在选项中选择 node ...

July 15, 2019 · 2 min · jiezi

docker简介

docker简介docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行docker机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 Docker的组成docker Client客户端 Docker Image镜像 Docker Container容器 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器,Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。 mac中Docker安装mac系统安装docker特别简单,去docker官网注册用户,下载镜像Docker.dmg文件双击就可以了。安装完输入命令:docker versiondocker-compose --versiondocker-machine --version出现docker版本就完成了。 docker使用Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。docker run hello-world Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像,docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力docker ps 来查看容器内运行的服务docker logs命令,查看容器内的标准输出docker stop 命令来停止容器docker 命令来查看到 Docker 客户端的所有命令选项。docker rm 命令来删除不需要的容器 docker images 来列出本地主机上的镜像。docker pull 命令来下载这个镜像docker search 命令搜索 httpd 来寻找适合我们的镜像。 hello-world这个镜像下载完成。 使用这个命令nginx服务启动成功! 委婉待续,有问题请留言 个人博客地址 https://blog.ailijie.top/arch...

July 14, 2019 · 1 min · jiezi

借助URLOS快速安装psierp企业管理软件

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iupsi-erp-企业管理软件安装流程登录URLOS系统后台,在应用市场中搜索“redmine”,找到之后,直接点击安装按钮填写服务名称、选择运行节点、选择智能部署填写域名:www.aaa.com(这里填写自己的域名)创建数据库然后点击“提交”按钮,等待部署完成; 初始化数据库 开放数据库的外网访问端口,填写服务端口3306请手动导入mysql数据,文件位置:/www/PSI/psi.sql安装mysql客户端 apt-get install mysql-client或者 yum install mysql-client或者下载gui客户端 在终端用mysql客户端连接数据库: mysql -h 数据库的地址 -P 3306 -u 数据库用户名 -p'密码'切换数据库: use 数据库名导入sql文件: source sql的文件路径登录账户:admin 密码:admin

July 13, 2019 · 1 min · jiezi

kubectl-创建-Pod-背后到底发生了什么

原文链接:kubectl 创建 Pod 背后到底发生了什么?想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run --image=nginx --replicas=3然后回车。几秒钟后,你就会看到三个 nginx pod 分布在所有的工作节点上。这一切就像变魔术一样,但你并不知道这一切的背后究竟发生了什么事情。 Kubernetes 的神奇之处在于:它可以通过用户友好的 API 来处理跨基础架构的 deployments,而背后的复杂性被隐藏在简单的抽象中。但为了充分理解它为我们提供的价值,我们需要理解它的内部原理。 本指南将引导您理解从 client 到 Kubelet 的请求的完整生命周期,必要时会通过源代码来说明背后发生了什么。 这是一份可以在线修改的文档,如果你发现有什么可以改进或重写的,欢迎提供帮助! 1. kubectl验证和生成器当敲下回车键以后,kubectl 首先会执行一些客户端验证操作,以确保不合法的请求(例如,创建不支持的资源或使用格式错误的镜像名称)将会快速失败,也不会发送给 kube-apiserver。通过减少不必要的负载来提高系统性能。 验证通过之后, kubectl 开始将发送给 kube-apiserver 的 HTTP 请求进行封装。kube-apiserver 与 etcd 进行通信,所有尝试访问或更改 Kubernetes 系统状态的请求都会通过 kube-apiserver 进行,kubectl 也不例外。kubectl 使用生成器(generators)来构造 HTTP 请求。生成器是一个用来处理序列化的抽象概念。 通过 kubectl run 不仅可以运行 deployment,还可以通过指定参数 --generator 来部署其他多种资源类型。如果没有指定 --generator 参数的值,kubectl 将会自动判断资源的类型。 例如,带有参数 --restart-policy=Always 的资源将被部署为 Deployment,而带有参数 --restart-policy=Never 的资源将被部署为 Pod。同时 kubectl 也会检查是否需要触发其他操作,例如记录命令(用来进行回滚或审计)。 ...

July 12, 2019 · 7 min · jiezi

docker初战

虽然已经安装了docker很久了,但在以前都没有认真的去学习使用过,只是大概的了解了一下原理就放下不管了,在本周的项目中,潘老师要求我们使用docker来使用数据库,趁此机会,总算是成功的掌握了docker的基本用法。 什么是dockerDocker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。 总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。 上面的解释引自阮一峰的博客,就我的理解来说docker就是一个特别轻量级的虚拟机,然后以端口映射的方式让本机访问它的应用程序,从而避免在本机进行繁琐的开发环境配置。 docker必知必会下面是使用docker过程中必用的一些命令,放到这里当然不是因为他们容易记,而是为了以后方便查阅。 当然要记住下面这些也不难,通过后面的实战示例再加上一两次自己的熟悉基本就能记住了。 docker help 查看帮助,help应该是所有命令行程序最重要的命令了docker pull 从Docker Hub中拉取或者更新指定镜像。docker run -d 标识是让 docker 容器在后台运行。-p 标识通知 Docker 将容器内部使用的网络端口映射到我们使用的主机上。-it 使用交互模式--name 定义一个容器的名字,如果在执行docker run时没有指定Name,那么deamon会自动生成一个随机数字符串当做UUID。-e 设置环境变量,或者覆盖已存在的环境变量。–link 连接运行的容器例如:docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest 含义:容器的名字为mysql,将容器的3306端口映射到本机的3306端口,mysql数据库的密码为password ,运行的镜像为mysql/mysql-server:latest docker ps  -a 查看已经创建的容器-s 查看已经启动的容器docker start con_name 启动容器名为con_name的容器。docker stop con_name 停止容器名为con_name的容器。docker rm con_name 删除容器名为con_name的容器。docker rmi img_name 删除镜像名为img_name的镜像。docker exec -it con_name bash 以bash启动该容器在docker中使用mysql接下来我将会在docker中新建并启动一个mysql容器,然后以本地访问。 拉取官方镜像docker pull mysql:5.7.21创建一个容器并运行docker run --name mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD=test -d mysql:5.7.21容器的名字为mysql,将容器的3306端口映射到本机的3309端口,mysql数据库的密码为test ,容器在后台运行,运行的镜像为mysql:5.7.21查看一下容器的运行状态docker ps ...

July 12, 2019 · 1 min · jiezi

借助URLOS快速安装redmine项目管理软件

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iuredmine项目管理软件安装流程登录URLOS系统后台,在应用市场中搜索“redmine”,找到之后,直接点击安装按钮填写服务名称、选择运行节点、选择智能部署初始化redmine 访问 http://ip:3000(IP是你服务器的ip)初始账户:admin,密码:admin

July 11, 2019 · 1 min · jiezi

在Linux下5分钟安装DzzOffice企业办公套件

如今,越来越多的个人、团队甚至企业都在使用GSuite或者Office365等网络办公套件,为什么人们越来越喜爱使用网络办公套件?一方面是考虑数字资产的安全性以及管理效率,另一方面则是日益增大的协同办公需求。但是,使用这类办公套件成本高且受制于人。于是更多的团队或企业选择自建办公套件平台,低成本,不再受制于人。 自建企业办公套件如何自建企业办公套件?首先我们需要选择一个办公套件程序。本文推荐使用DzzOffice,DzzOffice是一套开源办公套件,适用于企业、团队搭建自己的 类似“Google企业应用套件”、“微软Office365”的企业协同办公平台。 如何自建办公套件平台我们使用的系统环境是Ubuntu18.04,借助URLOS可快速进行DzzOffice的安装部署。 首先,使用以下命令安装URLOS: curl -LO www.urlos.com/siu && sh siu安装完成后,登录URLOS,在应用市场中搜索“DzzOffice”,找到DzzOffice应用后直接点击安装:在【基本信息】中填写服务名称,选择运行节点,端口号:在【网站】中填写域名:在【数据库】中设置数据库密码,然后点击提交即可:DzzOffice部署完成后,在浏览器中访问:点击开始安装:安装完成后立即登录:在DzzOffice应用市场中安装所需要的应用,如网盘、表格、文档、演示文稿等: DzzOffice为自建企业、团队在线办公平台提供了非常方便的途径,让一个团队或企业可以低成本的打造自己的办公分享平台。而URLOS,是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 URLOS与DzzOffice的完美配合,使得更多的企业可以高效的自建办公套件平台。

July 11, 2019 · 1 min · jiezi

docker容器启动后马上退出的问题

一个简单的Dockerfile,目的是运行一个ubuntu容器,安装一些要用到的包FROM ubuntu:18.04ENV TZ UTCRUN apt update \ && apt install -y \ libpython2.7 \ python3-etcd \ postgresql-10 \ patroni \ && apt clean \ && locale-gen en_US.UTF-8docker build -t myubuntu:0.1.0 .docker run -d --name myubuntu myubuntu:0.1.0container启动后马上退出原因:Docker容器后台运行,就必须有一个前台进程。主线程结束,容器会退出。docker run -d --name myubuntu myubuntu:0.1.0 改成 docker run -dit --name myubuntu myubuntu:0.1.0 就行了。

July 11, 2019 · 1 min · jiezi

一套基础自动化部署搭建过程

问题背景公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列code管理以及自动化部署等工具....所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种问题,但最终把基本工具全部搭建成功,耶~,下面带大家一起看下此次搭建过程。 资源服务器一台,CentOS的,公司就给了一台配置较低的服务器当临时服务器,没办法了,就这么搞吧。 思考:如果我用传统的yum来安装,肯定会被我装乱七八糟,还不方便自己管理维护,左右为难的情况下我选择了Dokcer,可能有些小伙伴问Docker是啥怎么用,不要慌这里有传送门:Linux docker-compose 实战、 [进阶篇]docker编排PHP开发坏境测试环境搭建 为了快速搭建一套PHP测试环境我决定用laradock了,虽然文件很多,但是里面封装的东西也是比较全的,后期开发不知道会用到什么技术,就决定先用这个,随时可以启动用得到的服务。 laradock官方文档给的介绍也很全面,我这里采用的方式是部署多套项目方式目录结构如下: + laradock+ project-1+ project-2开始使用:git clone https://github.com/laradock/l...cp env-example .env env 里面的配置可以修改的,可以根据自己情况进行调整docker-compose up -d nginx php-fpm mysql redis 后面可以加上你要启动的程序,像rabbitmq、mongo等等,需要的时候追加在尾部就可以启动,首次启动时间有点长docker-compose exec --user=laradock workspace bash 像laravel等项目肯定少不了composer,执行这个命令进入工作区,就可以执行composer了docker-compose exec nginx nginx -s reload 肯定有人会问我更改了nginx配置是不是每次都要进入nginx容器去重启,或者把整个容器都重启了呀,不用的,执行这个命令就可以重启nginx了。nginx站点配置文件在哪里呢:./laradock/nginx/sites/先运行下试试吧。 GitLab现在运行环境已经搭建好了,我代码应该怎么存放呢,其实有很多的选择,要根据自己的实际情况出发,如:GitHub、码云、GitLab等等,我选择的是GitLab,刚开始没有发现laradock其实提供了GitLab服务。。只能自己折腾了,其实很简单。 docker \run -d \-p 443:443 \-p 8080:80 \-p 222:22 \--name gitlab \--restart always \-v /home/gitlab/config:/etc/gitlab \-v /home/gitlab/logs:/var/log/gitlab \-v /home/gitlab/data:/var/opt/gitlab \gitlab/gitlab-ce#参数解释:#-d:让容器后台运行#-p:暴露端口,把容器的443端口指向到宿主机443端口,宿主机8080->容器80,宿主机222->容器22#宿主机端口可以根据自己的情况自己定制#-name 给你的容器起个名,只要不和现有的重复就可以#--restart 当容器退出时docker是否重启#-v 这就是挂载磁盘了,把宿主机的目录挂载到容器中,这么做哪怕是容器坏了我的内容也不会丢失。#宿主机/home/gitlab/config目录挂载到容器中/etc/gitlab目录,宿主机目录根据自己情况定#gitlab/gitlab-ce 这个就是要启动的镜像,如果镜像不存在,docker会自动下载最新版容器启动成功之后会有一段时间来启动GitLab,看到启动成功立马访问是访问不到的,稍微等一下就可以了,配置文件都在你指定的宿主机目录下可以修改,需要修改的内容如下: gitlab_rails['gitlab_ssh_host'] = '宿主机IP'#宿主机的IP地址 gitlab_rails['gitlab_shell_ssh_port'] = 222#暴露给宿主机的ssh端口 external_url '域名'#分配给gitlab的域名,可以用nginx做反向代理到8080端口Jenkins实现自动化部署有很多种方式如:webhook、Jenkins、Travis CI等等,我的选择是Jenkins,因为之前部署用过所以这里依旧用了这个,laradock依旧提供了Jenkins服务,又是因为没发现自己搭建了一个。。。看来下次要先多看看在动手了。 ...

July 11, 2019 · 1 min · jiezi

借助URLOS快速安装nextcloud网盘

简介nextcloud是一个免费专业的私有云存储网盘开源项目,可以让你简单快速地在个人/公司电脑、服务器等设备上架设一套属于自己或团队专属的云同步网盘,从而实现跨平台跨设备文件同步、共享。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装nextcloud网盘。urlos是什么? URLOS是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 你可以使用以下命令安装URLOS: curl -LO www.urlos.com/iu && sh iu在此不讨论URLOS的使用方法,感兴趣的朋友请自行搜索,我们直接来看URLOS如何快速安装nextcloud网盘: 安装流程1.登录URLOS系统后台,在应用市场中搜索“nextcloud”,找到之后,直接点击安装按钮 2.填写服务名称、选择运行节点、服务端口、选择智能部署 3.填写域名:www.aaa.com(这里填写自己的域名) 4.设置数据库选择自动添加并部署数据库,填写数据库密码;数据库名和数据库用户名跟前面的服务名称一致,这里已经自动设置好; 记下数据库密码、数据库名和数据库用户名,下面要用到; 然后点击“提交”按钮,等待部署完成; 5. nextcloud网盘安装向导

July 11, 2019 · 1 min · jiezi

使用Docker安装Gitlab及相关配置

最近在学习自动化部署的一些内容,自动化部署,涉及到的内容有Docker、Jenkins、Gitlab等内容,今天通过docker玩了一遍gitlab,下面是一些心得 安装GitlabDocker安装服务实在是太方便,我们通过docker来安装Gitlab,运行如下命令查看Gitlab的镜像文件 搜索镜像 sudo docker search gitlab看到镜像有很多,如果OFFICIAL这一项下面是[OK] 表示为官方的镜像,我这里使用第四个,因为这是中文版的,鄙人英语不好,还是看中文版的比较舒服。其实,中文版也就是安装了一个语言包而已,有兴趣可以自己安装第一个,然后再手动配置中文包 下载镜像 sudo docker pull twang2218/gitlab-ce-zh启动服务 docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh查看启动情况 // 添加-a 参数,把启动的,没有启动的都列出来sudo docker ps 配置Gitlab配置的时候,我们需要进入容器当中配置,如果直接修改我们映射到容器外部的配置文件,总会出现一些奇怪的问题,为了避免出现问题,尽量按照如下操作流程进行相关的配置和测试 第一步:进入容器 sudo docker exec -it gitlab bash第二步:修改gitlab.rb文件 sudo cd /etc/gitlabsudo vim gitlab.rb第三步:修改IP和端口 该部分内容的修改是为了解决,我们再gitlab创建项目的时候,项目访问地址是容器id的问题 // 可以使用/ 来查找关键字,找到指定的内容,然后通过n来下一个查找// 在gitlab创建项目时候http地址的host(不用添加端口)external_url 'http://xx.xx.xx.xx'// 在gitlab创建项目时候ssh地址的hostgitlab_rails['gitlab_ssh_host'] = 'xx.xx.xx.xx'(不用添加端口)# docker run 的时候我们把22端口映射为外部的8022了,这里修改下gitlab_rails['gitlab_shell_ssh_port'] = 8022第四步:修改邮箱 ...

July 10, 2019 · 1 min · jiezi

借助URLOS快速安装beego-web框架

简介beego是一个快速开发Go应用的http框架,go 语言方面技术大牛。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装beego。urlos是什么? URLOS是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 你可以使用以下命令安装URLOS: curl -LO www.urlos.com/iu && sh iu在此不讨论URLOS的使用方法,感兴趣的朋友请自行搜索,我们直接来看URLOS如何快速安装beego: 安装流程1.登录URLOS系统后台,在应用市场中搜索“beego”,找到之后,直接点击安装按钮 2.填写服务名称、选择运行节点、服务端口、选择智能部署 3.填写域名:www.aaa.com(这里填写自己的域名) 4.设置SFTP选择“上传与下载”选项卡,开启SFTP上传下载并填写SFTP端口、SFTP密码; 然后点击“提交”按钮,等待部署完成; 部署完成后,网站已经成功跑起来了! 上传网站代码用ssh或者sftp客户端登录。 网站根目录是:/mounts/beego001/data/www/web(由于本次教程的服务名称为beego001,实际操作中根据你填写的服务名称自动创建) 如果要更新网站,上传网站文件到网站根目录后,重新部署一下就好了:

July 10, 2019 · 1 min · jiezi

借助URLOS快速安装WordPress

简介WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。截至2018年4月,排名前1000万的网站超过30.6%使用WordPress。WordPress是最受欢迎的网站内容管理系统。WordPress是当前因特网上最流行的博客系统。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装WordPress。urlos是什么? URLOS是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 你可以使用以下命令安装URLOS: curl -LO www.urlos.com/iu && sh iu在此不讨论URLOS的使用方法,感兴趣的朋友请自行搜索,我们直接来看URLOS如何快速安装WordPress: 安装流程1. 登录URLOS系统后台,在应用市场中搜索“WordPress”,找到之后,直接点击安装按钮 2.填写服务名称、选择运行节点、选择智能部署 3.填写域名:www.aaa.com(这里填写自己的域名) 4.设置数据库 然后点击“提交”按钮,等待部署完成;

July 10, 2019 · 1 min · jiezi

DockerDocker通过Dockerfile将jar包构建成镜像并执行

1.编写Dockerfile文件.# 环境FROM centos# 作者信息MAINTAINER david "986945193@qq.com"# 复制JDK环境COPY jdk1.8.0_191 jdk1.8.0_191# 配置环境变量ENV JAVA_HOME=./jdk1.8.0_191ENV PATH=$JAVA_HOME/bin:$PATHENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar# 拷贝jarCOPY imd_blog_eureka-1.0-SNAPSHOT.jar .ADD imd_blog_eureka-1.0-SNAPSHOT.jar app.jar# 爆漏的端口号#EXPOSE 8080# 执行命令ENTRYPOINT ["java","-jar","/app.jar"]2.将jar包放在Dockerfile文件同一个目录下。执行构建命令docker build -t david/imd_blog .3.然后就可以当做正常的镜像使用。docker start david/imd_blog

July 10, 2019 · 1 min · jiezi

借助URLOS快速安装Gogs

简介Gogs 是一款极易搭建的自助 Git 服务。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装Gogs。urlos是什么? URLOS是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 你可以使用以下命令安装URLOS: curl -LO www.urlos.com/iu && sh iu在此不讨论URLOS的使用方法,感兴趣的朋友请自行搜索,我们直接来看URLOS如何快速安装Gogs: 安装流程1.登录URLOS系统后台,在应用市场中搜索“Gogs”,找到之后,直接点击安装按钮 2.填写服务名称、选择运行节点、服务端口、选择智能部署 3.填写域名:www.aaa.com(这里填写自己的域名) 然后点击“提交”按钮,等待部署完成; 4.创建数据库应用市场中搜索“mysql”,安装mysql-5.6: 填写如下: 点击“提交”后等待mysql-5.6部署完成; 在服务列表里找到刚刚安装成功的mysql,选择”管理数据库“ 点击右上角的添加数据库 填写如下: 5. Gogs初始化向导访问在第3步中填写的域名:www.aaa.com。 点击“立即安装”。 安装成功后,注册一个帐户并登录:

July 10, 2019 · 1 min · jiezi

你确定你会写-Dockerfile-吗

原文链接:你确定你会写 Dockerfile 吗?如今 GitHub 仓库中已经包含了成千上万的 Dockerfile,但并不是所有的 Dockerfile 都是高效的。本文将从五个方面来介绍 Dockerfile 的最佳实践,以此来帮助大家编写更优雅的 Dockerfile。如果你是 Docker 的初学者,恭喜你,这篇文章就是为你准备的。后面的系列将会更加深入,敬请期待! 本文使用一个基于 Maven 的 Java 项目作为示例,然后不断改进 Dockerfile 的写法,直到最后写出一个最优雅的 Dockerfile。中间的所有步骤都是为了说明某一方面的最佳实践。1. 减少构建时间一个开发周期包括构建 Docker 镜像,更改代码,然后重新构建 Docker 镜像。在构建镜像的过程中,如果能够利用缓存,可以减少不必要的重复构建步骤。 构建顺序影响缓存的利用率 镜像的构建顺序很重要,当你向 Dockerfile 中添加文件,或者修改其中的某一行时,那一部分的缓存就会失效,该缓存的后续步骤都会中断,需要重新构建。所以优化缓存的最佳方法是把不需要经常更改的行放到最前面,更改最频繁的行放到最后面。 只拷贝需要的文件,防止缓存溢出 当拷贝文件到镜像中时,尽量只拷贝需要的文件,切忌使用 COPY . 指令拷贝整个目录。如果被拷贝的文件内容发生了更改,缓存就会被破坏。在上面的示例中,镜像中只需要构建好的 jar 包,因此只需要拷贝这个文件就行了,这样即使其他不相关的文件发生了更改也不会影响缓存。 最小化可缓存的执行层 每一个 RUN 指令都会被看作是可缓存的执行单元。太多的 RUN 指令会增加镜像的层数,增大镜像体积,而将所有的命令都放到同一个 RUN 指令中又会破坏缓存,从而延缓开发周期。当使用包管理器安装软件时,一般都会先更新软件索引信息,然后再安装软件。推荐将更新索引和安装软件放在同一个 RUN 指令中,这样可以形成一个可缓存的执行单元,否则你可能会安装旧的软件包。 2. 减小镜像体积镜像的体积很重要,因为镜像越小,部署的速度更快,攻击范围越小。 删除不必要依赖 删除不必要的依赖,不要安装调试工具。如果实在需要调试工具,可以在容器运行之后再安装。某些包管理工具(如 apt)除了安装用户指定的包之外,还会安装推荐的包,这会无缘无故增加镜像的体积。apt 可以通过添加参数 -–no-install-recommends 来确保不会安装不需要的依赖项。如果确实需要某些依赖项,请在后面手动添加。 删除包管理工具的缓存 包管理工具会维护自己的缓存,这些缓存会保留在镜像文件中,推荐的处理方法是在每一个 RUN 指令的末尾删除缓存。如果你在下一条指令中删除缓存,不会减小镜像的体积。 当然了,还有其他更高级的方法可以用来减小镜像体积,如下文将会介绍的多阶段构建。接下来我们将探讨如何优化 Dockerfile 的可维护性、安全性和可重复性。 3. 可维护性尽量使用官方镜像 使用官方镜像可以节省大量的维护时间,因为官方镜像的所有安装步骤都使用了最佳实践。如果你有多个项目,可以共享这些镜像层,因为他们都可以使用相同的基础镜像。 使用更具体的标签 ...

July 10, 2019 · 1 min · jiezi

Docker-容器内无法通过-HTTP-访问外网

现象内/外网 IP 和 域名 可以 ping 通容器内无法访问宿主机所在内网及外网的 Web 服务(404)通过 curl 查看返回头信息感觉是所有 Web 请求被中转到一个固定的 Nginx 服务器所有容器(包括新创建的)均出现以上问题分析通过 docker run --net host 创建的容器不存在上述的问题docker run 默认使用 bridge 桥接网络,初步判断是 bridge 设置问题通过 自定义网桥 也未解决问题最终怀疑是宿主机上的桥接网卡 docker0 的问题解决通过重建 docker0 网络解决问题 $ sudo service docker stop$ sudo pkill docker$ sudo iptables -t nat -F$ sudo ifconfig docker0 down$ sudo brctl delbr docker0$ sudo service docker start其实最终也没有确定问题所在,只是暂时解决了问题。

July 8, 2019 · 1 min · jiezi