关于docker:44-容器之间的link

应用--link来连贯容器https://docs.docker.com/netwo...Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link. One feature that user-defined networks do not support that you can do with --link is sharing environmental variables between containers. However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way. ...

March 14, 2021 · 2 min · jiezi

关于docker:43-Docker-bridge0详解

查看虚拟机运行状态为了演示更清晰直观,临时先移除了test2容器 docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES5b567458c87cbusybox"/bin/sh -c 'while t…"14 minutes agoUp 14 minutes test1查看虚拟机网络列表ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0       valid_lft 73497sec preferred_lft 73497sec    inet6 fe80::5054:ff:fec9:c704/64 scope link       valid_lft forever preferred_lft forever3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 08:00:27:33:6b:20 brd ff:ff:ff:ff:ff:ff    inet 192.168.205.10/24 brd 192.168.205.255 scope global noprefixroute eth1       valid_lft forever preferred_lft forever    inet6 fe80::a00:27ff:fe33:6b20/64 scope link       valid_lft forever preferred_lft forever4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default    link/ether 02:42:95:c8:4d:58 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever    inet6 fe80::42:95ff:fec8:4d58/64 scope link       valid_lft forever preferred_lft forever6: veth1a9acfd@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default    link/ether 06:ab:10:71:43:7c brd ff:ff:ff:ff:ff:ff link-netnsid 0    inet6 fe80::4ab:10ff:fe71:437c/64 scope link       valid_lft forever preferred_lft forever查看容器网络列表docker network ls ...

March 14, 2021 · 2 min · jiezi

关于docker:42-Linux网络命名空间

在4.1环境搭建的根底上,进行如下试验 进入docker-node1虚拟机vagrant ssh docker-node1查看docker-node1虚拟机网络应用ip a命令进行查看 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0 valid_lft 75148sec preferred_lft 75148sec inet6 fe80::5054:ff:fec9:c704/64 scope link valid_lft forever preferred_lft forever3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:33:6b:20 brd ff:ff:ff:ff:ff:ff inet 192.168.205.10/24 brd 192.168.205.255 scope global noprefixroute eth1 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe33:6b20/64 scope link valid_lft forever preferred_lft forever4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:95:c8:4d:58 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:95ff:fec8:4d58/64 scope link valid_lft forever preferred_lft forever6: veth1a9acfd@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 06:ab:10:71:43:7c brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::4ab:10ff:fe71:437c/64 scope link valid_lft forever preferred_lft forever8: veth1b83279@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether f2:a0:70:bf:e7:c2 brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::f0a0:70ff:febf:e7c2/64 scope link valid_lft forever preferred_lft forever在docker-node1上创立两个docker容器docker pull busyboxdocker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"docker run -d --name test2 busybox /bin/sh -c "while true;do sleep 3600;done"应用docker ps查看虚拟机运行状态 ...

March 14, 2021 · 2 min · jiezi

关于docker:41-Docker网络之搭建实验环境

搭建两台虚拟机,这两台虚拟机能够相互ping通,也可能与宿主机相互ping通。Vagrantfile的配置如下: # -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.require_version ">= 1.6.0"boxes = [ { :name => "docker-node1", :eth1 => "192.168.205.10", :mem => "1024", :cpu => "1" }, { :name => "docker-node2", :eth1 => "192.168.205.11", :mem => "1024", :cpu => "1" }]Vagrant.configure(2) do |config| config.vm.box = "centos/7" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end config.vm.synced_folder "./labs", "/home/vagrant/labs", :nfs => true config.vm.provision "shell", privileged: true, path: "./setup.sh"end其中,setup.sh的内容如下 ...

March 14, 2021 · 1 min · jiezi

关于docker:39-容器的资源限制

应用 docker run --help能够查看可能对容器的哪些资源进行限度 # 如下命令限度容器的可用内存为200M# docker默认状况下,还会为容器调配等同大小的虚拟内存,所以加起来就是400M了# 运行stress压测工具,发现400M以下能够失常运行,400M以上就会运行失败了sudo docker run -it --memory 200M ubuntu-stress-tool -m 1 --vm-bytes 410M --verbose

March 14, 2021 · 1 min · jiezi

关于docker:38-Dockerfile实战2

应用Dockfile构建一个命令行工具容器,能够灵便接管各种各样的参数 创立DockerfileENTRYPOINT 用于启动时运行,CMD [] 用于接管参数。 FROM ubuntuRUN apt-get update && apt-get install -y stressENTRYPOINT ["/usr/bin/stress"]CMD []编译镜像docker build -t ubuntu-stress-tool .调用容器docker run ubuntu-stress-tool --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

March 14, 2021 · 1 min · jiezi

关于docker:37-容器的操作

创立# --name 指定容器名称# -d 指定容器当前台服务模式运行# -p 指定端口映射docker run --name web_server -d -p 80:80 nginx# 基于镜像创立一个centos容器,并和容器进行交互docker run -it centos进行docker stop $container_id删除如果没有应用 -v 选项,并不会删除 volumes 数据docker rm $container_id# 删除所有已退出的镜像docker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker stopdocker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker rm查看# 查看正在运行的容器docker container ls # 查看所有容器docker container ls -adocker ps -a# 查看容器的状态信息docker inspect $container_id交互创立一个交互shelldocker exec -it $container_id /bin/bash不创立交互shell,间接执行命令docker exec -it $container_id ip a日志# 特定容器的日志内容docker logs --tail 100 $container_id# 查看所有容器的日志列表find /var/lib/docker/containers/ -type f -name "*.log" -exec du -sh {} \;# 清空所有容器的日志内容find /var/lib/docker/containers/ -type f -name "*.log" -exec truncate -s 0 {} \;# 清空所有容器的日志内容【如下命令不行,不分明是不是echo前面跟箭头导致的】find /var/lib/docker/containers/ -type f -name "*.log" -exec echo > {} \;导出docker export 与 save 的区别: ...

March 14, 2021 · 1 min · jiezi

关于docker:36-Dockerfile实战

搭建一个Flask应用程序Flask http://flask.pocoo.org/1. 编写Flask代码app.py from flask import Flaskapp = Flask(__name__)@app.route("/")def hello(): return "Hello World!"2. 创立Dockerfile文件# 应用网易蜂巢镜像源来减速下载FROM hub.c.163.com/library/python:3.6# 装置Flask模块RUN pip3 install Flask# 复制本地的利用程序代码文件到容器COPY app.py /app/# 对外裸露一个5000的端口。# 只管有裸露端口,但如果宿主机没有建设宿主机与容器的端口映射,`curl http://127.0.0.1:5000`也是拜访不了的EXPOSE 5000# 容器启动的时候执行的命令ENTRYPOINT FLASK_APP=/app/app.py flask run3. 编译镜像并创立容器来运行# 编译镜像docker build -t siguoya/flask-hello-world .# 作为后台程序来运行docker run -d siguoya/flask-hello-world

March 14, 2021 · 1 min · jiezi

关于docker:35-镜像的发布

1. 本机build image,而后push登陆Docker docker login公布镜像 docker push siguoya/hello-world删除本地、从服务器下载 docker rmi siguoya/hello-worlddocker pull siguoya/hello-world2. 本机push Dockerfile,应用hook交由Docker Store来Buildhttps://hub.docker.com/add/automated-build/siguoya/搭建公有的docker hubhttps://hub.docker.com/_/registry/# 一条命令搞定搭建docker run -d -p 5000:5000 --restart always --name registry registry:2# 立刻应用docker pull ubuntudocker tag ubuntu localhost:5000/ubuntudocker push localhost:5000/ubuntu应用API来治理Registryhttps://docs.docker.com/registry/spec/api/

March 14, 2021 · 1 min · jiezi

关于docker:34-RUN-vs-CMD-vs-Entrypoint

CMD设置容器启动后默认执行的命令和参数如果docker run 指定了其余命令,CMD命令能够被疏忽如果定义了多个CMD,只有最初一个会执行RUN执行命令并创立新的Image Layer ENTRYPOINT设置容器启动时运行的命令适宜让容器以应用程序或者后盾服务的模式来运行不会被疏忽,肯定会执行应用shell格调 # 输入的后果为 Hello DockerFROM centosENV name DockerENTRYPOINT echo "Hello $name"应用exec格调 # 输入的后果为 Hello $nameFROM centosENV name DockerENTRYPOINT ["echo","Hello $name"]# 输入的后果为 Hello DockerFROM centosENV name DockerENTRYPOINT ["sh","-c","echo Hello $name"]

March 14, 2021 · 1 min · jiezi

关于docker:33-Dockerfile语法梳理及最佳实践

https://docs.docker.com/engin...FROM# 制作base image,scratch是关键字FROM scratch# 应用base imageFROM centos# 应用特定版本的base imageFROM centos:7尽量应用官网的image作为base image,起因就是稳固平安LABELLABEL的作用就是定义镜像的metadata LABEL maintainer="924714558@qq.com"LABEL version="1.0"LABEL description="This is description"RUN用于执行shell命令,并创立新的Image Layer RUN yum updateWORKDIR相当于cd命令,WORKDIR 最好应用绝对路径,省得浏览艰难 # 如果没有就会主动创立test目录WORKDIR /testWORKDIR demo# 输入后果应该是/test/demoRUN pwdADD 和 COPYCOPY 和 ADD 用于将本地文件增加到镜像中去,大部分状况,COPY优先于ADD。此外,ADD还能够对压缩包文件进行主动解压 ADD test.tar.gz /ENVENV用于设置常量,能够减少配置的可维护性 ENV NAME siguoyaRUN echo ${NAME}

March 14, 2021 · 1 min · jiezi

关于docker:32-Diy一个Base-Image

1. Hello World Image 应用示例# 查看镜像列表docker image lsdocker images# 装置镜像docker pull hello-world# 启动镜像docker run hello-world# 删除镜像docker image remove $image_iddocker rmi $image_iddocker run -it选项的益处就是能够在与容器互动完结之后,可能应用ctrl c顺利地退出交互2. 编写hello docker编写c程序 #include <stdio.h>int main(){ printf("hello docker\n");}编译c程序 gcc hello.c -o hello编辑Dockerfile # FROM scratch示意不依赖任何镜像FROM scratch# 增加文件到/目录ADD hello /# 执行命令CMD ["/hello"]从.目录查找Dockerfile,生成镜像 docker image build -t siguoya/hello-world .#或docker build -t siguoya/hello-world .基于镜像,主动创立一个容器并运行Dockerfile中的CMD docker run siguoya/hello-world查看镜像的构建历史 docker history siguoya/hello-world

March 14, 2021 · 1 min · jiezi

关于docker-images:31-Docker-Image概述

获取镜像Docker Store官网base镜像源 https://store.docker.com/search?category=base&source=verified&type=image网易蜂巢镜像源 https://c.163yun.com/hub阿里云镜像源 https://dev.aliyun.com/search.htmldocker加速器 https://www.daocloud.io/mirror生成镜像能够在对容器进行批改之后,提交更改,从而生成一个新的镜像 docker commit 259b310e11e8 siguoya/centos-vim然而这种构建镜像的形式并不举荐: 即便应用docker history也很难看到在零碎中做了哪些批改,这可能会导致未知的平安问题和他人替换镜像的时候,传输的文件很大因而应用Dockerfile是比拟好的操作形式 docker build -t medical-api:2.0.0 . 当docker build卡住的时候,咱们能够通过docker run 特定步骤生成的镜像的ID进行调试。例如 76e637f41c70 这个镜像ID,就是第7步操作的镜像了 Step 7/8 : EXPOSE 5000 ---> Running in 76e637f41c70Removing intermediate container 76e637f41c70 ---> 5ee69e2a769bStep 8/8 : CMD ["npm", "start"] ---> Running in bbaa15d00d50Removing intermediate container bbaa15d00d50docker build 的缓存机制:http://open.daocloud.io/docke... 删除# 删除所有<none>镜像。build过程,每一步都会生成缓存,如果build失败,就会产生<none>镜像docker images | grep none | awk '{print $3 }' | xargs docker rmi

March 14, 2021 · 1 min · jiezi

关于docker:26-Docker-Playground

一个在线版的docker学习测试环境:https://labs.play-with-docker.com/

March 14, 2021 · 1 min · jiezi

关于docker:25-Docker-Machine在阿里云上的使用

官网反对的云服务提供商 https://docs.docker.com/machine/drivers/ 第三方插件反对的云服务提供商 https://github.com/docker/docker.github.io/blob/master/machine/AVAILABLE_DRIVER_PLUGINS.md 在阿里云上应用装置文档 https://github.com/AliyunContainerService/docker-machine-driver-aliyunecs1. 查看所有的docker-machine driverls -al /usr/local/bin/docker-machine-driver*2. 下载docker-machine driverhttps://docker-machine-drivers.oss-cn-beijing.aliyuncs.com/docker-machine-driver-aliyunecs_darwin-amd64.tgzmv /path/to/docker-machine-driver-aliyunecs.darwin-amd64 /usr/local/binmv /usr/local/bin/docker-machine-driver-aliyunecs.darwin-amd64 /usr/local/bin/docker-machine-driver-aliyunecs3. 查看阿里云driver可用命令docker-machine create -d aliyunecs --help4. 创立容器docker-machine create -d aliyunecs --aliyunecs-access-key-id=$key --aliyunecs-access-key-secret=$secret $instance_id

March 14, 2021 · 1 min · jiezi

关于docker:24-Docker-Machine的本地使用

docker-machine基于含有操作系统+docker的镜像,咱们既能够通过命令行在本地主动搭建docker开发环境,也能够在云上主动搭建docker开发环境 #运行胜利之后,同样能够通过VirtualBox来查看docker-machine create demo查看容器列表 docker-machine lsNAMEACTIVEDRIVERSTATEURLSWARMDOCKERERRORSdemo-virtualboxRunningtcp://192.168.99.100:2376 v18.05.0-ce 进入容器 docker-machine ssh demoCLI列表 docker-machine

March 14, 2021 · 1 min · jiezi

关于docker:21-在Mac系统上安装Docker

1. 下载地址https://store.docker.com/editions/community/docker-ce-desktop-mac 2. 查看版本# docker --version 能执行胜利,只能阐明客户端运行失常docker --versionDocker version 18.03.1-ce, build 9ee9f40# docker ps -a 能执行胜利,能力阐明docker server启动胜利docker ps -a3. 其余装置Kitematic:图形化界面,治理docker容器。点击docker的菜单-抉择Kitematic即可装置,或拜访:https://download.docker.com/kitematic/Kitematic-Mac.zip

March 14, 2021 · 1 min · jiezi

关于docker:Dockerdocker环境搭建dockercompose环境搭建

一、docker环境搭建1.docker装置 # 更新yum源yum update -y#装置dockeryum list installed | grep dockeryum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum makecache fastyum install -y docker-ce-18.09.6-3.el7 docker-ce-cli-18.09.6-3.el7 containerd.io-1.2.0-3.el7systemctl start dockersystemctl enable docker //开机自启动2.docker降级docker 降级 镜像下载地址 #下载docker-ce-XXXwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.6-3.el7.x86_64.rpm# 降级docker-ceyum -y upgrade ./docker-ce-18.09.6-3.el7.x86_64.rpm# 装置docker-ceyum install ./docker-ce-18.09.6-3.el7.x86_64.rpm3.docker移除 yum list installed | grep dockeryum -y remove docker-engine.x86_64rm -rf /var/lib/docker二、docker-compose环境搭建1.装置docker-compose curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose## 可能会报错,curl: (35) Peer reports incompatible or unsupported protocol version. 执行 yum update -y nss curl libcurlchmod +x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version2.docker-compose启动 ...

March 12, 2021 · 1 min · jiezi

关于docker:Docker关于docker容器之间的连通性及容器与宿主机之间的连通性

一、容器与宿主机之间的连通性查看宿主机防火墙状态 如果能够敞开宿主机防火墙即可通信。 如果不能敞开防火墙,可凋谢宿主机相干接口,及容许拜访id 留神:凋谢ip肯定是容器在宿主机上的虚构ip,而不是宿主机的ip地址 #通过命令查看宿主机下容器的虚构网络ipip a# 查看宿主机防火墙对外开放的ip及端口cat /etc/firewalld/zones/public.xml# 以root身份进入容器docker exec -it -u root 61da8089ca0a /bin/sh# 查看是否能够通信ping 宿主机ip#从新加载防火墙firewall-cmd --reload问题1【Docker】启动container的时候呈现iptables: No chain/target/match by that name #具体错误信息Error response from daemon: driver failed programming external connectivity on endpoint jenkins (a8ea15bf9b3dbed599d059d638f79f9dd5e875556c39bfb41e6563d3feedb81b): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.18.0.6:50000 ! -i br-031aa3930383: iptables: No chain/target/match by that name.谬误是因为网关重新启动了,导致docker network无奈对新container进行网络配置,也就是没有网管的操作权限,做重启解决解决形式:重启docker service docker restart# 或systemctl restart docker二、容器之间的连通性(同一宿主机)容器之间联通,次要是将须要互通的容器放到同一网络内即可1.通过docker间接启动的容器 ...

March 12, 2021 · 1 min · jiezi

关于docker:docker-中配置-eureka

eureka:1. 构建 jdk 镜像启动 eureka 容器筹备jdk文件夹和所有须要的文件 mkdir ~/jdkcd ~/jdk# 上传 jdk 压缩文件到 /root/jdk/ 目录# 课前材料/docker/tomcat7/jdk....gz# 创立Dockerfilevim Dockerfile 复制上面内容java -jar a.jar --server.port=80 --spring.profiles.active=a FROM centos:7ADD jdk-8u212-linux-x64.tar.gz /opt/ENV JAVA_HOME=/opt/jdk1.8.0_212 PATH=/opt/jdk1.8.0_212/bin:$PATHENTRYPOINT bash构建: docker build -t jdk:8 . docker images 2. 构建 eureka 镜像筹备eureka文件夹 mkdir ~/eurekacd ~/eureka 上传 eureka 的jar文件到 /root/eureka 目录课前材料/DevOps课前材料/Kubernetes/K8s案例/v2/eureka/eureka....jar 创立 Dockerfile vim Dockerfile复制上面内容到Dockerfile中 FROM jdk:8COPY sp05-eureka-0.0.1-SNAPSHOT.jar /opt/ENTRYPOINT ["java", "-jar", "/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"]CMD ["--spring.profiles.active=eureka1", "--server.port=2001"] 执行构建: docker build -t eureka:v1 .docker images 如果之前有有eureka容器,先清理: ...

March 11, 2021 · 1 min · jiezi

关于docker:dockercompose

docker-compose https://docs.docker.com/compose/ 两个重要概念:服务(service): 一个利用的容器,实际上能够蕴含若干运行雷同镜像的容器实例 我的项目(project): 一组关联的利用容器组成的一个残缺业务单元,在docker-compose.yml文件定义 =====pre=====install docker vi /etc/sysctl.conf net.ipv4.ip_forward = 1 =====install=====curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-compose /usr/bin/docker-compose$ docker-compose --version project haproxy_web haproxy and three web tree haproxy_web<result>haproxy_web├── docker-compose.yml├── haproxy│   └── haproxy.cfg└── web ├── Dockerfile├── index.html└── index.py</result> mkdir /project_home/haproxy_webmkdir /project_home/haproxy_web/haproxymkdir /project_home/haproxy_web/web =====web=====cd /project_home/haproxy_web/web vi DockerfileFROM python:2.7WORKDIR /codeADD . /codeEXPOSE 80CMD python index.py touch index.html vi index.py !/usr/bin/env pythonimport sysimport BaseHTTPServerfrom SimpleHTTPServer import SimpleHTTPRequestHandlerimport socketimport fcntlimport structimport picklefrom datetime import datetimefrom collections import OrderedDict ...

March 9, 2021 · 2 min · jiezi

关于docker:为DevOps团队新春送福-JFrog与Docker建立突破性的合作伙伴关系

一、新春送福值此新春佳节将近之际,JFrog为宽广DevOps团队奉上新春福利:咱们发表一项可能为咱们的客户和整个DevOps社区带来实质性收益的重大动作,那就是,JFrog与Docker建设开创性的合作伙伴关系,使JFrog DevOps平台的云用户免于Docker Hub的镜像拉取的速度限制。 该协定进一步推动了JFrog充满活力的合作伙伴生态系统。该生态系统建设在“宽泛单干从而防止失败”的准则之上,而该准则是JFrog自成立以来的倒退基石。咱们的首要任务是流水线化、自动化并简化DevOps团队的工作形式,并且谋求像这次与Docker-这样的合作伙伴关系,这始终是JFrog的外围价值。 该合作伙伴关系的第一个里程碑是为应用云平台的JFrog Artifactory(咱们的通用软件制品治理解决方案)的开发人员提供对Docker Hub和Docker官网镜像的无限度、高性能的拜访权限,以简化云原生应用程序的开发。 通过这种单干关系,JFrog和Docker将交付: · 应用容器时的最佳、无可比拟的开发人员体验 · 抉择工具集时的自在和灵活性 · 反对独特客户的专用渠道 · 企业级的可靠性和性能,以流水线化云原生应用程序的交付 二、背景回顾去年,Docker发表了对从Docker Hub提取的容器镜像的基于生产的新政策。具体来说,匿名收费用户限度为每六小时100次拉取,而通过身份验证的收费用户限度为每六小时200次拉取。 包含财产百强企业在内的数千家企业中的数百万用户在JFrog Artifactory中托管和治理其软件制品和容器镜像。这些JFrog客户常常会同步托管在Docker Hub上的容器镜像。新规出台之后,咱们立即确保咱们的客户可能理解这些新政策,并以各种形式与他们进行沟通,以解释变更的含意。 具体来说,对于依赖Docker Hub作为Docker镜像核心的组织,新政策可能会影响企业DevOps团队的生产力,咱们也同时介绍了能够利用JFrog Artifactory来帮忙企业管制老本的办法。 三、使所有变得更好然而,咱们还想走得更远,打消客户可能遇到的任何摩擦,确保JFrog Platform的云端用户(包含应用AWS、GCP和Azure上提供的收费订阅用户)不会面临Docker Hub镜像拉限度。这就是建设这次单干关系的指标。 从更高的视角来看,这升高了组织的业务危险。因为如果短少用于要害生产应用程序的牢靠软件制品源,会使您的业务陷入困境。而通过为您提供对所需的Docker Hub镜像的不受限制的拜访,该协定可避免构建和生产环境中断,并提供业务的连续性,保障交付的速度和效率。 让咱们通过钻研两个要害用例,更具体地理解这种单干关系如何为咱们的客户扭转游戏规则。 3.1 JFrog Artifactory作为Docker Hub的拉取缓存通过利用JFrog Artifactory作为本地镜像缓存,再加上有限的Docker Hub拜访,企业开发人员将取得各种益处,包含: · 进步开发人员的生产力。通过将JFrog Artifactory站为本地容器缓存,而不受Docker Hub的限度,企业开发人员将取得对镜像更快、更灵活的拜访; · 优化IT资源的应用。通过在JFrog Artifactory上本地缓存Docker镜像,缩小了开发人员网络上的内部流量,从而升高了公司的带宽耗费。此外,它加重了Docker Hub的基础架构累赘,这使整个DevOps社区受害; · 加强了代码的安全性。通过利用咱们的破绽扫描工具JFrog Xray,开发人员能够间断、全面地扫描从Docker Hub提取的镜像。与JFrog Artifactory本地集成的JFrog Xray能够检测镜像、容器和其他软件制品中的安全漏洞和许可证合规性问题,从而使组织能够通过向开发人员提供工具来尽早并继续采取纠正措施,以实现DevOps当中的“左移”。 3.2 JFrog Artifactory作为企业级Docker镜像核心应用JFrog Artifactory作为企业级的Docker镜像核心,您将取得以下各种劣势: · 可靠性和可扩展性。对于进行继续交付并具备大量生产部署的企业而言,这使它们具备从Docker Hub提取要害镜像的高可用性,以及用于散发二进制文件的牢靠且可反复的零碎; · 增强生产安全性。借助JFrog Artifactory和JFrog Xray,您能够在整个DevOps流水线(包含生产)中高深莫测地查看软件制品的安全漏洞和开源许可证合规性的问题; · 全面的可见性和可控的视角。JFrog使您可能跟踪所有软件制品和镜像的安全性和合规性,因而您能够疾速采取适当的措施,确保应用程序的安全性和完整性,并满足外部和内部的审核要求。 四、总结Docker Hub推出了对拉取申请的限速策略,而JFrog通过与Docker建设突破性的合作伙伴关系,为应用JFrog Artifactory云平台的开发人员提供对Docker Hub和Docker官网镜像的无限度、高性能的拜访权限。 然而,当然不仅仅是私有云客户。只管JFrog SaaS用户将享受所有合作伙伴关系带来的益处,但JFrog还将间接在Platform UI中帮助咱们的公有部署客户,提供无关间接通过Docker Hub进行身份验证的告诉和阐明,以防止任何匿名用户限度。 ...

February 26, 2021 · 1 min · jiezi

关于docker:docker杂记

参考链接:http://www.dockerinfo.net/doc...Docker 我的项目的指标是实现轻量级的操作系统虚拟化解决方案。 Docker 的根底是 Linux 容器(LXC)等技术。 Docker 和传统虚拟化形式的不同之处,可见容器是在操作系统层面上实现虚拟化,间接复用本地主机的操作系统,而传统形式则是在硬件层面实现。

February 25, 2021 · 1 min · jiezi

关于docker:docker核心技术原理和应用

本课程通过对Docker核心技术的解说以及利用Docker搭建单主机ELK零碎实战我的项目的演示,使你把握Docker的各个外围组件、性能及其原理,把握Docker的个性,并能够相熟利用Docker。 Docker网络1.Docker网络管理阶段课程简介2.理解Docker的网络管理Docker有五种网络驱动模式bridge network 模式(网桥):默认的网络模式。相似虚拟机的nat模式host network 模式(主机):容器与宿主机之间的网络无隔离,即容器间接应用宿主机网络None network 模式:容器禁用所有网络。Overlay network 模式(笼罩网络): 利用VXLAN实现的bridge模式Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设施 3.Docker网络管理之网络查看4.Docker网络管理之网络创立5.Docker网络管理之网络删除6.Docker网络管理之网络详细信息查看7.Docker网络管理之网络应用8.Docker网络管理之网络连接与断开bridge能够连贯,并且连贯多个host不能断开和连贯null能够断开和连贯Macvlan 容器同样能够连贯多个,也能够与bridge混合Overlay网络不能断开和连贯 9.Docker网络模式之网络模式简介10.Docker网络模式之bridge网络原理11.Docker网络模式之定制bridge网络12.Docker网络模式之bridge网络的端口映射13.Docker网络模式之host网络模式原理14.Docker网络模式之Container网络模式原理15.Docker网络模式之none网络介绍16.Docker网络模式之overlay网络简介17.Docker网络模式之TCP、IP协定栈工作流程理解18.Docker网络模式之overlay网络模式实现原理19.Docker网络模式之overlay网络的利用场景20.Docker网络模式之macvlan网络模式原理21.Docker网络管理阶段总结

February 25, 2021 · 1 min · jiezi

关于docker:docker-安装

装置Dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 应用国内daocloud装置 curl -sSL https://get.daocloud.io/docker | sh一段时间之后 docker 装置倡议切换的root用户 su root 装置docker-compose参考地址 从github上下载比较慢,也能够应用daocloud,速度比拟快 curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

February 24, 2021 · 1 min · jiezi

关于docker:docker入门到熟练

Docker的装置Docker的数据卷数据卷的挂载多个容器能够挂载到一个数据卷中,间接的实现容器间的通信一个容器挂载一个目录一个容器能够挂载多个目录查看容器的挂载信息 docker inspect (container_name | grep Mounts -A 20)docker inspect (container_id | grep Mounts -A 20)

February 23, 2021 · 1 min · jiezi

关于docker:关于容器化以及-k8s-的一点个人思考

本文均为集体工作中的一些了解,可能存在纰漏、忽略、认知谬误的中央,敬请体谅,欢送评论区探讨。 1、序一般来说,如果说要做容器化,那就是两个方向,docker swarm或者k8s,前者复杂度低一些,易于从docker-compose转换。后者功能完善,然而学习和保护难度很高。 集体认为,如果打算做容器化,目前简直没有什么理由去抉择swarm了。除了ConfigMap、Secret,或者Ingress,k8s好用的性能还有不少,swarm简直没有什么劣势。不过如果是打算将零散的docker-compose部署的服务疾速聚合起来,对立治理,那swarm 还是能够一用的。然而我这里为什么要独自把 容器化 和 k8s 离开说呢?因为目前所在的公司,采取的策略就是只做“容器化”:将服务环境,代码,配置文件等所有依赖项打包为根底容器和Dockerfile,应用docker-compose的形式管制。除此之外,其余所有因素不变。从服务部署的角度来说,服务的确被打包了,如果须要扩容/迁徙,docker容器天然是比间接在宿主机上部署不便了许多。然而停留在这个阶段,我感觉不合理。 2、当初的“容器化”简略来说,咱们目前的“容器化”是这么做: 将原来的部署文档,整顿转化成一个dockerfile+docker-compose.yaml代码仓库配置上CI(jenkins/gitlab-ci,均可),每次代码合并后打包一个新的镜像。应用新打包的镜像将代码和环境一起公布,而非仅公布代码。咱们也的确有了一些收益:1、每当服务器扩容时,无需在服务器上配置服务环境,只需装置docker+部署服务,如果后续服务器转做他用,也不必放心是否会有影响。2、服务一致性失去保障,一样的代码能够失去一样的后果,宿主机很难影响到容器,简直不会呈现同一个版本代码在不同服务器上体现不统一的状况。然而运行一段时间后,我感觉这样做的收益并没有很高:1、没有方法纵观全局,观测所有服务,每个服务的运行状态还是须要登录对应的服务器能力看到。这样和不做容器化没有什么区别。2、nginx配置并不能与容器联动,一旦容器须要更换服务器还是须要手动更新(动态保护,compose写死docker内网IP)3、尽管配置了服务日志收集,然而一旦服务部署的服务器有变动,还是须要人工批改日志收集的agent。 正如这一段的题目,为什么不持续向前走?做的更多?你上swarm/k8s不就能在master上治理整个集群了吗?是的,无论是swarm还是k8s,都是能够抉择的,然而因为事实的种种原因,目前只能停留在这一步。 3、现实中的容器化把代码和环境打包在一起只是容器化的第一步,还须要持续往前走,能力解决残留问题。动态保护容器,其实有点把容器当虚拟机的象征,只不过每个虚拟机里只有一个服务。现实状况下,容器变动导致的路由问题和服务间相互发现/拜访都应该是主动的,而非动态。无论是间接应用docker,还是用docker swarm还是有很多问题须要人为去解决。而k8s都有计划。基于我对于k8s通俗的了解,我感觉,推动容器化,应该有以下几个问题要关注和解决:1、配置和日志:配置:能够间接用ConfigMap+Secret解决。日志:Sidecar模式比拟不错,间接在Pod内启动一个agent负责这个Pod内的所有文件日志收集。Pod之间不共享。日志服务端也有几个可选项,个别用ES,如果日志量很小也能够用loki(日志注释无索引,然而更轻便)。 尽管通过stdout/stderr收集日志也能够,然而这样没有Sidecar形式灵便。而且日志能够通过文件名进行更多辨别。个别还是会抉择Sidecar形式收集日志。这两个问题解决了,容器就曾经能够根底的运行: 从git仓库拉取代码,打包成镜像,通过Deployment公布从ConfigMap+Secret 读取+挂载配置,而且这两者也反对动静更新。每个Pod都应用Pod内的agent收集业务日志,发送到服务端。2、申请路由和服务发现/服务间的相互申请:除了上述这个点,还有一些点须要去探讨:容器在调度过程中会产生变动,被杀死或者重启的。 如何将内部的申请顺利导入到指标容器?容器间的发现和相互拜访如何实现?Ingress我感觉能够算是k8s的入口网关了,一个Ingress资源须要一个理论的Ingress Controller能力实现。一般来说,用Ingress-nginx就能够。其次,Service能够将服务形象,对外提供一个稳固的虚构endpoint,能够用于连贯,对内能够依照label转发申请到Pod上。这样拜访Service就能够将申请发送到对应的Pod,而不须要间接拜访Pod。 对于服务发现和服务间的申请,coreDNS齐全能够解决。每个Service创立后,都会在DNS内留下记录,其余服务能够间接应用DNS拜访一般来说,域名全程为:<service-name>.<namespace>.svc.cluster.local,前面的能够省略,指定<service-name>.<namespace>就能够确切拜访到服务了,通过这样简略的形式进行服务发现,那么服务间的相互拜访也天然没有太大问题。 这两个问题解决之后,申请能够顺利从内部路由到指标容器,荣期间也能够顺利相互发现/相互拜访。 4、路线还有多远?那么如果要逾越这一步,实现残缺的容器化,间隔还有多远?还须要解决什么问题?尽管无奈理论去操作,去将以后的我的项目革新成k8s,然而这并不障碍思考一下,“当初间隔齐全k8s化有多远,还须要解决那些问题。” 先从单个容器来说:代码配置方面,是在阿里云ACM上,代码间接拉取的。改为ConfigMap应该没有太大问题。日志收集方面,目前是应用的promtail做为agent,将日志发送到loki。改为Pod内减少一个promtail容器也应该没有太大问题promtail的配置能够存在ConfigMap上,不同的服务依照命名辨别就能够了。 还有一个要留神的点,就是docker肯定要配置容器日志大小限度,免得docker日志打满。因为日志会先写服务容器内,再被promtail容器读,不须要保留太多,个别也不须要间接登录容器看文件日志。服务路由和服务发现方面:从nginx动态路由改为Ingress-nginx因该也不会有太大艰难,把当初的nginx配置导入,后端转发到Service就能够了。目前服务发现很简略粗犷,间接拜访其余内网域名(每个服务配置了一个内网域名),从nginx绕一圈。这个改变并不大,只不过从内网域名改成Service域名就能够了。 部署公布方面:目前应用jenkins+gitlab 来实现代码公布,测试和预公布环境都是分支触发,对应分支有代码提交就会触发部署。(非凡分支只能merge,不容许间接提交)这部分应该不须要太大改变,只是理论的部署执行步骤须要改一下。 服务监控打点方面:目前对于服务本人的监控没有太大需要,当初服务本身没有任何打点。如果要用的化,还是promtheus比拟适合,官网对于java、go都有客户端。自定义打metric难度不大。 目前来说,我感觉这些问题如果都能理论解决,应该就能比拟好的实现迁徙。当然理论过程中必然也会遇到很多问题,不过见招拆招嘛,有问题解决问题就能够了。 5、小结:在论断局部,我感觉要先强调的一点是:不同人对待问题的角度不同,不能说谁对谁错。从运维的角度来说,上k8s很好,部署新服务很简略,服务器扩容/缩容也不便了许多,不再强依赖宿主机等等。然而从全局治理的角度来说,可能会有很多思考:1、当初的痛点是否能够承受,有没必要马上上k8s,上了之后会不会有什么问题。2、研发都须要对k8s有肯定了解,每个研发都须要再学习。否则在开发/调试/查问题上有影响。3、相比于nginx动态配置+动态服务来说,k8s动静的中央多了很多,依赖也多了很多。保护整个零碎须要关注更多的内容(比方etcd)一旦呈现问题须要更多的常识能力考察分明。 简而言之,引入k8s,对于运维角度来说,无疑是大好事,各方面都更好。然而,无论是引入k8s还是引入其余新的技术,都须要综合衡量,能力让服务越来越好。

February 20, 2021 · 1 min · jiezi

关于docker:使用docker部署简单的项目

目标:记录一下学习docker部署简略我的项目的思路 思路: 应用docker pull拉取相应的镜像源创立Dockerfile文件,编写配置文件docker build 运行Dockerfile文件,应用其配置创立新的镜像docker run 创立容器并运行此处借用一下官网的逻辑图 环境配置环境:CentOS 7 // 应用yum装置docker 此处因应用的集体服务器,是最高权限sudo yum install docker应用docker -v或者docker能够检测是否装置胜利 ps: 对于环境的相干配置,能够自行百度或者google,有大量教程,个别装置失败,都是因为权限的问题(我所遇到的) 正式部署创立一个简略的文件,次要目录如下 `-- your-app-name/ |-- src/ `-- app.js // 轻易写一些什么 `-- Dockerfile (we will create this in the following steps)咱们次要关注点是对Dockerfile文件的配置 # 拉取node镜像源,如果本地没有,会主动从docker hub进行拉取FROM node:latest# 执行命令,创立文件夹 此处门路其实不必进行创立# 在下一步的copy时,如果没有此文件,会主动在门路下创立文件RUN mkdir -p /home/nodeDemojs# 复制文件 复制src下的文件到 /home/nodeDemojsCOPY ./src /home/nodeDemojs# 容器启动时执行的命令,相似npm run startCMD ["node", "/home/nodeDemojs/app.js"]执行文件执行docker build docker build -t 镜像名 .// 镜像名后能够跟版本号,格局如 镜像名:v1.0// 最初的 . 要特地留神,不能呢个省略,这个作用是绑定咱们所执行的上线文执行docker images, 查看咱们所有的镜像 ...

February 20, 2021 · 1 min · jiezi

关于docker:如何让docker-container里既能使用systemctl又可以使用docker

最近因为工作须要,开始钻研如何在docker里部署编译打包环境,该环境须要可能应用systemctl和docker性能。 对于如何应用systemctl,曾经有文章提到了:https://developers.redhat.com...下面是2014年的文章,作者最近的更新在https://developers.redhat.com...总之就是须要做一些配置,而后启动container的时候运行CMD /usr/sbin/init 至于如何在docker container外部运行docker,网上的文章一搜一大片,正如它们所言,通常只须要把host上的 /var/run/docker.sock 通过bind mount形式挂载到 containter 外部的 /var/run/docker.sock 就能够了。其原理是和host共享一个docker daemon服务。 所以我就在启动container的时候同时指定了 /usr/sbin/init 和挂载host 的 /var/run/docker.sock。神奇的事件产生了,container外部/var/run门路下齐全没有 docker.sock 的踪影。 折腾了一大圈,才在github上找到了一个相干的探讨https://github.com/ansible-co...外面有集体剖析说,应该是使能systemctl会使得挂载完 /var/run/docker.sock 之后又在雷同地位mount 了一个tmpfs,导致先前挂载的文件都看不见了。 所以外面的人举荐了一个workaround:把host的/var/run/docker.sock 先挂载到一个其余地位,保障不会被笼罩掉,随后再到container的/var/run里去做一个symbol link,链接到挂载进来的docker.sock,这样就能够工作了。具体的内容还是去读原帖吧 :D

February 15, 2021 · 1 min · jiezi

关于docker:详解Docker-容器基础系统镜像打包

因为容器自身是共享宿主操作系统内核,所以容器根底零碎镜像包自身就是一个规范的 Linux rootfs + 用户自定义的工具。依据这个思路,咱们就能够构建一个本人的容器根底零碎镜像。 构建规范的 Linux rootfs 的形式有很多种办法,Redhat、Debian、SUSE等支流的发行版都有提供相应的工具反对。 大略的流程如下: 构建根底的 rootfs —> 配置根底零碎参数 —> 部署用户自定义软件 —> 清理零碎 —> 打包为容器镜像 —> 测试镜像 —> 公布仓库 以 Ubuntu 16.04.01 LTS 版为例,制作一个 Ubuntu 16.04 LTS 的 Docker 根底零碎镜像: 1、装置 Debootstrap : sudo apt install debootstrap 2、通过 Debootstrap 构建 Ubuntu 16.04 LTS 的 rootfs : 1)、创立 rootfs 寄存的地位,如咱们把新的 rootfs 寄存在 /opt/new_os: sudo mkdir -p /opt/new_os 2)、构建根底 Ubuntu 16.04 LTS 的 rootfs(Debootstrap 工具的参数应用 --help 查看): sudo debootstrap --verbose --arch=amd64 xenial /opt/new_os http://mirrors.aliyun.com/ubuntu ...

February 2, 2021 · 1 min · jiezi

关于docker:docker安装MySQL

本文出处shenyifengtk.github.io转载请阐明出处都2021了,学会用docker 来构建软件开发吧,疾速构建环境,容器比虚拟机更加轻量化,领有诸多益处。上面我应用docker装置运行MySQL例子,为大家演示docker应用办法。 搜寻镜像docker search mysqlPS C:\Users\syf> docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10425 [OK]mariadb MariaDB is a community-developed fork of MyS… 3868 [OK]mysql/mysql-server Optimized MySQL Server Docker images. Create… 763 [OK]percona Percona Server is a fork of the MySQL relati… 524 [OK]centos/mysql-57-centos7 MySQL 5.7 SQL database server 87mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 79centurylink/mysql Image containing mysql. Optimized to be link… 59 [OK]bitnami/mysql Bitnami MySQL Docker Image 48 [OK]deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r… 41 [OK]prom/mysqld-exporter 37 [OK]databack/mysql-backup Back up mysql databases to... anywhere! 37tutum/mysql Base docker image to run a MySQL database se… 35schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 29 [OK]linuxserver/mysql A Mysql container, brought to you by LinuxSe… 27centos/mysql-56-centos7 MySQL 5.6 SQL database server 20circleci/mysql MySQL is a widely used, open-source relation… 20arey/mysql-client Run a MySQL client from a docker container 17 [OK]mysql/mysql-router MySQL Router provides transparent routing be… 17fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron tas… 10 [OK]yloeffler/mysql-backup This image runs mysqldump to backup data usi… 7 [OK]openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6devilbox/mysql Retagged MySQL, MariaDB and PerconaDB offici… 3ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]jelastic/mysql An image of the MySQL database server mainta… 1widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 1 [OK]这些都是镜像都是dockerhub官网镜像,如果想理解它们详细信息,能够去官网搜寻关键字。这里我抉择第一个,MySQL官网镜像。 ...

February 1, 2021 · 2 min · jiezi

关于docker:kuberouter实现networkpolicy的原理

简介kube-router是一套开源网络计划,基于bgp协定构建路由,从而构建整个容器集群网络,它应用ipvs实现了k8s的service网络,并应用ipset和iptables工具实现了networkpolicy。 咱们晓得calico对于networkpolicy的实现也是ipset+iptables这一套,本文将联合源码和实例,介绍kube-router是如何实现networkpolicy的,并剖析它与calico在设计上的异同。 简要概括kube-router在节点上启动一个agent同步pod、networkpolicy对象的信息, 并构建iptables规定和ipset汇合。次要的程序入口在func (npc *NetworkPolicyController) fullPolicySync()。读者能够本人浏览源码,挺清晰的。 规定解决分为四步: 顶层规定集: npc.ensureTopLevelChains()networkpolicy粒度的规定集: networkPoliciesInfo, err = npc.buildNetworkPoliciesInfo() ; activePolicyChains, activePolicyIPSets, err := npc.syncNetworkPolicyChains(networkPoliciesInfo, syncVersion)pod粒度规定集:activePodFwChains, err := npc.syncPodFirewallChains(networkPoliciesInfo, syncVersion)清理stale规定 err = cleanupStaleRules(activePolicyChains, activePodFwChains, activePolicyIPSets)顶层规定集与calico一样,在INPUT/FORWARD/OUTPUT三个中央做hook。别离hook到KUBE-ROUTER-INPUT、KUBE-ROUTER-FORWARD、KUBE-ROUTER-OUTPUT。 KUBE-ROUTER-FORWARD、KUBE-ROUTER-OUTPUT两个链中没有什么非凡的规定,间接就进入到了各个pod粒度的规定集中。 KUBE-ROUTER-INPUT链中做了一些非凡目标地址的egress白名单,如下: 容许拜访service cidr-d $SERVICE_RANGE -j RETURN 容许拜访nodeport port range-p tcp/udp -m addrtype --dst-type LOCAL -m multiport --dports $NODEPORT_RANGE -j RETURN 容许拜访service external ip-d $SERVICE_EXTERNAL_RANGE -j RETURN 各个pod的规定networkpolicy粒度规定集networkpolicy粒度的规定以KUBE-NWPLCY为前缀,一个规定一个链。 来个例子: Chain KUBE-NWPLCY-4UOMHLJABMXP4VW2 (1 references)target prot opt source destinationMARK all -- anywhere anywhere /* rule to ACCEPT traffic from source pods to dest pods selected by policyname access-pod namespace default */ match-set KUBE-SRC-IMXDMRGLZFP7QJCX src match-set KUBE-DST-5CXCQ5O6AOA47RC6 dst /* rule to mark traffic matching a network policy */ MARK or 0x10000RETURN all -- anywhere anywhere /* rule to ACCEPT traffic from source pods to dest pods selected by policyname access-pod namespace default */ match-set KUBE-SRC-IMXDMRGLZFP7QJCX src match-set KUBE-DST-5CXCQ5O6AOA47RC6 dst /* rule to RETURN traffic matching a network policy */ mark match 0x10000/0x10000MARK all -- anywhere anywhere /* rule to ACCEPT traffic from source pods to specified ipBlocks selected by policy name: access-pod namespace default */ match-set KUBE-SRC-5CXCQ5O6AOA47RC6 src match-set KUBE-DST-7VKW2UTKN2UOEU4I dst /* rule to mark traffic matching a network policy */ MARK or 0x10000RETURN all -- anywhere anywhere /* rule to ACCEPT traffic from source pods to specified ipBlocks selected by policy name: access-pod namespace default */ match-set KUBE-SRC-5CXCQ5O6AOA47RC6 src match-set KUBE-DST-7VKW2UTKN2UOEU4I dst /* rule to RETURN traffic matching a network policy */ mark match 0x10000/0x10000一个KUBE-NWPLCY-*** chain里形容了一个networkpolicy对象, 对于该对象的每一个rule(ingress or egress),咱们都会有如下的操作: ...

January 29, 2021 · 3 min · jiezi

关于docker:Dockerfile-ENV-使用指南

当应用 Dockerfile 进行构建镜像时,有时会须要设置容器内的环境变量。 ENV 指令的格局如下: ENV <key>=<value> ...ENV 指令将环境变量 <key> 设置为值 <value>。这个值将在构建阶段的所有后续指令的环境中,也能够被替换应用在其余指令中。该值将被解释为其余环境变量,因而如果引号字符没有本义,它们将被删除。像命令行解析一样,引号和反斜杠能够用于在值中蕴含空格。 例如: ENV MY_NAME="John Doe"ENV MY_DOG=Rex\ The\ DogENV MY_CAT=fluffyENV 指令容许多个 <key>=<value> ... 变量同时设置,上面的例子将在生成的镜像中产生雷同的后果: ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \ MY_CAT=fluffy当应用生成的镜像运行容器时,应用 ENV 设置的环境变量将长久存在于容器内。你能够应用 docker inspect 查看这些值,并应用 docker run --env <key>=<value> 批改它们。 环境变量持久性可能会导致意想不到的副作用。例如,设置 ENV DEBIAN_FRONTEND=noninteractive 会扭转 apt-get 的行为,并可能让应用镜像的用户感到困惑。 如果只在构建过程中须要环境变量,而不是在最终镜像中,请思考为单个命令设置一个值: RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ...或者应用 ARG,它不会在最终镜像中长久存在: ARG DEBIAN_FRONTEND=noninteractiveRUN apt-get update && apt-get install -y ...代替语法 ENV 指令还容许另一种语法 ENV <key> <value>,省略了两头的等号。例如: ...

January 24, 2021 · 1 min · jiezi

关于docker:Docker-容器健康检查

Docker 容器健康检查指的是在 Dockerfile 中应用 HEALTHCHECK 指令对容器的运行状态进行查看,并在 docker ps 的 STATUS 栏显示 healthy/unhealthy。 HEALTHCHECK 指令有两种格局: HEALTHCHECK [OPTIONS] CMD command(通过在容器内运行命令查看容器的衰弱状态)HEALTHCHECK NONE(禁用从根底镜像中继承任何健康检查)HEALTHCHECK 指令通知 Docker 如何测试一个容器,以查看它是否仍在工作。这能够检测到一些状况,例如 web 服务器陷入有限循环,无奈解决新的连贯,即便服务器过程仍在运行。 当容器指定了健康检查时,除了失常状态外,它还具备衰弱状态。此状态初始为 starting。只有健康检查通过,它就会复原到 healthy(无论它以前处于什么状态)。在间断失败肯定次数后,它就会变得 unhealthy。 CMD 之前能够呈现的选项有: --interval=DURATION(默认:30s)--timeout=DURATION(默认:30s)--start-period=DURATION(默认:0s)--retries=N(默认:3)运行状态查看首先会在容器启动后的 interval 秒内运行,而后在前一次查看实现后的 interval 秒内再次运行。 如果一次状态查看破费的工夫超过 timeout 秒,则认为这次查看失败。 容器的运行状态查看间断失败 retries 次才会被视为不衰弱。 start period 为须要工夫启动的容器提供初始化工夫。在此期间的探测失败将不计入最大重试次数。然而,如果在启动期间健康检查胜利,则认为容器已启动,所有间断失败的状况都将计算到最大重试次数。 Dockerfile 中只能有一个 HEALTHCHECK 指令。如果列出多个,则只有最初一个 HEALTHCHECK 才会失效。 CMD 关键字前面的命令能够是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running)或 exec 数组(与其余 Dockerfile 命令一样,无关详细信息,请参见 ENTRYPOINT)。 command 的退出状态示意容器的衰弱状态。可能的值是: 0:胜利--容器运行良好,能够应用1:不衰弱—-容器不能失常工作2:保留--不应用此退出码例如,每五分钟左右查看一次 web 服务器是否能在三秒内为站点的主页提供服务: HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1为了帮忙调试失败的探测,command 写在 stdout 或 stderr 上的任何输入文本(UTF-8编码)都将存储在衰弱状态中,并且能够通过 docker inspect 进行查问。这样的输入应该放弃简短(目前只存储前4096个字节)。 ...

January 24, 2021 · 1 min · jiezi

关于docker:docker-codeserver运行web-vscode

装置docker desktop装置地址 确认是否装置胜利// 呈现版本号就阐明装置胜利docker -v批改docker镜像文件在访达外面抉择返回文件夹,输出~/.docker在关上的目录中找到daemon.json 文件,减少以下内容"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]验证镜像是否批改胜利docker info 获取code-server 镜像docker pull code-server生成新的容器关上docker deskTop抉择images,外面会有一个方才pull到的code-server的镜像,点击run配置外面填好配置信息,比方下图 在新建的容器中点击open in browser,这时候会关上chrome须要你填写明码进入新建的容器中,执行以下代码,复制明码在chrome中输出nano ~/.config/code-server/config.yaml 将chrome的url改为http://localhost:9999/?folder=/vscodefoler前面的地址就是之前在新建容器时候配置的服务端的文件目录名批改文件内容,会在本地的/Users/zyj/hipac上面的对应文件就会被同步批改最终成果

January 23, 2021 · 1 min · jiezi

关于docker:Dockerfile-制作

版本 1.0团队 北芯众合技术小组制作 <wu_chang_hao@qq.com>工夫 2021/01/21知识点Dockerfile 制作 Dockerfile 根本构造Dockerfile 文件阐明Dockerfile 案例一Dockerfile build应用Dockerfile 制作Dockerfile 根本构造根底镜像信息维护者信息镜像操作指令容器启动时执行指令Dockerfile 文件阐明FROM: 指定根底镜像, 必须为第一个命令 格局: FROM <image> FROM <image>:<tag> FROM <image>@<digest> 示例: FROM mysql:5.6注: tag或digest是可选的,如果不应用这两个值时,会应用latest版本的根底镜像MAINTAINER: 维护者信息 格局: MAINTAINER <name>示例: MAINTAINER changhao MAINTAINER wu_chang_hao@qq.com MAINTAINER changhao <wu_chang_hao@qq.com>RUN: 构建镜像时执行的命令 RUN用于在镜像容器中执行命令,其有以下两种命令执行形式:shell执行格局: RUN <command> exec执行格局: RUN ["executable", "param1", "param2"]示例: RUN ["executable", "param1", "param2"] RUN apk update RUN ["/etc/execfile", "arg1", "arg1"] 注: RUN指令创立的两头镜像会被缓存,并会在下次构建中应用。如果不想应用这些缓存镜像,能够在构建时指定--no-cache参数,如:docker build --no-cacheADD: 将本地文件增加到容器中, tar类型文件会主动解压, 能够拜访网络资源, 相似wget 格局: ADD <src>... <dest> ADD ["<src>",... "<dest>"] 用于反对蕴含空格的门路 示例: ADD hom* /mydir/ # 增加所有以"hom"结尾的文件 ADD hom?.txt /mydir/ # ? 代替一个单字符,例如:"home.txt" ADD test relativeDir/ # 增加 "test" 到 `WORKDIR`/relativeDir/ ADD test /absoluteDir/ # 增加 "test" 到 /absoluteDir/COPY: 性能相似ADD,然而不会主动压缩文件,也不能拜访网络资源 ...

January 21, 2021 · 2 min · jiezi

关于docker:Docker-基础

版本 1.0团队 北芯众合技术小组制作 <wu_chang_hao@qq.com>工夫 2021/01/21知识点docker 基本概念 docker 镜像增删改查docker 容器docker 容器增删改查docker 其余命令应用docker 导入/导出docker 镜像市场docker 阿里云镜像减速装置 dockerdocker 试验 测试自定义docker镜像 案例一案例二docker 基本概念镜像: image容器: container仓库: repositorydocker 镜像增删改查docker search # 镜像名:去docker hub 搜寻无关镜像文件docker pull # 镜像名:下载docker镜像docker images # 查看本地有哪些docker镜像,同docker image lsdocker rmi # 镜像id或者镜像名:删除本地docker镜像docker rmi -f # 镜像id:强制删除镜像文件docker 容器docker容器中必须有过程在后盾运行,否则容器挂掉docker镜像每次运行 都会生成新的容器id记录docker 容器的增删改查docker run 镜像名/镜像id:运行处容器过程实例docker ps:查看正在运行的容器过程docker ps -a:显示所有运行过的容器过程(正在运行的,以及挂掉的容器过程),同docker container ls -a,旧的命令docker run -it 镜像id/镜像名 /bin/bash:运行一个交互的容器参数:-i:interactive,交互式的命令操作;-t:terminate,开启一个终端界面 ;/bin/bash:指定linux的解释器docker rm 容器id:删除容器id记录,只能删除挂掉的容器docker rm `docker ps -aq` :批量删除进行运行的容器记录docker exec -it 运行着的容器id /bin/bash:进入一个正在运行着的容器docker logs 容器id:查看容器的日志docker logs -f 容器id:查看容器内的日志# 启动容器 (后盾模式)docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"# -P参数:将容器外部应用的网络端口随机映射到主机上docker run -P mongodocker ps # 查看随机映射的端口# -p参数:设置固定映射端口docker -run -d -p 27017:27017 xxx_id /bin/bash# --net host参数: 能够应用通过web界面拜访到容器了 docker run --net host xxx_id /bin/bashdocker 其余命令应用# docker 查看配置信息docker info# 返回docker对象信息,底层信息, 返回一个 JSON 文件记录着 Docker 容器的配置和状态信息docker inspect xxx_iddocker 导入/导出# 导出某个镜像docker export 1e560fca3906 > center.tar# 导入镜像docker import cneter.tar# 导出本地镜像docker save -o docker-mongo.tar 213c2b6cee9f# 导入本地镜像docker load -i docker-mongo.tardocker 镜像市场# DaoCloud 厂商https://hub.daocloud.io/docker 阿里云镜像减速# 阿里云镜像减速地址https://dev.aliyun.com/装置 dockerwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum install -y docker# 配置镜像下载加速器curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.iocat /etc/docker/daemon.json{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}docker 试验测试docker run -d centos /bin/sh -c "while true;do echo 'hello, beixin team.'; sleep 1;done" -d:daemonize,后盾运行 centos:指定哪个镜像 /bin/sh:指定linux的解释器 -c:指定一段shell代码 "while true;do echo '熊大真棒'; sleep 1;done",每秒打印一个自定义docker镜像案例一# 获取一个centos镜像,运行出容器实例docker run -it centos /bin/bash# 进入容器空间, 装置vimyum install vim -y# 退出容器,提交这个容器为一个新的镜像exitdocker ps -a # 查看方才装置了vim的容器id,这里4595c3de8418 9f3 # 这里我的查到时459# 提交镜像语法:docker commit 容器id 新的镜像名字docker commit 459 centos-vim# 查看提交的镜像文件docker images# 导出镜像文件到指定的文件,留神为压缩文件docker save centos-vim > /opt/centos-vim.tar.gz# 在本地测试导入这个镜像,能够先删除咱们生成的镜像docker rmi centos-vim# 导入镜像docker load < /opt/centos-vim.tar.gz# 导入的镜像,批改名字# docker tag 旧的镜像名 以docker仓库id结尾/新的镜像名docker tag 84d mydocker/centos-vim# 执行docker镜像,运行出容器,查看是否携带了vimdocker run -it mydocker/centos-vimvim # 胜利的话,vim能够执行案例二docker运行一个flask框架的脚本 ...

January 21, 2021 · 2 min · jiezi

关于docker:干货丨基于Docker的DolphinDB集群部署教程

Docker是一个开源的引擎,能够轻松地为任何利用创立一个轻量级的、可移植的、自力更生的容器。DolphinDB database 提供了基于docker的分布式集群部署包,能够让用户方便快捷的部署DolphinDB分布式集群。 本教程的指标是通过4个centos容器搭建一个5节点的多机集群,最终搭建好的集群状况如下: 部署分布式集群时,须要别离配置控制器节点(controller)、代理节点(agent)和数据节点(datanode)的网络IP和端口。本教程提供的部署包,通过docker容器间构建虚构子网,为4个容器别离指定了从10.5.0.2到10.5.0.5 四个固定IP地址。蕴含这些信息的配置文件曾经内置到部署包中,用户无需再手工一一指定。内置的网络IP及端口分配情况如下: controller.cfg: localSite=10.5.0.5:8888:masteragent1.cfg: mode=agentlocalSite=10.5.0.2:8710:P1-agent,agentcontrollerSite=10.5.0.5:8888:mastercluster.nodes: localSite,mode10.5.0.2:8710:P1-agent,agent10.5.0.2:8711:P1-node1,datanode10.5.0.2:8712:P1-node2,datanode10.5.0.3:8810:P2-agent,agent10.5.0.3:8811:P2-node1,datanode10.5.0.3:8812:P2-node2,datanode10.5.0.4:8910:P3-agent,agent10.5.0.4:8911:P3-node1,datanode因为在docker虚构网络环境下UDP协定无奈失常运作,所以须要在agent.cfg和cluster.cfg中加上配置项lanCluster=0,此配置项在部署包中的配置文件中已默认增加。 在部署集群前,须要先搭建好docker环境,具体能够参考docker装置教程、docker-compose装置教程。 1.下载并编译DolphinDB docker集群部署包从https://github.com/dolphindb/Tutorials_CN/blob/master/docker/DolphinDB-Docker-Compose.zip下载DolphinDB docker部署包。 通过以下步骤失去一个蕴含最新版本DolphinDB server的镜像文件: cd ./DolphinDB-Docker-Compose/Dockerbuilddocker build -t ddb:latest ./编译实现后,应用docker images查看: $ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEddb latest 4268ac618977 5 seconds ago 420MB2.替换部署包中的license文件社区版中的license文件无奈反对部署5个数据节点和1个管制节点,因而须要申请反对6个以上节点的企业版license,并将企业版license文件dolphindb.lic放到./cfg文件目录下。 3.创立controller和agent所需容器,并启动容器容器中的默认启动脚本会主动启动管制节点和代理节点。 cd ./DolphinDB-Docker-Composedocker-compose up -d执行后输入的后果如下: $ docker-compose up -dCreating network "20190121-dolphindb-docker-compose_dbnet" with driver "bridge"Creating ddbcontroller ... doneCreating ddbagent2 ... doneCreating ddbagent3 ... doneCreating ddbagent1 ... done4.查看集群通过上述步骤,曾经实现了分布式集群的创立、启动和初始化工作。拜访地址http://localhost:8888即可拜访集群治理的web页面。在Web中启动所有数据节点,最终界面如下:

January 18, 2021 · 1 min · jiezi

关于docker:docker新手上路

一、docker常用命令docker create <image-id>docker create <image-id>命令未指定的镜像(image)增加了一个可读写层,形成了一个新的容器。留神,这时候这个容器并没有运行。 docker start <container-id>docker start命令为容器文件系统创立了一个过程隔离空间。留神,每一个容器只可能有一个过程隔离空间。 docker run <image-id>简略来说,docker run命令就是docker create命令和docker start命令的合集,简略来说就是应用一个image创立一个container并且运行它。 docker psdocker ps 命令会列出所有运行中的容器。这暗藏了非运行态容器的存在,如果想要找出这些容器,咱们须要应用上面这个命令。 docker ps -adocker ps –a命令会列出所有的容器,不论是运行的,还是进行的。 docker imagesdocker images命令会列出了所有顶层(top-level)镜像。实际上,在这里咱们没有方法辨别一个镜像和一个只读层,所以咱们提出了top-level镜像,只有创立容器时应用的镜像或者是间接pull下来的镜像能被称为顶层(top-level)镜像 docker images -adocker images -a命令列出了所有的镜像,也能够说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,能够应用docker history来查看。 docker stop <container-id>docker stop命令会向运行中的容器发送一个SIGTERM的信号,而后进行所有的过程 docker kill <container-id>docker kill 命令向所有运行在容器中的过程发送了一个不敌对的SIGKILL信号。 docker pause <container-id>docker stop和docker kill命令会发送UNIX的信号给运行中的过程,docker pause命令则不一样,它利用了cgroups的个性将运行中的过程空间暂停。具体的外部原理你能够在这里找(https://www.kernel.org/doc/Do...https://www.kernel.org/doc/Doc ... m.txt,然而这种形式的不足之处在于发送一个SIGTSTP信号对于过程来说不够简略易懂,以至于不可能让所有过程暂停。 docker rm <container-id>docker rm命令会移除形成容器的可读写层。留神,这个命令只能对非运行态的容器执行 docker commit <container-id>docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。 docker builddocker build命令依据Dockerfile文件中的FROM指令获取到镜像,而后反复地1)run(create和start)、2)批改、3)commit。在循环中的每一步都会生成一个新的层,因而许多新的层会被创立。 docker exec <running-container-id>docker exec命令在运行中的容器执行一个新过程 docker insect <container-id> or <image-id>docker inspect命令会提取出容器或者镜像最顶层的元数据。 ...

January 16, 2021 · 1 min · jiezi

关于docker:windows-Docker出现-Cannot-enable-HyperV-service-错误

首先将装置的安卓模拟器敞开了 在管理员模式下的命令提示符中输出:bcdedit /set hypervisorlaunchtype Auto2 .而后重启电脑

January 16, 2021 · 1 min · jiezi

关于docker:洞察秋毫JFrog日志分析-协助监视Docker-Hub上的拉取操作

一、背景大家曾经留神到,Docker Hub当初开始对镜像拉取进行限度,无论是收费的匿名用户,还是认证用户。在六个小时内,从一个IP地址镜像拉取的申请次数超过固定阈值(匿名用户100次,认证用户200次)后,Docker Hub就会限度其拉取带宽。尽管用户依然能够拉取到Docker镜像,然而速度要慢得多。 您能够浏览咱们之前的博客文章《绕开Docker Hub下载限度:JFrog Artifactory》(https://mp.weixin.qq.com/s/I8...),以理解Docker Hub的相干策略,以及JFrog Artifactory如何帮忙您绕过这个限度。 对于依赖Docker Hub并将其作为Docker镜像核心的企业,这项新政策可能对其生产力产生重大影响。因为阈值是基于IP的,而不是基于用户的,因而这些限度可能会更快、更频繁地影响到企业的交付效率。 您晓得这些变动如何影响您的交付吗?通过对JFrog日志剖析的最新改良,当初JFrog Artifactory的用户能够通过JFrog的日志剖析来查找并决策如何加重这些限度的影响。本文将就此作简略的介绍。 二、应用Artifactory缓存Docker Hub的拉取申请Artifactory的用户曾经能够通过为Docker Hub建设近程仓库来升高拉取的频率。该近程仓库将代理并缓存从Docker Hub拉取的每个Docker镜像,以便未来从您的企业级制品库/镜像核心中间接拉取该镜像。 这样,只有从Docker Hub到缓存的第一次拉取才会计入Docker Hub的拉取限度。您最常应用的Docker镜像将始终以全速传递到您的构建中。而且一旦做了缓存,即便Docker Hub上的相应镜像变得不可用,这些镜像在企业级制品库/镜像核心中将始终保持可用。 您还能够在Artifactory中保护本人平安的、公有的Docker镜像核心,以进一步缩小对Docker Hub的依赖。 三、Docker仓库剖析对于由Artifactory反对的JFrog DevOps平台的自主装置,咱们提供了一个集成工具,该工具可通过Fluentd数据收集提供对立的JFrog日志数据。咱们还提供了其余一些应用程序和集成形式,能够应用这些数据,并出现到风行的分析程序(包含Splunk、Elastic Stack、Prometheus/Grafana和DataDog等)仪表板上。 通过最适宜您的剖析工具,您能够查看有价值的运维统计数据,例如数据传输量、哪些仓库正在被谁应用,以及哪些用户被回绝拜访等。 咱们更新了这些集成,以提供一个新的Docker统计信息选项卡,可帮忙您监督Docker Hub的应用状况。上面就让咱们一一介绍一下它们,以及它们在Splunk的JFrog Logs应用程序中的显示方式。 1、拉取申请趋势 单个计数批示最近6个小时对Docker Hub收回的拉取申请的数量,以及趋势是减速还是降落。该计数不包含近程仓库缓存满足的计数(即缓存未命中),因而它仅计算合乎Docker Hub限度策略的拉取申请。 2、Docker仓库缓存命中率 缓存满足Docker镜像申请的频率以比率示意,其中值1示意缓存满足所有申请。例如,上面显示的比率0.703是70.3%的缓存命中率。因而,只管高速缓存未命中总计269次(29.7%),但Artifactory以全传输速度解决了628个拉取申请。 3、Docker Hub拉取申请 该图显示了在6小时滚动工夫内收回的Docker Hub拉取申请的数量。每个栏显示从该小时标记开始的前六个小时内收回的拉取申请的总数。 该统计信息将帮忙您查看您的企业是否靠近或超过了Docker Hub限度策略,以及拉取顶峰在什么工夫。 4、十大用户和IP 这些统计数据按用户和IP地址揭示了Docker仓库的次要用户是谁。如果您发现超出了拉取申请,则此信息能够帮忙您确定次要的负责方。 四、总结Docker Hub推出了对拉取申请的限速策略,应用Artifactory作为企业级镜像核心能够帮忙您绕过这个限度,而JFrog的日志剖析能够帮忙您剖析企业Docker Hub拉取申请的状态。 您能够在Github上找到JFrog日志剖析集成的数据收集和剖析工具(https://github.com/jfrog/log-...)。 它始于与开源数据收集器Fluentd的集成,该集成可随JFrog Platform部署的每个产品实例一起装置。Fluentd在JFrog平台中为每个产品执行日志输出、字段提取和记录转换,并将此数据的输入标准化为JSON,以传输到剖析和BI仪表板。 应用此解决方案,您能够治理从Docker Hub拉取的次数和频率,并加重新限度策略的影响。

January 15, 2021 · 1 min · jiezi

关于docker:通过-Wasm-扩展-Envoy-117

2021年1月12日,Envoy 1.17.0 正式 released!本次更新值得大家关注的性能: wasm filterxds 资源 ttlskywalking tracer本文次要小试Wasm filter。 Wasm扩大概述Envoy Wasm扩大是一种Filter,可通过Wasm ABI 将Envoy外部 C++ API ”翻译“ 到 Wasm 运行时。 目前Envoy 反对以下4种Wasm 运行时: NameDescriptionenvoy.wasm.runtime.v8V8-based runtimeenvoy.wasm.runtime.wasmtimeWasmtime runtimeenvoy.wasm.runtime.wavmWAVM runtimeenvoy.wasm.runtime.nullCompiled modules linked into Envoy默认状况下,Envoy发行镜像中不蕴含Wasmtime和WAVM运行时。 ABI 定义了Wasm扩大两侧的函数约定:主机公开的函数和Wasm模块实现的函数。主机公开的函数被“import”到Wasm模块中。 当然咱们在真正编写一个Wasm Filter的时候,咱们并不是间接操作ABI。咱们个别应用的是SDK,SDK是ABI的一种特定于语言的实现,它使应用该语言编写Wasm Filter变得更加容易。 实践上,咱们能够应用各种反对Wasm的语言编写Filter。不过目前官网实现了C++和 Rust 两种语言的SDK。 Envoy 反对 Wasm Network Filter 和 HTTP Filter。 Wasm是沙箱技术。从平安的角度来看,这是十分现实的,但它对内存模型有影响。 Envoy和Wasm VM之间的任何交互都将从Envoy内存复制到Wasm内存,而后再返回。 扩大示例在本示例中,咱们基于 proxy-wasm-rust-sdk 实现一个Wasm 扩大 ,该扩大次要实现性能:当申请的Header中path属性值为“/hello”的时候,Envoy代理间接返回“Hello, World”。 1:创立库并设置 Wasm过滤器是从Rust库我的项目编译而成的,因而首先咱们须要创立该我的项目: cargo new --lib my-http-wasm-filter生产的库是要被Envoy C++ 代码加载的,因而无需蕴含任何Rust特定的信息。故咱们编辑Cargo.toml文件,将库的类型设置为"cdylib"。 同时咱们须要援用proxy-wasm-rust SDK,故须要配置一下proxy-wasm-rust SDK依赖。 如下: ...

January 12, 2021 · 2 min · jiezi

关于docker:使用Kubernetes和Istio构建大型集群的挑战和解决方案

为了更好地治理一直增长的服务和流量,Houzz基础架构工程团队最近将Web Server服务从Amazon Elastic Compute Cloud(Amazon EC2)迁徙到Kubernetes集群。这次迁徙使资源缩小了33%,首页提早有了30%的改善。 新的Kubernetes集群的整体架构蕴含多个应用程序,包含用NodeJS编写的前端(FE)应用程序和用HHVM编写的后端(BE)服务。 FE应用程序通过HTTP上的Apache Thrift协定与BE服务进行通信。每个应用程序都启用了程度Pod主动缩放(HPA)。集群内以及与内部服务的通信由Istio治理,都会通过Envoy Sidecar。 迁徙过程中有诸多挑战,本文次要是想和大家分享一下咱们迁徙过程中的最佳实际。 Pod 启动提早 在开始Kubernetes迁徙时,咱们留神到Pod启动提早有时会在新配置的节点上产生。 Envoy容器准备就绪大概花了六分钟,阻止了其余容器的启动。从Envoy日志中,咱们察看到pilot-agent 一直报告Envoy尚未准备就绪,并提出了查看Istiod是否仍在运行的倡议。 咱们实现了一个守护程序集,其惟一的工作就是解析Istiod服务的FQDN。从其指标来看,咱们察看到在新节点疏导后域名零碎(DNS)名称解析几分钟后会超时,并认为Envoy遇到了雷同的超时问题。 咱们确定了导致该问题的根因是dnsRefreshRate,其在Istio 1.5.2中的默认值为5分钟,并且与察看到的提早大抵匹配。因为在启动某些Pod之后新节点上的DNS客户端已准备就绪,因而较长的重试距离导致Envoy无奈及时检测到DNS客户端的就绪状态。通过强制Envoy进行更频繁的重试,咱们将附加的Pod启动提早从360秒缩小到60秒。 请留神,在Istio 1.6中,默认的dnsRefreshRate已更改为5秒。 HHVM Pod 预热和级联伸缩 咱们的BE服务内置于HHVM中,该服务在其代码缓存预热之前具备很高的CPU使用率和高提早。预热阶段通常须要几分钟,因而在默认的15秒HPA同步周期或HPA评估CPU使用率指标并调整所需Pod数量的工夫距离内,它不能很好地工作。当因为负载减少而创立新的Pod时,HPA从新Pod中检测到更高的CPU使用率,并扩大了更多Pod。这种踊跃的反馈循环始终继续到新的Pod被齐全预热或达到Pod的最大数量为止。新的Pod齐全预热后,HPA检测到CPU使用率显着降落,并缩减了大量Pod。级联伸缩导致了不稳固和提早峰值。 咱们进行了两项更改以解决级联伸缩问题。咱们依据他们的官网倡议改良了HHVM预热过程。预热期间的CPU使用率从失常应用的11倍缩小到1.5倍。 Pod开始提供流量后的CPU使用率从失常应用的4倍升高到1.5倍。 此外,咱们将HPA同步工夫从15秒减少到10分钟。只管HPA对负载减少的响应速度较慢,但它防止了级联扩大,因为大多数Pod能够在10分钟内实现预热并开始失常应用CPU。咱们发现这是一个值得衡量的抉择。 更改之前的HPA流动: 更改之后的流动: 负载平衡 负载不平衡是咱们迁徙到Kubernetes期间遇到的最值得注意的挑战,只管它仅在最大的虚构服务中产生。症状是某些Pod在重负载下无奈通过就绪查看,而后更多的申请将路由到这些Pod,从而导致Pod在就绪状态和未就绪状态之间摆动。在这种状况下增加更多的节点或Pod将导致更多的飘动Pod。产生这种状况时,提早和谬误计数会大大增加。缓解此问题的惟一办法是强行放大部署规模,以杀死一直稳定的Pod,而无需增加新Pod。然而,这不是一个可继续的解决方案,因为更多的Pod很快就开始飘动。因为此问题,咱们屡次回退了迁徙。 负载平衡: 为了排查不便,咱们增加了额定的日志记录,发现负载不平衡时触发,一个可用区(AZ)的申请显著多于其余两个。咱们狐疑这种不均衡是因为咱们过后应用的起码申请负载平衡策略中的正反馈回路造成的。咱们尝试了其余几种策略(Round Robin,Locality Aware和Random),都没有解决问题。 在排除了负载平衡策略之后,咱们在其余两个方面寻找了踊跃的反馈循环:重试失败的申请和异样检测。只管Istio的官网文档中指出默认状况下不会对失败的申请进行重试,但理论的默认重试次数设置为2。重试会导致级联失败,因为某些申请失败后会发送更多申请。此外,咱们察看到异样检测中的某些行为(也称为被动健康检查)无法解释,因而咱们决定禁用这两个性能。之后,不均衡问题隐没了,咱们可能将95%的申请迁徙到Kubernetes。咱们在旧平台上保留5%的资源用于性能比拟和调整。 最后,咱们不确定重试或异样检测这两个性能中的哪一个是造成负载不平衡的起因,只管咱们当初认为它与重试无关。在将Istio降级到1.6版,进行了一些性能改良并将100%的申请迁徙到Kubernetes之后,咱们尝试从新启用离群值检测-咱们违心承当这种危险,因为更改能够在几秒钟内复原。在撰写本文时,咱们还没有遇到负载不平衡的问题。就是说,咱们用以下事实证明了咱们的实践,即以后Istio版本的集群配置与产生不平衡时的配置不同。 公布后性能降落咱们察看到,每次公布后,Kubernetes上的提早都会随工夫减少,因而咱们创立了一个仪表板来显示Envoy在Ingress网关,FE应用程序和BE服务Pod中报告的入站/出站提早。仪表板表明,总体减少是由Envoy在BE Pod中报告的入站提早的减少所驱动的,这包含服务提早和Envoy自身的提早。因为服务提早没有显着减少,因而代理提早被认为是提早减少的驱动力。 咱们发现,每个版本公布后,Envoy在BE Pod中的内存使用量也随着工夫减少,这使咱们狐疑提早减少是因为BE Pod中的Envoy的内存透露引起的。咱们exec到一个BE Pod,并列出了Envoy和主容器中的连贯,发现Envoy中有大概2800个连贯,主容器中有40个连贯。在2,800个连贯中,绝大多数是与FE Pod(BE Pod的客户)连贯的。 为了解决Envoy内存透露问题,咱们测试了一些更改,包含: 1.将FE Pod到BE Pod之间的连贯的idleTimeout从默认的1小时缩小到30秒。此更改缩小了谬误数量并进步了申请成功率,但同时也减少了FE和BE容器之间每秒的连贯申请数量。 2.将Envoy的并发或线程数从FE Pod中的16缩小到2。该更改勾销了自第一次更改以来每秒大多数连贯申请数量的减少。 3.在BE Pod中将Envoy内存限度设置为300MB。察看到预期的行为,并且Envoy的内存使用量超出限度时重新启动。容器持续运行,然而内存使用率较低。重新启动Envoy时,有些Pod有短暂的准备就绪工夫,这是对前两个更改的补充。尽管前两个更改缩小了Envoy的内存使用量,但第三个更改将在Envoy的内存使用量超出限度时重新启动。与重新启动主容器相比,重新启动Envoy所导致的停机工夫显著更少,因为后者会在HHVM中产生几分钟的预热工夫。变更之前的提早: 变更之前内存变动: 变更之后的提早: 解决了公布后的性能降落问题之后,咱们将100%的申请迁徙到Kubernetes并敞开了旧主机。 集群范畴内的瓶颈 随着咱们将更多申请迁徙到Kubernetes中最大的虚构服务,咱们遇到了跨集群范畴的资源的问题,这些资源在虚构服务之间共享,包含API服务器,DNS服务器和Istio管制立体。 在事件期间,继续了一两分钟的所有虚构服务察看到谬误峰值,咱们发现这是因为未能解析FE Pod中BE虚构服务的DNS名称所致。谬误峰值还与DNS解析谬误和DNS申请降落无关。 Ingress服务调用不应依赖于DNS。相同,应该将FE Pod中的Envoy定向为将出站HTTP申请定向到BE服务中的端点的IP地址。然而,咱们发现NodeJS Thrift客户端库对无用的服务IP进行了DNS查找。为了打消DNS依赖性,咱们部署了Sidecar,将Virtual Service中BE服务的主机绑定到本地套接字地址。 ...

January 11, 2021 · 1 min · jiezi

关于docker:WebAssembly云原生项目可扩展性的利器

只管在诞生之初,WebAssembly(简称Wasm)目标是为浏览器带来高级编程的性能 -- 它提供了一条路径,以使得以各种语言编写的代码都能够以靠近原生的速度在Web中运行。在这种状况下,以前无奈以此形式运行的客户端软件都将能够运行在Web中。 然而随着最近几年的倒退,Wasm 凭借着以下几个个性: 靠近原生性能运行沙箱可移植性,build once, run everywhere给云原生我的项目带来了可扩展性。 接下来咱们通过几个云原生我的项目,来看看Wasm 是如何成为可扩展性的利器。 Envoy 和 IstioEnvoy是专为大型古代服务架构设计的L7代理和通信总线。其曾经成为了Service Mesh 解决方案数据面事实上的规范。 然而咱们在利用Envoy的过程中,咱们可能心愿插入其余业务逻辑,例如度量,可察看性,转换,数据失落预防,合规性验证或其余性能。 不过编写和增加自定义Envoy模块有点繁琐。你必须应用C++编程并在Envoy中从新编译。 为了解决这个问题,Envoy 社区在 Envoy 中嵌入了 WASM 虚拟机以取得一个平安的沙箱环境,用于动静加载和运行可拔插的扩大代码(被编译为 WASM 字节码),简化 Envoy 二次开发和性能加强的复杂度。 应用 Wasm 扩大 Envoy 带来了几个次要益处: 敏捷性:能够用管制立体在运行时下发和重载扩大。这就能够疾速的进行扩大开发→ 测试→ 公布周期,而无需重启 Envoy。可靠性和隔离性:扩大部署在具备资源限度的沙箱中,这意味着它们当初能够解体或透露内存,但不会让整个 Envoy 挂掉。CPU 和内存使用率也能够受到限制。安全性:沙盒具备一个明确定义的 API,用于和 Envoy 通信,因而扩大只能拜访和批改链接或者申请中无限数量的属性。此外,因为 Envoy 协调整个交互,因而它能够暗藏或革除扩大中的敏感信息(例如,HTTP 头中的 “Authorization”和“Cookie”,或者客户端的 IP 地址)。灵活性:能够将超过 30 种编程语言编译为 WebAssembly,能够让各种技术背景的开发人员都能够用他们抉择的语言来编写 Envoy 扩大,比方:C++,Go,Rust,Java,TypeScript 等。在Envoy反对Wasm之后,istio也通过这种扩大机制,移除了Mixer组件,将现有的 out-of-process 的插件模型最终用基于 WASM 的 in-proxy 扩大模型来代替,极大晋升了网格的性能。 OPAOpen Policy Agent(简称OPA)是一种凋谢源代码的通用策略引擎,它对立了整个技术栈中的策略执行。 OPA背地的准则之一是策略评估与策略执行解耦。 在 OPA v0.15.1之前,各种基础设施须要嵌入策略评估引擎。 ...

January 11, 2021 · 1 min · jiezi

关于docker:一张脑图整理Docker常用命令

先上图: Dcoker基本概念Docker 包含三个基本概念: 镜像(Image):Docker 镜像是一个非凡的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还蕴含了一些为运行时筹备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不蕴含任何动态数据,其内容在构建之后也不会被扭转。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是动态的定义,容器是镜像运行时的实体。容器能够被创立、启动、进行、删除、暂停等。仓库(Repository):仓库(Repository)相似Git的近程仓库,集中寄存镜像文件。三者关系能够用下图示意: 接下来看一看Docker的常用命令。 服务查看Docker版本信息 docker version 查看docker简要信息 docker -v 启动Docker systemctl start docker 敞开docker systemctl stop docker 设置开机启动 systemctl enable docker 重启docker服务 service docker restart 敞开docker服务 service docker stop 镜像镜像仓库Docker Hub 等镜像仓库上有大量的高质量的镜像能够用,能够从仓库获取镜像。 检索镜像 docker search 关键字 拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 镜像治理列出镜像 docker image ls docker images 删除镜像 # 删除指定镜像 docker rmi <镜像Id> 导出镜像 # 将镜像保留为归档文件 docker save 导入镜像 docker load Dockerfile构建镜像Dockerfile 是一个文本格式的配 文件,用户能够应用 Dockerfile 来疾速创立自定义的镜像。 Dockerfile 由一行行行命令语句组成,并且反对以#结尾的正文行. Dockerfile常见指令上面是Dockerfile中一些常见的指令: FROM:指定根底镜像RUN:执行命令COPY:复制文件ADD:更高级的复制文件CMD:容器启动命令ENV:设置环境变量EXPOSE:裸露端口其它的指令还有ENTRYPOINT、ARG、VOLUME、WORKDIR、USER、HEALTHCHECK、ONBUILD、LABEL等等。 以下是一个Dockerfile实例:  FROM java:8 MAINTAINER "jinshw"<jinshw@qq.com> ADD mapcharts-0.0.1-SNAPSHOT.jar mapcharts.jar EXPOSE 8080 CMD java -jar mapcharts.jar ...

January 10, 2021 · 1 min · jiezi

关于docker:怎么对容器抓包

微信公众号:LinuGo,欢送关注在生产中,容器为了轻量级,外面并没有封装一些ip,ping这些根底命令,这时候能够通过进入容器的网络命名空间来执行命令。当然,也能够用这种形式对容器进行抓包。 应用命令介绍nsenternsenter命令用于进入指定过程的命名空间,包含最罕用的挂载命名空间和网络命名空间。实用于容器这种非凡的过程。#罕用用法:#进入网络命名空间$ nsenter -t <Pid> -n #进入挂载命名空间,相似docker exec进入容器$ nsenter -t <Pid> -mtcpdumptcpdump是Linux原生的抓包工具,罕用与在linux零碎上抓包,常见几种用法如下。# 罕用用法:# 抓取某网卡所有数据包$ tcpdump -i <网卡名># 抓取蕴含某IP的网络包$ tcpdump -i <网卡名> -vnn host <IP># 抓取某源IP的网络包$ tcpdump -i <网卡名> -vnn src host <源IP># 抓取某指标IP的网络包$ tcpdump -i <网卡名> -vnn dst host <指标IP># 抓取网络包放到文件$ tcpdump -i <网卡名> -w <文件名>接下来介绍一下如何应用上述命令对容器进行抓包。 1.找到容器Pid 办法一应用docker top命令 $ docker top <container-id>对于个别的容器,只有一个过程,Pid如图所示。 有的容器外面运行着多个过程,个别也是取第一行的Pid,对于多行的能够查看前面CMD启动容器的过程,取后面对应的Pid。 办法二应用docker inspect查看 $ docker inspect <container-id>| grep Pid该命令能够截取到容器过程的Pid。 2.进入容器的命名空间 接下来通过nsenter命令进入容器过程的网络命名空间。 ...

January 5, 2021 · 1 min · jiezi

关于docker:使用docker部署vue项目nginx基础之上

应用环境ubuntu环境先下载nginxsudo apt-get install nginx 装置好的文件地位:/usr/sbin/nginx:主程序/etc/nginx:寄存配置文件/usr/share/nginx:寄存动态文件/var/log/nginx:寄存日志 将vue我的项目打包npm run build同级目录下会生成dist文件夹 开始用docker打包vue我的项目成镜像前提你的ubuntu环境下有docker 在dist同级目录下创立Dockerfile文件进行写入: FROM nginxEXPOSE 80COPY /dist /usr/share/nginx/htmlENTRYPOINT nginx -g "daemon off;" 进入dict目录下的cmd中应用root模式进行docker打包镜像操作docker build -t docker_vue . 呈现上图所示,证实打包实现docker images进行查看镜像 应用docker命令启动镜像运行vue我的项目docker run -tid -p 8888:80 docker_vue 应用8888映射80端口 docker ps查看运行在docker的容器 如图所示docker曾经运行容器,启动vue我的项目。 应用本地ip + 8888端口进行测试 ifconfig 查看本地ipsudo ufw allow 8888 增加8888端口 vue我的项目完满运行!!

January 5, 2021 · 1 min · jiezi

关于docker:Docker-轻量级的虚拟机开发运维一体化核心技术

概念了解:(1)VMware: 虚构残缺的计算机硬件;虚构底层操作系统资源.(2)Docker: 充分利用零碎硬件和宿主机零碎的底层资源;只虚构很少的货色.(3)镜像:虚拟机的动态文件;虚拟机镜像文件能够任意复制、散发.(4)容器:从镜像运行启动的虚拟机. docker手册官网:https://vuepress.mirror.docke... centos7装置docker下载离线安装包:https://download.csdn.net/dow... 安装包下完要放到/root目录下切换到docker-install目录进行装置装置指令: cd -ivh *.rpm yum在线装置docker官网装置手册:https://docs.docker.com/insta...卸载旧版的操作: sudo yum remove docker-ce \ docker-ce-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine装置一组工具:sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 设置yum仓库地址:sudo yum-config-manager \ --add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新yum缓存:sudo yum makecache fast 装置最新版dockersudo yum install -y docker-ce docker-ce-cli containerd.io 启动docker零碎服务启动 docker:sudo systemctl start docker设置docker开机启动:sudo systemctl enable docker 镜像减速因为国内网络问题,须要配置加速器来减速。批改配置文件: /etc/docker/daemon.json上面的指令间接生成文件daemon.jsoncat <<EOF > /etc/docker/daemon.json{ "registry-mirrors": [ ...

January 4, 2021 · 2 min · jiezi

关于docker:Docker基础镜像

镜像是一个只读的 Docker 容器模板,蕴含启动容器所须要的所有文件系统构造和内容。简略来讲,镜像是一个非凡的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。即镜像不蕴含任何动态数据,镜像内容在构建后不会被扭转。 容器目标就是运行利用或者服务,这意味着容器的镜像中必须蕴含利用/服务运行所必须的操作系统和利用文件。然而,容器又谋求疾速和玲珑,这意味着构建镜像的时候通常须要裁剪掉不必要的局部,放弃较小的体积。例如,Docker镜像通常不会蕴含6个不同的Shell让读者抉择——通常Docker镜像中只有一个精简的Shell,甚至没有Shell。镜像中还不蕴含内核——容器都是共享所在Docker主机的内核,所以有时会说容器仅蕴含必要的操作系统(通常只有操作系统文件和文件系统对象)。 镜像操作 拉取镜像Docker 镜像的拉取应用 docker pull 命令, 命令格局个别为 docker pull [Registry]/[Repository]/[Image]:[Tag]。Linux Docker 主机本地镜像仓库通常位于/var/lib/docker/<storage-driver>。 Registry 为注册服务器,Docker 默认会从 docker.io 拉取镜像,如果你有本人的镜像仓库,能够把 Registry 替换为本人的注册服务器。Repository 为镜像仓库,通常把一组相关联的镜像归为一个镜像仓库,library 为 Docker 默认的镜像仓库。Image 为镜像名称。Tag 为镜像的标签,如果你不指定拉取镜像的标签,默认为 latest。注:标有latest标签的镜像不保障这是仓库中最新的镜像。 例如,咱们须要获取一个 busybox 镜像,能够执行以下命令: busybox 是一个集成了数百个 Linux 命令(例如 curl、grep、mount、telnet 等)的精简工具箱。$ docker pull busyboxUsing default tag: latestlatest: Pulling from library/busybox61c5ed1cbdf8: Pull completeDigest: sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977Status: Downloaded newer image for busybox:latestdocker.io/library/busybox:latest实际上执行 docker pull busybox 命令,都是先从本地搜寻,如果本地搜寻不到 busybox 镜像则从 Docker Hub 下载镜像。 查看镜像Docker 镜像查看应用 docker images 或者 docker image ls 命令。如果咱们想要查问指定的镜像,也能够应用 docker image ls 命令来查问。 ...

January 3, 2021 · 2 min · jiezi

关于docker:Docker基础核心概念和架构

外围概念镜像镜像是什么呢?艰深地讲,它是一个只读的文件和文件夹组合。它蕴含了容器运行时所须要的所有根底文件和配置信息,是容器启动的根底。所以你想启动一个容器,那首先必须要有一个镜像。镜像是 Docker 容器启动的先决条件。 容器容器是 Docker 的另一个外围概念。艰深地讲,容器是镜像的运行实体。镜像是动态的只读文件,而容器带有运行时须要的可写文件层,并且容器中的过程属于运行状态。即容器运行着真正的利用过程。容器有创立、运行、进行、暂停和删除五种状态。 尽管容器的实质是主机上运行的一个过程,然而容器有本人独立的命名空间隔离和资源限度。也就是说,在容器外部,无奈看到主机上的过程、环境变量、网络等信息,这是容器与间接运行在主机上过程的本质区别。 仓库Docker 的镜像仓库相似于代码仓库,用来存储和散发 Docker 镜像。镜像仓库分为公共镜像仓库和公有镜像仓库。 目前,Docker Hub 是 Docker 官网的公开镜像仓库,它不仅有很多利用或者操作系统的官网镜像,还有很多组织或者集体开发的镜像供咱们收费寄存、下载、钻研和应用。除了公开镜像仓库,你也能够构建本人的公有镜像仓库。 架构基于凋谢容器打算(OCI)相干规范的要求,Docker 引擎采纳了模块化的设计准则,其组件是可替换的。Docker引擎由如下次要的组件形成:Docker 客户端(Docker Client)、Docker 守护过程(Docker daemon)、containerd 以及 runc。它们独特负责容器的创立和运行。 目前Docker引擎的架构示意图如图所示: Docker客户端Docker 客户端其实是一种泛称。其中 docker 命令是 Docker 用户与 Docker 服务端交互的次要形式。除了应用 docker 命令的形式,还能够应用间接申请 REST API 的形式与 Docker 服务端交互,甚至还能够应用各种语言的 SDK 与 Docker 服务端交互。 runcrunc 是 OCI 容器运行时标准的参考实现,本质上是一个轻量级的、针对 Libcontainer 进行了包装的命令行交互工具(Libcontainer 取代了晚期 Docker 架构中的 LXC)。艰深地讲,runc 是一个用来运行容器的轻量级工具,是真正用来运行容器的。 containerdcontainerd 是 Docker 服务端的一个外围组件,它是从 dockerd 中剥离进去的 ,它的次要工作是容器的生命周期治理——start | stop | pause | rm....。随着工夫的推移,它被赋予了更多的性能,比方镜像治理。 ...

January 3, 2021 · 1 min · jiezi

关于docker:Docker基础基础概念与安装

容器技术业务是基于利用(Application)运行的,大部分利用是运行在服务器之上的。已经每个服务器只能运行繁多利用,Windows和Linux操作系统都没有相应的技术手段来保障在一台服务器上稳固而平安地同时运行多个利用。 为了解决下面的问题,虚拟机技术呈现了。每当业务部门须要减少利用的时候,IT部门会尝试在现有的有闲暇性能的服务器上安装虚拟机并部署新的利用。 不过虚拟机最大的毛病就是依赖其专用的操作系统(OS)。OS会占用额定的CPU、RAM和存储,这些资源本能够用于运行更多的利用。每个OS都须要补丁和监控。另外在某些状况下,OS须要许可证能力运行。 容器模型其实跟虚拟机模型类似,其次要的区别在于,容器的运行不会独占操作系统。实际上,运行在雷同宿主机上的容器是共享一个操作系统的,这样就可能节俭大量的系统资源,如CPU、RAM以及存储。容器同时还能节俭大量破费在许可证上的开销,以及为OS打补丁等运维老本。同时容器还具备启动快和便于迁徙等劣势。 Linux上装置Docker这里简略介绍一下在Linux零碎上装置Docker的两种形式。 脚本装置在Linux上应用wget获取装置脚本并执行: $ wget -qO- https://get.docker.com/ | shyum装置增加 Docker 装置源: $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo装置最新版Docker: $ sudo yum install docker-ce docker-ce-cli containerd.io最好通过非root用户来应用Docker,这时须要增加非root用户到本地Docker Unix组当中: $ sudo usermod -aG docker test如果读者以后登录用户就是要增加到Docker组中的用户的话,则须要从新登录,组权限设置才会失效。 存储驱动的抉择每个Docker容器都有一个本地存储空间,用于保留层叠的镜像层(Image Layer)以及挂载的容器文件系统。 本地存储是通过存储驱动(Storage Driver)进行治理的,尽管存储驱动在下层形象设计中都采纳了栈式镜像层存储和写时复制(Copy-on-Write)的设计思维,然而Docker在Linux底层反对几种不同的存储驱动的具体实现,每一种实现形式都采纳不同办法实现了镜像层和写时复制。尽管底层实现的差别不影响用户与Docker之间的交互,然而对Docker的性能和稳定性至关重要。 在Linux上,Docker可抉择的一些存储驱动包含AUFS(最原始也是最老的)、Overlay2(可能是将来的最佳抉择)、Device Mapper、Btrfs和ZFS。 存储驱动的抉择是节点级别的。这意味着每个Docker主机只能抉择一种存储驱动,而不能为每个容器抉择不同的存储驱动。在Linux上,读者能够通过批改/etc/docker/daemon.json文件来批改存储引擎配置,批改实现之后须要重启Docker才可能失效。上面的代码片段展现了如何将存储驱动设置为overlay2。 { "storage-driver": "overlay2"}如果读者批改了正在运行Docker主机的存储引擎类型,则现有的镜像和容器在重启之后将不可用,这是因为每种存储驱动在主机上存储镜像层的地位是不同的(通常在/var/lib/docker/ <storage-driver>/...目录下)。批改了存储驱动的类型,Docker就无奈找到原有的镜像和容器了。切换到原来的存储驱动,之前的镜像和容器就能够持续应用了。 如果读者心愿在切换存储引擎之后还可能持续应用之前的镜像和容器,须要将镜像保留为Docker格局,上传到某个镜像仓库,批改本地Docker存储引擎并重启,之后从镜像仓库将镜像拉取到本地,最初重启容器。 能够通过上面的命令来查看Docker以后的存储驱动类型。 $ docker system info容器技术原理Docker 是利用 Linux 的 Namespace 、Cgroups 和联结文件系统三大机制来保障实现的, 所以它的原理是应用 Namespace 做主机名、网络、PID 等资源的隔离,应用 Cgroups 对过程或者过程组做资源(例如:CPU、内存等)的限度,联结文件系统用于镜像构建和容器运行环境。 NamespaceNamespace 是 Linux 内核的一项性能,该性能对内核资源进行隔离,使得容器中的过程都能够在独自的命名空间中运行,并且只能够拜访以后容器命名空间的资源。Namespace 能够隔离过程 ID、主机名、用户 ID、文件名、网络拜访和过程间通信等相干资源。 ...

January 3, 2021 · 1 min · jiezi

关于docker:Docker-镜像加速配置实践

因为网络起因,咱们的集体计算机和服务器从 Docker 官网仓库拉取镜像的速度都是很慢的,而且常常会呈现超时的状况。要想下载不超时且速度快,就须要配置一个速度飞起的加速器。 目前提供加速器的厂商不少,这里以阿里云为例,演示如何获取本人的镜像加速器,并通过配置 Docker 使加速器失效。 获取本人的镜像加速器阿里云提供的官网镜像减速服务,关上阿里云容器镜像减速服务页面 https://help.aliyun.com/docum... 依据页面指引,咱们须要在登录阿里云后(如果没有账户就注册一个)关上容器镜像服务控制台。 关上容器镜像服务控制台后点击左侧菜单栏下方的镜像加速器选项,点击后右侧显示对应的内容。 右侧上方列出的加速器地址就是咱们这次操作的指标,拿到这个链接后对 Docker 进行配置即可。 配置镜像加速器Ubuntu/CentosUbuntu 与 Centos 是目前应用最宽泛的操作系统之一,因为它们都是 Linux ,所以具体操作是雷同的。首先关上 /etc/docker/daemon.json 文件,如果没有就创立一个,接着将方才拿到的加速器地址依照配置格局写入到 daemon.json 文件中: { "registry-mirrors": ["https://c5uvansenbu.mirror.aliyuncs.com"]}接着通过命令让 Docker 加载新配置并重启 Docker 服务,具体命令为: sudo systemctl daemon-reloadsudo systemctl restart docker至此,Docker 镜像减速实现。 MacOSMacOS 推出了两款 Docker 利用,MacOS 版本小于 10.10.3 的用户装置的是 Docker Toolbox,反之装置的是 Docker for Mac 利用,大家要分明本人的利用到底是哪一款。 如果是装置 Docker Toolbox 的用户,通过以下命令创立一台装置有 Docker 环境的 Linux 虚拟机,指定机器名为 default 并配置加速器: docker-machine create --engine-registry-mirror=https://c5uvansenbu.mirror.aliyuncs.com -d virtualbox default接着查看机器的环境配置,并配置到本地,并通过 Docker 客户端拜访 Docker 服务: ...

January 1, 2021 · 1 min · jiezi

关于docker:K8S-生态周报-年终大放送Docker-v2010

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Docker v20.10 次要个性一览在之前的 K8S 生态周报| Docker v20.10.0-beta1 公布 一文中,我曾为你介绍过 Docker v20.10.0-beta1 公布相干的信息,然而并没有具体介绍 Docker v20.10 版本的具体性能个性等细节。 Docker v20.10 版本,变动十分的大。提供了 CGroup v2 的反对,加强了 rootless 模式的反对,双栈日志,更灵便的内置 DNS 等,我在这个版本中也破费了很多工夫。具体的变更,我会在 v20.10 正式公布后再进行介绍。欢送大家进行测试和反馈,目前曾经收到了一些反馈的倡议。咱们会尽快修改并公布下个版本。 正如我过后承诺的那样,作为 2020 年最初一篇周报,我来在本篇周报中具体介绍下 Docker v20.10 版本。 装置Docker v20.10 公布于 2020 年 12 月 8 日,是自 Docker v19.03 (2019 年 7 月)后公布的首个大版本。你能够间接通过以下命令来自动化的装置 Docker v20.10。 ➜ ~ curl -fsSL https://get.docker.com |shcgroup v2 反对Docker v19.03 是没有 cgroup v2 反对的,但自从 Fedora 31 开始,这成为了 Fedora 上的默认 cgroup 版本。在 Docker v20.10 公布之前,Fedora 31 及以上用户,须要将零碎的 cgroup 设置为 v1 能力失常运行 Docker 。 ...

January 1, 2021 · 2 min · jiezi

关于docker:dockerjenkins实现自动化部署

背景早上来到公司,咱们做的第一件事件就是从源码库签出最新的源码,而后进行单元测试,如果发现失败的测试,会找相干的共事一起调试,修复错误代码。接着回到本人的工作上来,编写本人的产品代码。忙到午饭时间,代码编写得差不多了,测试也通过了,开心地享受午餐,而后劳动。谁料QA小组又发过来了几个bug,没方法,先本地重现再说,于是熟练地用IDE生成了一个WAR包,部署到Web容器下,启动容器。看到相熟的界面了,遵循bug报告,一步步重现了bug,快下班的时候,bug修好了,提交代码,在欢快中完结了一天的工作。认真总结一下,咱们会发现,除了编写源代码,咱们每天有相当一部分工夫花在了编译、打包和部署等繁缛且不起眼的工作上。如果咱们当初还手工这样做,那老本也太高了,于是有人用软件的办法让这一系列工作齐全自动化,使得软件的构建能够像全自动流水线一样,只须要一条简略的命令,所有繁缛的步骤都可能主动实现。 工具介绍Jenkins是一个开源软件我的项目,是基于Java开发的一种继续集成工具,用于监控继续反复的工作,旨在提供一个凋谢易用的软件平台,通过提供超过1000个插件来反对构建、部署、自动化, 满足任何我的项目的须要。Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的Linux机器或Windows 机器上,也能够实现虚拟化,容器是齐全应用沙箱机制,相互之间不会有任何接口。Rancher是一个开源的企业级容器治理平台。通过Rancher,企业再也不用本人应用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中应用的治理Docker和Kubernetes的全栈化容器部署与治理平台。 docker装置操作系统:centos7.5应用官网装置脚本主动装置装置命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也能够应用国内 daocloud 一键装置命令:curl -sSL https://get.daocloud.io/docker | sh 应用yum命令装置装置命令如下:yum install -y docker设置阿里仓库地址:echo '{"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json启动:systemctl start docker设置开机自启:systemctl enable docker rancher装置命令:docker run -d --name rancher-server -p 8080:8080 --restart=unless-stopped -e DEFAULT_CATTLE_CATALOG_URL='{"catalogs":{"library":{"url":"http://git.oschina.net/rancher/rancher-catalog.git","branch":"k8s-cn"}}}' rancher/server:stable && sudo docker logs -f rancher-server -d(可选)在后盾运行容器(即“拆散”模式)并输入容器ID。如果您不指定此选项, 则在终端窗口中输入正在运行的此容器的Docker日志。-p 8080:8080 映射(例如“公布”)rancher-server容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最初一个代表容器的端口。-e DEFAULT_CATTLE_CATALOG_URL='{"catalogs":{"library":{"url":"http://git.oschina.net/rancher/rancher-catalog.git","branch":"k8s-cn"}}}' 设置环境变量,默认的rancher商店地址国内拜访迟缓 Jenkins装置命令:docker run \ -u root \ -d --name jenkins \ -p 8081:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean && sudo docker logs -f jenkins ...

December 31, 2020 · 1 min · jiezi

关于docker:Docker安装RocketMQ

留神:没有docker环境的能够参考自己的centos装置docker1.查问有哪些能够用的rocketMqdocker search rocketmq2.拉取镜像docker pull rocketmqinc/rocketmq3.启动namesrv服务(新建文件门路我的是/www/mq) docker run -d -p 9876:9876 -v /www/mq/data/namesrv/logs:/root/logs -v /www/mq/data/namesrv/store:/root/store --name rmqnamesrv -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms1024m -Xmx1024m" rocketmqinc/rocketmq sh mqnamesrv4.配置 brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHnamesrvAddr = 127.0.0.1:9876brokerIP1 = 127.0.0.1#是否容许 Broker 主动创立Topic,倡议线下开启,线上敞开 autoCreateTopicEnable=true#是否容许 Broker 主动创立订阅组,倡议线下开启,线上敞开 autoCreateSubscriptionGroup=true5.启动服务 docker run -d -p 10911:10911 -p 10909:10909 -v /www/mq/data/broker/logs:/root/logs -v /www/mq/rocketmq/data/broker/store:/root/store -v /www/mq/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms1024m -Xmx1024m" rocketmqinc/rocketmq sh mqbroker6.装置控制台 ...

December 29, 2020 · 1 min · jiezi

关于docker:E-Unable-to-locate-package-nvidiacontainertoolkit

装置nvidia-container-toolkit呈现Reading package lists... DoneBuilding dependency treeReading state information... DoneE: Unable to locate package nvidia-container-toolkit解决办法(程序执行)$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit$ sudo systemctl restart docker问题解决。

December 29, 2020 · 1 min · jiezi

关于docker:Docker-入门实践

Docker 介绍参考:为什么须要Docker?Docker 是一个开源的利用容器引擎,基于 Go 语言并听从 Apache2.0 协定开源。 次要利用场景如下: 环境隔离容器间环境互相独立,互不影响。相似于虚拟机,但相比于更轻量。Docker 各个容器共享一个操作系统内核,而每一个虚拟机都有一套残缺的操作系统。 整体部署能够将一整套环境构建为镜像,进行整体部署,防止线上线下开发环境带来的各种问题,同时也极大地提高了部署效率,不再须要反复配置开发环境。 Docker 架构Docker 的三个重要概念: 镜像(Image)相当于一个操作系统模板,比方官网镜像 mysql 就蕴含了一套残缺的操作系统。 容器(Container)容器是镜像运行的实体,好比于 Java 中对象是类的实例。容器能够被创立、启动、暂停和进行等。 仓库(Repository)保留镜像的仓库,好比于 Maven 仓库用来保留依赖的 Jar 包。 Docker 应用客户端-服务器 (C/S) 架构模式,应用近程 API 来治理和创立 Docker 容器。 Docker_Client通过命令行与 Docker daemon(守护过程)通信。 Docker_Host用于执行 Docker daemon 的主机。 RegistryDocker 仓库,一个 Registry 能够蕴含多个 Repository 仓库。 Docker 装置CentOS卸载旧版本(如果存在)yum remove docker docker-common docker-selinux docker-engine装置依赖软件包yum install -y yum-utils device-mapper-persistent-data lvm2设置 yum 源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo装置 Dockeryum install -y docker-ce docker-ce-cli containerd.io可能因为版本起因提醒 requires containerd.io >= 1.2.2-3,先手动装置新版 containerd.io: ...

December 28, 2020 · 3 min · jiezi

关于docker:向Docker告别的时候到了

在容器的远古期间(大概4年前),Docker是容器游戏中仅有的参与者。然而当初状况不一样了,Docker不再是惟一的一个了,只是另一个容器引擎而已。Docker容许咱们构建,运行,拉取,上传,查看容器镜像,然而对每一项工作都有其余能够比Docker做得更好的工具。因而,让咱们看看当初的状况,卸载(只是可能)并且遗记Docker的全副信息。 不过,为什么不应用Docker?如果你是一名Docker的老鸟,我想即便思考应用不同的工具,也须要一些压服本人的理由。那么,理由就在这里: 首先,Docker是一个尝试做所有事件的工具,通常来说这并不是最好的形式。大多数状况下,最好抉择一种专门只做一件事,并且能把这件事做得十分好的工具。 如果你放心切换到不同的工具后,不得不学着应用不同的CLI,不同的API或者通常不太一样的概念,那么这不会成为一个问题。抉择接下来文章中的任何工具都是齐全无缝的,因为它们(包含Docker)都遵循了OCI(Open Container Initiative)的雷同标准。这个标准中蕴含了容器的运行时,分布式,镜像,涵盖了容器须要的所有个性。 因为OCI的存在,你能够抉择一套最适宜你的工具集,与此同时,依然能够应用雷同的API和CLI命令,就像Docker一样。 所以,如果你想尝试新的工具,接下来咱们比拟一下Docker和它的竞争对手都有哪些优缺点和个性,看看是不是有必要思考放弃Docker,而应用一些新的亮瞎眼的工具。 容器引擎 在比拟Docker和其余亮瞎眼的工具时,咱们须要将其合成为组件。首先咱们要探讨的是容器引擎。容器引擎是一种能够提供操作镜像和容器用户接口的一种工具,有了它你就不须要解决SECCOMP机制或者SELinux策略等一系列的事件。它的工作还包含从近程仓库中拉取镜像并将其扩大到硬盘。它看起来也运行容器,但实际上它的工作是创立容器清单和带有镜像层的目录。而后将他们传递到容器运行时,就像runc或crun(稍后探讨)。 当初有许多可用的容器引擎,但Docker泛滥的竞争中最突出的是Red Hat开发的Podman。和Docker不同的是,Podman不须要守护过程来运行,也不须要root权限,这是Docker长期以来关注的问题。Podman不仅能够运行容器,还能够运行pod。如果你不相熟pod的概念,pod就是Kubernetes中的最小可部署计算单元。它由一个或多个容器组成执行工作。这使Podman的用户能更容易的将作业迁徙到Kubernetes。因而,作为一个简略的演示,接下来就是如果在一个pod中运行两个容器: ; "复制代码") ~ $ podman pod create --name mypod ~ $ podman pod list POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID211eaecd307b mypod Running 2 minutes ago 1 a901868616a5 ~ $ podman run -d --pod mypod nginx # First container ~ $ podman run -d --pod mypod nginx # Second container ~ $ podman ps -a --pod ...

December 28, 2020 · 2 min · jiezi

关于docker:向Docker告别的时候到了

在容器的远古期间(大概4年前),Docker是容器游戏中仅有的参与者。然而当初状况不一样了,Docker不再是惟一的一个了,只是另一个容器引擎而已。Docker容许咱们构建,运行,拉取,上传,查看容器镜像,然而对每一项工作都有其余能够比Docker做得更好的工具。因而,让咱们看看当初的状况,卸载(只是可能)并且遗记Docker的全副信息。 不过,为什么不应用Docker?如果你是一名Docker的老鸟,我想即便思考应用不同的工具,也须要一些压服本人的理由。那么,理由就在这里: 首先,Docker是一个尝试做所有事件的工具,通常来说这并不是最好的形式。大多数状况下,最好抉择一种专门只做一件事,并且能把这件事做得十分好的工具。 如果你放心切换到不同的工具后,不得不学着应用不同的CLI,不同的API或者通常不太一样的概念,那么这不会成为一个问题。抉择接下来文章中的任何工具都是齐全无缝的,因为它们(包含Docker)都遵循了OCI(Open Container Initiative)的雷同标准。这个标准中蕴含了容器的运行时,分布式,镜像,涵盖了容器须要的所有个性。 因为OCI的存在,你能够抉择一套最适宜你的工具集,与此同时,依然能够应用雷同的API和CLI命令,就像Docker一样。 所以,如果你想尝试新的工具,接下来咱们比拟一下Docker和它的竞争对手都有哪些优缺点和个性,看看是不是有必要思考放弃Docker,而应用一些新的亮瞎眼的工具。 容器引擎 在比拟Docker和其余亮瞎眼的工具时,咱们须要将其合成为组件。首先咱们要探讨的是容器引擎。容器引擎是一种能够提供操作镜像和容器用户接口的一种工具,有了它你就不须要解决SECCOMP机制或者SELinux策略等一系列的事件。它的工作还包含从近程仓库中拉取镜像并将其扩大到硬盘。它看起来也运行容器,但实际上它的工作是创立容器清单和带有镜像层的目录。而后将他们传递到容器运行时,就像runc或crun(稍后探讨)。 当初有许多可用的容器引擎,但Docker泛滥的竞争中最突出的是Red Hat开发的Podman。和Docker不同的是,Podman不须要守护过程来运行,也不须要root权限,这是Docker长期以来关注的问题。Podman不仅能够运行容器,还能够运行pod。如果你不相熟pod的概念,pod就是Kubernetes中的最小可部署计算单元。它由一个或多个容器组成执行工作。这使Podman的用户能更容易的将作业迁徙到Kubernetes。因而,作为一个简略的演示,接下来就是如果在一个pod中运行两个容器: ~ $ podman pod create --name mypod~ $ podman pod listPOD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID211eaecd307b mypod Running 2 minutes ago 1 a901868616a5~ $ podman run -d --pod mypod nginx # First container~ $ podman run -d --pod mypod nginx # Second container~ $ podman ps -a --podCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD POD NAME3b27d9eaa35c docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 1 second ago brave_ritchie 211eaecd307b mypodd638ac011412 docker.io/library/nginx:latest nginx -g daemon o... 5 minutes ago Up 5 minutes ago cool_albattani 211eaecd307b mypoda901868616a5 k8s.gcr.io/pause:3.2 6 minutes ago Up 5 minutes ago 211eaecd307b-infra 211eaecd307b mypod最初,Podman提供来和Docker齐全一样的CLI命令,你只须要将docker重命名为podman即可。 ...

December 28, 2020 · 2 min · jiezi

关于docker:Docker-新发布的-hubtool-可直接查看账户配额

Docker Desktop v3.0 已于前两周正式公布,从这个版本起,Docker 官网承诺每次的更新将以增量更新的形式来提供,以便缩小下载包的体积,晋升效率。 除了将 Docker Engine 更新至 v20.10.0 外,也对其余的依赖做了更新,如下图: 最吸引我的是本次新增的 Docker Hub Tool v0.2.0 ,它是 Docker 官网提供的 Docker Hub CLI 工具,具备治理 DockerHub 上的帐号,镜像等相干资源的能力。 以下,我来为你介绍下 Hub Tool 的次要性能。 (MoeLove) ➜ hub-tool -hA tool to manage your Docker Hub imagesUsage: hub-tool hub-tool [command]Available Commands: account Manage your account help Help about any command login Login to the Hub logout Logout of the Hub org Manage organizations repo Manage repositories tag Manage tags token Manage Personal Access Tokens version Version information about this toolFlags: -h, --help help for hub-tool --verbose Print logs --version Display the version of this toolUse "hub-tool [command] --help" for more information about a command.从一级菜单来看,次要性能包含: ...

December 24, 2020 · 4 min · jiezi

关于docker:使用docker来对接SRS40与HIKVSION监控视频GB28181的支持

SRS是一款开源流媒体,适宜直播以及低延时流媒体畛域,然而从来不设限,能够利用在直播、视频会议、在线教育等场景。同时视频畛域还有两大块、广电和视频监控,随着互联网的迅速倒退,视频监控设施上云的需要越来越多,以前还能够私有化局域网外面搞一搞,然而随着挪动互联网的倒退,视频监控有大量的挪动端直播需要,让人随时随地能看解决监控报警事件、查看回放视频是刚需。同时这几年红黄蓝幼儿园事件、不良商家光明操持问题层出不穷,所以视频监控从行业逐步走向民用,安全校园、明厨亮灶、智慧社区、智能家居等场景的落地,更是放慢了视频监控上云的趋势。 Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。 这次应用docker来对接一下SRS4.0和海康监控设施的GB28181的反对。首先我应用的是阿里云服务器,在下面装置了docker.装置docker实现后能够应用docker -v查看docker的版本。 拉去srs的docker镜像docker pull registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 创立SRS的docker容器docker run -itd -p 1935:1935 -p 1985:1985 -p 8088:8080 -p 5060:5060/udp -p 9000:9000/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs我的8080有货色占用所以映射成8088docker ps查看运行的docker容器 能够应用命令查看端口是否开启ss -antlp|grep 1935 (查看tdp)ss -untlp|grep 9000 (查看udp) 并且在阿里云服务器将这些端口开启应用。 创立好容器后进入容器编译环境docker exec -ti xxx(容器id) /bin/bash 编译环境(git,vim,gcc,gcc-c++,patch,unzip等)yum -y install gcc gcc-c++yum install -y patchyum install -y unzipyum -y install gcc automake autoconf libtool makeyum install -y gityum install -y vim ...

December 22, 2020 · 1 min · jiezi

关于docker:Cannot-connect-toxxx-docker-daemon-running

Dec 22 14:50:27 master49 kubelet: F1222 14:50:27.123073 30898 server.go:274] failed to run Kubelet: failed to get docker version: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?Dec 22 14:50:27 master49 systemd: Unit kubelet.service entered failed state.Dec 22 14:50:27 master49 systemd: kubelet.service failed.^C[root@master49 ~]# docker infoClient: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.0-docker)Server:ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?errors pretty printing info[root@master49 ~]# service docker restartRedirecting to /bin/systemctl restart docker.service[root@master49 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@master49 ~]# systemctl daemon-reload[root@master49 ~]# service docker restartRedirecting to /bin/systemctl restart docker.service[root@master49 ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONmaster49 Ready master 28h v1.18.2master50 Ready master 28h v1.18.2master56 Ready master 28h v1.18.2node52 Ready <none> 28h v1.18.2node53 Ready <none> 28h v1.18.2我是批改过 /etc/docker/daemon.json 而后改好后呈现的问题 ...

December 22, 2020 · 1 min · jiezi

关于docker:Docker从入门到干活看这一篇足矣

欢送微信搜寻公众号【java版web我的项目】获取资源:java学习视频/设计模式笔记/算法手册/java我的项目 容器简介什么是 Linux 容器Linux容器是与零碎其余局部隔离开的一系列过程,从另一个镜像运行,并由该镜像提供反对过程所需的全副文件。 容器提供的镜像蕴含了利用的所有依赖项,因此在从开发到测试再到生产的整个过程中,它都具备可移植性和一致性。 更加具体地来说,请您假设您在开发一个利用。您应用的是一台笔记本电脑,而且您的开发环境具备特定的配置。其余开发人员身处的环境配置可能稍有不同。您正在开发的利用依赖于您以后的配置,还要依赖于某些特定文件。 与此同时,您的企业还领有标准化的测试和生产环境,且具备本身的配置和一系列反对文件。 您心愿尽可能多在本地模仿这些环境,而不产生从新创立服务器环境的开销。 因而,您要如何确保利用可能在这些环境中运行和通过品质检测,并且在部署过程中不呈现令人头疼的问题,也无需从新编写代码和进行故障修复?答案就是应用容器。 容器能够确保您的利用领有必须的配置和文件,使得这些利用可能在从开发到测试、再到生产的整个流程中顺利运行,而不呈现任何不良问题。这样能够防止危机,做到大快人心。 尽管这只是简化的示例,但在须要很高的可移植性、可配置性和隔离的状况下,咱们能够利用 Linux 容器通过很多形式解决难题。 无论基础架构是在企业外部还是在云端,或者混合应用两者,容器都能满足您的需要。 容器不就是虚拟化吗是,但也不居然。咱们用一种简略形式来思考一下: 虚拟化使得许多操作系统可同时在单个零碎上运行。 容器则可共享同一个操作系统内核,将利用过程与零碎其余局部隔离开。 图 - 一般虚拟化技术和Docker的比照 这意味着什么?首先,让多个操作系统在单个虚拟机监控程序上运行以实现虚拟化,并不能达成和应用容器等同的轻量级成果。 事实上,在仅领有容量无限的无限资源时,您须要可能能够进行密集部署的轻量级利用。 Linux 容器可从单个操作系统运行,在所有容器中共享该操作系统,因而利用和服务可能放弃轻量级,并行疾速运行。 容器倒退简史  咱们当初称为容器技术的概念最后呈现在 2000 年,过后称为 FreeBSD jail,这种技术可将 FreeBSD 零碎分区为多个子系统(也称为 Jail)。 Jail 是作为平安环境而开发的,系统管理员可与企业外部或内部的多个用户共享这些 Jail。 Jail 的目标是让过程在通过批改的 chroot 环境中创立,而不会脱离和影响整个零碎 — 在 chroot 环境中,对文件系统、网络和用户的拜访都实现了虚拟化。 只管 Jail 在施行方面存在局限性,但最终人们找到了脱离这种隔离环境的办法。 但这个概念十分有吸引力。 2001 年,通过 Jacques Gélinas 的 VServer 我的项目,隔离环境的施行进入了 Linux 畛域。 正如 Gélinas 所说,这项工作的目标是“在高度独立且平安的繁多环境中运行多个通用 Linux 服务器 [sic]。” 在实现了这项针对 Linux 中多个受管制用户空间的基础性工作后,Linux 容器开始逐步成形并最终倒退成了当初的模样。 什么是 Docker?“Docker” 一词指代多种事物,包含开源社区我的项目、开源我的项目应用的工具、主导反对此类我的项目的公司 Docker Inc. 以及该公司官网反对的工具。技术产品和公司应用同一名称,确实让人有点困惑。 ...

December 20, 2020 · 2 min · jiezi

关于docker:Docker实战

Docker实战 作者:hackett 微信公众号:加班猿 一、筹备工具云服务器我用的是腾讯云的Centos7.5 64位不到一百块一年的云服务器,你也能够用虚拟机 二、登录服务器工具MobaXterm1、之所以用这个作为ssh客户端,次要起因就是基于MobaXterm弱小且丰盛的性能,并且还都是收费的 MobaXterm次要性能: 反对各种连贯 SSH,X11,RDP,VNC,FTP,MOSH反对 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…)连贯 SSH 终端后反对 SFTP 传输文件各种丰盛的插件(git/dig/aria2…)可运行 Windows 或软件下载地址:https://mobaxterm.mobatek.net/download-home-edition.html 2、登录服务器 三、Centos Docker装置1、应用官网装置脚本装置  curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2、应用国内 daocloud 一键装置命令  curl -sSL https://get.daocloud.io/docker | sh3、查看是否装置胜利(docker -v)  [root@VM-0-11-centos ~]# docker -v Docker version 20.10.0, build 7287ab3 [root@VM-0-11-centos ~]#4、启动docker  sudo systemctl start docker5、通过hello world映像验证是否正确装置Docker  [root@VM-0-11-centos ~]# sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec Status: Downloaded newer image for hello-world:latest  Hello from Docker! //能够看到这里胜利运行了 This message shows that your installation appears to be working correctly.  To generate this message, Docker took the following steps:  1. The Docker client contacted the Docker daemon.  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.  (amd64)  3. The Docker daemon created a new container from that image which runs the  executable that produces the output you are currently reading.  4. The Docker daemon streamed that output to the Docker client, which sent it  to your terminal.  To try something more ambitious, you can run an Ubuntu container with:  $ docker run -it ubuntu bash  Share images, automate workflows, and more with a free Docker ID:  https://hub.docker.com/  For more examples and ideas, visit:  https://docs.docker.com/get-started/  [root@VM-0-11-centos ~]#四、Docker实战开始1、Docker Hello WorldDocker 容许你在容器内运行应用程序, 应用 docker run 命令来在容器内运行一个应用程序 ...

December 20, 2020 · 5 min · jiezi

关于docker:Kubernetes-弃用-DockerArtifactory-新版本已经支持-OCI-镜像

1. 背景Kubernetes 在 v1.20.0-rc.0版本中弃用了 kubelet中对Docker引擎的反对,对于 dockershim也将在下个版本中弃用。 2. 如何应答?对于 Kubernetes 的最终用户,此次调整并不会有太大影响,Docker 能够持续构建容器镜像,这些镜像也可能在 Kubernetes 集群中失常运行。 如果不想被 Docker 绑定,能够跟着 Kubernetes 社区的技术栈生态应用 OCI兼容的客户端。 2.1 什么是OCI?OCI(Open Container Initiative)是 Linux 基金会我的项目为容器设计的规范。它定义了运行容器时所须要遵循的镜像标准和运行时标准。 Docker 是该项目标成员,它应用 OCI 标准,并且扩大了额定的镜像 layout 和不同的运行时行为。 但也就意味着Docker 不再一家独大,遵循该规范的其余实现也能够沉闷在 Kubernetes 舞台上,例如 兼容OCI 的运行时 runc,和轻量级的 cri-o,以及以平安著称的 rkt。OCI 镜像特点: 和 Docker 镜像相似,蕴含 manifest file, config layer, data layersOCI 的 media type 和 Docker 不同Artifactory 将 OCI 镜像的media type 存储在 manifest file 的属性页面上。Artifactory 反对 OCI 的索引2.2 Artifactory 的新版本反对 OCI 镜像治理 ...

December 18, 2020 · 1 min · jiezi

关于docker:docker-Error-response-from-daemon-could-not-select-driver

问题:运行docker呈现以下谬误:docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].解决方案:首先装置通过以下命令装置nvidia-container-toolkitsudo apt-get update && sudo apt-get install -y nvidia-container-toolkit2.而后执行systemctl restart dockerd 重启docker服务。 问题解决!

December 17, 2020 · 1 min · jiezi

关于docker:基于docker的nginx基础配置

目录构造, 如图 docker-compose.yml配置文件version: '3.1'services: nginx: image: daocloud.io/library/nginx:1.14 container_name: nginx restart: always privileged: true environment: - TZ=Asia/Shanghai ports: - 999:80 - 998:443 volumes: - /etc/localtime:/etc/localtime:ro - ./conf:/etc/nginx/conf.d - ./logs:/var/log/nginx - ./html:/opt/dist:ro networks: - nginx_bridgenetworks: nginx_bridge: driver: bridgeconf/nginx.conf配置文件server { listen 80; server_name thatsmycicd; gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 200; gzip_types text/css text/xml application/x-javascript; location / { root /opt/dist; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /opt/dist; }}这个startup.sh是过后为了删除多余容器写的, 留着备用#! /usr/bin/bash# 定义一个名称变量network_name="nginx_bridge"filterName=`docker network ls | grep $network_name | awk '{ print $2 }'`if [ "$filterName" == "" ]; then # 不存在就创立 docker network create $network_name echo "Created network $network_name success!!"fidocker-compose -f ./docker-compose.yml up -ddocker ps -adocker logs -f nginx

December 15, 2020 · 1 min · jiezi

关于docker:前端CICD从零开始彻底弄懂前端自动化构建和部署CD篇

实现思路1.程序员在本地进行开发2.程序员将批改后的代码提交到gitlab代码仓库3.gitlab收到代码后通过webhook告诉jenkins进行构建4.jenkins构建好了当前将构建好当前的代码公布的到线上服务器 劣势gitlab、jenkins、生产服务器这三个服务都能够散布在不同的服务器, 所以大大提高了可配置性也升高了耦合。 环境筹备gitlab代码仓库(能够在线上, 也能够在本地)jenkins服务(能够跟gitlab不在同一个服务器上, 然而这里没有必要, 我把gitlab和jenkins都部署在本地服务器)生产环境gitlab和jenkins服务我都是通过docker-compose进行装置的, 这个具体我就不多说了, 上面我贴一下docker-compose.yml文件# gitlab的docker-compose.yml文件version: "3"services: gitlab: image: twang2218/gitlab-ce-zh container_name: gitlab restart: always privileged: true hostname: '192.168.4.2' environment: TZ: 'Asia/Shanghai' GITLAB_OMNIBUS_CONFIG: | external_url "http://192.168.4.2:82" gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_shell_ssh_port'] = 2222 gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'liaoxubao@aliyun.com' gitlab_rails['gitlab_email_display_name'] = 'liaoo' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.aliyun.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "liaoxubao@aliyun.com" gitlab_rails['smtp_password'] = "jhudkir123" gitlab_rails['smtp_domain'] = "aliyun.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_openssl_verify_mode'] = 'peer' gitlab_rails['smtp_tls'] = true nginx['listen_port'] = 82 ports: - '82:82' - '2222:22' volumes: - '/mydata/gitlab/config:/etc/gitlab' - '/mydata/gitlab/logs:/var/log/gitlab' - '/mydata/gitlab/data:/var/opt/gitlab' logging: driver: "json-file" options: max-size: "20m" max-file: "10"# jenkins的docker-compose.yml文件version: '3.1'services: jenkins: image: jenkins/jenkins restart: always container_name: jenkins environment: TZ: Asia/Shanghai ports: - "8888:8080" user: root volumes: - ./data:/var/jenkins_home两个服务跑起来, 不跟你多BB, 撸起袖子就是一行hello world ...

December 14, 2020 · 2 min · jiezi

关于docker:docker-镜像构建-适用于arm-mips64-sw64-不使用dockerfile

这是我在思否上的第一篇文章,搬运一下本人在春节时因病毒宅在家里时写的文章。 docker这个不便的工具能够疾速的部署本人的利用,然而其中最根本的形式就是创立一个docker image,然而docker hub上并没有咱们所须要的image,因而在某些状况下,能够本人创立一个minimal docker images;介绍一个基于REDHAT系列的制基于该平台的docker images,实用于其余cpu哦,比方mips,sw等 其实咱们能够晓得,docker images的本质是一个mini的rootfs,而咱们通过下述办法制作进去的rootfs,仅仅是一个能用的images,不适用于咱们生产或者开发啦!然而咱们能够在这个根底上进行定制化开发,装咱们须要的软件安装包 # Create a folder for our new root structure# 创立根文件系统目录$ export centos_root='/centos_image/rootfs'$ mkdir -p ${centos_root}# download and install the centos-release package, it contains our repository sources# 下载centos-release,这外面蕴含了一个最小minimal rootfs最小的包$ yum reinstall --downloadonly --downloaddir . centos-release$ rpm --root ${centos_root} -ivh --nodeps centos-release*.rpm# 安装包$ yum -y --installroot=${centos_root} --setopt=tsflags='nodocs' --setopt=override_install_langs=en_US.utf8 install yum# 将宿主机上的配置cp 到本人创立的根文件目录$ cp /etc/resolv.conf ${centos_root}/etc# mount the device tree, as its required by some programms# 创立根文件目录外面所须要的零碎安装包,不过不同平台的image 存在不同的差别,有些最小的安装包,差tar$ mount -o bind /dev ${centos_root}/dev$ chroot ${centos_root} /bin/bash <<EOFyum install -y procps-ng iputilsyum clean allEOF$ rm -f ${centos_root}/etc/resolv.conf$ umount ${centos_root}/dev# over# 创立结束# 导入docker中,因为是rootfs文件系统,所以须要应用import 参数$ tar -C ${centos_root} -c . |docker import - centos接下来是介绍一种基于debian发行版上制作镜像的方法 ...

December 13, 2020 · 1 min · jiezi

关于docker:docker的衰落与kubernetes的兴起

kubernetes 1.20中对于docker的弃用,引发的探讨很多,对于docker兴起的话题又热了起来。对这一事件,咱们找了OPPO一位工程师大佬,从技术人员的角度说说这个事。他自己2014年开始从事容器化相干工作,目前负责OPPO云平台的编排与调度方向的工作。随同着kubernetes 1.20中对于docker的弃用,对于docker的灭亡与kubernetes的衰亡的话题再度热了起来。探讨中对于docker灭亡的观点我不敢苟同。docker还远未达到灭亡的水平。相较而言,我感觉更失当的说法应该是docker的衰败。本文我也就我集体的角度,聊聊我所经验的docker的衰败与kubernetes的衰亡。 横空出世——docker的衰亡 第一次接触docker,是2014年。过后OpenStack的次要负载还是kvm。而咱们也尝试过了更为轻量的lxc,然而以失败而告终了。docker这个集装箱的小图标配上docker container的理念,一下子就吸引住了大家的眼光。经验过制作lxc镜像的苦楚,你就会更领会到docker的可贵。繁琐的lxc镜像制作与精简的Dockerfile相比,孰高孰低、孰优孰劣堪称是高深莫测。 docker胜利的将cgroup、union filesystem、namespace这些较为稳固和成熟的技术联合了起来,辅以docker image的制作工艺,实现了集装箱式的规范交付。 这时候的docker,颇有种“举天下之俊杰而莫能与之争”的声势。尽管在生产环节还是或多或少,还有这样那样的问题,然而docker曾经跨过了POC(Proof of concept)阶段,进入了pre-product的行列了。在对docker深度定制后,最终咱们团队也将OpenStack + docker的组合胜利推向了生产。 那两年,知不知道docker、会不会做镜像、懂不懂docker原理成为基础架构畛域面试的常见话题。尽管只有少数几个公司敢为天下先,将docker搬上了生产,然而曾经没有人能够疏忽这颗冉冉升起的新星了。 那时沉闷在各个会议、论坛上的都是docker的话题。大家热衷于探讨生产上docker遇到的坑。大家各出奇招,修修补补,趔趔趄趄,docker总算也是被搬上了生产。而在这时,即便是技术激进、持彷徨张望态度的公司,也都会安顿一些人力着手跟进docker的倒退与各个公司的实践经验了,这时候的docker真的是风头无两。 生来伟人——kubernetes 工夫到了2015年,此时我转而负责进行CaaS(Container as a Service)服务的调研。这时候大家都在说CaaS,然而每个人说的都不一样,其实大家都是摸着石头过河。在此期间,以钻研OpenStack的magnum为契机,我接触到了swarm和kubernetes。 swarm是docker公司力推的集群治理计划。docker、swarm和compose组成的三剑客残缺笼罩了运行时、集群治理与编排,形成了一个看起来牢不可摧的生态系统。特地是别具匠心的将swarm的api与docker的api进行了拉齐,将集群的治理复杂度与单节点的治理复杂度向用户进行屏蔽,倒是有一种如臂使指的快感。这个设计直到现在我都还感觉立意真的很精美。 而老成持重的kubernetes也来势汹汹。背靠Google的大旗,有Borg的背书,kubernetes在声势上一点不输swarm + compose的组合。随同着kubernetes 1.0的公布,kubernetes也从幕后走向了台前,开始大规模承受来自全世界的PR提交,在性能、性能和稳定性上疾速晋升。 到kubernetes 1.2版本,通过咱们外部评估,曾经具备生产级的品质。而申明式API、简洁的架构、灵便的标签等优良的设计,在做选型时曾经让咱们齐全没有理由回绝。而后通过数月缓和的开发,kubernetes + docker的组合被搬上了舞台,并且以极快的速度侵蚀OpenStack + docker的份额。 此时的docker曾经开始被限度为了容器的运行时和镜像制作工具。捆住了docker的手脚,kubernetes曾经没有了能够掰手段的对手,一统江湖的路上kubernetes再无障碍。 美人迟暮——docker的衰败 时至今日,docker的衰败曾经成为了不争的事实,而造成这个后果的起因,我感觉是多方面的。 一部分是docker本身的关闭和回心转意。我已经记得在过后参加了过后社区多个PR的探讨。新增一个feature的超长的周期,曾经能够磨掉少数人的急躁。docker社区在多个观点上略显激进的形式,让大家逐步失去了参加的激情。 另一方面,也是更为重要的一点,是容器技术自身的门槛曾经被冲破,曾经无奈造成技术上的护城河。而容器技术之争,曾经转化为规范之争,而对于规范上更有发言权的一方,无疑是具备更多用户、更宏大社区和更弱小的平台的一方。在短短两三年的工夫内,天平就疾速地向kubernetes歪斜,其主导的CRI、CNI、CSI规范曾经成为了事实上的通行规范。而相较之下,docker力推的CNM等规范则显得曲高和寡。 与此同时,kubernetes并没有放弃被动的防御。kubernetes的强势和培植其余容器运行时减速了docker的衰败。在1.6版本弃用docker manager直连docker,转向CRI + dockershim的组合时,就注定了kubernetes会走到齐全解耦docker,也就是明天这一步。 另外,其余容器运行时也开始了瓜分市场份额。如果说gVisor、Kata只是尝试挑战docker在局部场景中的位置,那么红帽的Podman则曾经吹响了全面防御的号角。再联合前两年docker的一些融资和收买风闻,平添了一种英雄末路、美人迟暮的伤感。 回顾 世间多少英雄戏,每到开场总伤神。 六年回望,其实无论是在过后还是当初来看,docker都是一个革命性的产品。docker的衰败并不是意味着容器运行时不重要了,而是大家越来越司空见惯了。 时至今日,容器运行时作为一个大部曾经被解决的问题,一个绝对成熟的模块,曾经成为了整个基础架构体系的一部分。而作为下层的平台和更为下层的用户来说,对此将会给予越来越少的关注,这就像当初大多数用户并不会去关怀内核了一样。 甚至在将来,我预测运行时都有可能会成为一个内核级别的从属模块,会预装到许多的发行版上,其运行也逐步对大多数用户变得更加通明(理论红帽曾经开始向这个方向做了)。而越来越多的用户则会将更多的注意力集中在下层的交付、治理、编排上。 至于kubernetes会不会衰败,我感觉在中短期内(五年内)不会。kubernetes曾经成为了一个平台级的我的项目。在这点上,kubernetes作为平台将比工具性质的docker具备更强的生命力。

December 9, 2020 · 1 min · jiezi

关于docker:K8S-弃用-Docker-了Docker-不能用了别逗了

Docker 大略没想到,2020 年,它在技术圈内的两次成为(舆论的)焦点,居然都是因为信息差(说是“题目党”也不为过)。概览2013 年Docker 是在 2013 年的 PyCon 上首次正式对外颁布的。它带来了一种先进的软件交付形式,即,通过容器镜像进行软件的交付。工程师们只须要简略的 docker build 命令即可制作出本人的镜像,并通过 docker push 将其公布至 DockerHub 上。通过简略的 docker run 命令即可疾速的应用指定镜像启动本人的服务。 通过这种方法,能够无效的解决软件运行时环境差别带来的问题,达到其 Build once, Run anywhere 的指标。 从此 Docker 也根本成为了容器的代名词,并成为容器时代的引领者。 2014 年2014 年 Google 推出 Kubernetes 用于解决大规模场景下 Docker 容器编排的问题。 这是一个逻辑抉择,在过后 Docker 是最风行也是惟一的运行时。 Kubernetes 通过对 Docker 容器运行时的反对,迎来了大量的用户。 同时,Google 及 Kubernetes 社区与 Docker 也在进行着亲密的单干,在其官网博客上有如下内容: We’ll continue to build out the feature set, while collaborating with the Docker community to incorporate the best ideas from Kubernetes into Docker.An update on container support on Google Cloud Platform ...

December 9, 2020 · 3 min · jiezi

关于docker:使用Dockerfile从0开始制作自己的docker镜像阿里云DDNS

本猿家里开了公网,在DockerHub找了几个阿里云ddns的工具,试了一下,不太合乎本人的应用环境,遂决定本人入手构建一个镜像本文我的项目文件均已在Github,DockerHub公布本镜像应用办法以及docker-compos.yml、DDNS配置文件均在以下仓库中提供Github https://github.com/youdmeng/a... DockerHub https://hub.docker.com/reposi...为什么抉择dockerdocker这个货色,几乎不要太好用了,尤其是用了docker-compose,一个配置文件,不同环境下,一个命令就部署好了,走到哪用到哪,几乎不要太难受。如果你还没有尝试过docker,倡议你马上动起手来。 构建阿里云DDNS服务Docker镜像构建docker镜像,要本着在保障性能的前提下,镜像越小越好所以我抉择了只有5MB的底层镜像 Alpine应用Dockerfile来构建镜像Dockerfile 是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明Dockerfile 罕用指令| 属性 | 用法 | 形容 | | :----: | :----: | :----: || FROM | FROM <image>:<tag> | 指定应用的根底镜像 || RUN | RUN <命令行命令>/RUN ["可执行文件", "参数1", "参数2"] | 执行指定指令 || COPY | COPY <源门路> <指标门路> | 复制文件 || ADD | ADD <源门路> <指标门路> | 更高级的复制文件(可下载URL)|| CMD | CMD ["executable","param1","param2"] / CMD ["param1","param2"] / CMD command param1 param2 | RUN 构建时运行指令,CMD容器运行时执行 || ENTRYPOINT | ENTRYPOINT ["executable", "param1", "param2"] / ENTRYPOINT command param1 param2 | 给容器配置一个可执行程序 || ENV | ENV <key> <value> | 设置环境变量 || ARG | ARG <name>[=<default value>] | 用于指定传递给构建运行时的变量 || VOLUME | VOLUME ["/data"] | 用于创立挂载点 || EXPOSE | EXPOSE <port> [<port>] | 为构建的镜像设置监听端口 || WORKDIR | WORKDIR /opt | 设置 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令的工作门路 || USER | USER daemon | 指定运行镜像所应用的用户 | ...

December 8, 2020 · 2 min · jiezi

关于docker:Docker全轻量虚拟机

Docker官网是这样介绍docker的: Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications… 其实看完这句话还是不明确docker到底是什么 咱们能够把他设想成是一个用了一种新鲜形式实现的超轻量虚拟机。当然在实现的原理和利用上还是和VM有微小差异的,并且业余的叫法是利用容器(Application Container)。 比方当初想用MySQL,那就找个装好并配置好的MySQL的容器(能够认为是非凡的,轻量级的虚拟机),运行起来,那么就能够应用 MySQL了。 那么为什么不间接在操作系统中装置一个mysql,而是用容器呢? 装置MySql过程并不简略,要配置装置源,装置依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍 但有了docker,一个装置配置好的mysql容器,能够间接拿到另一台主机上启动,而不用重新安装mysql 另外,docker还有一重要的用途,就是能够保障开发,测试和生产环境的统一. docker 手册中文收费手册 [Docker — 从入门到实际]https://vuepress.mirror.docker-practice.com docker 从入门到实际,离线版 docker pull dockerpracticecn/docker_practicedocker run -it --rm -p 4000:80 dockerpracticecn/docker_practicecentos7 装置docker离线安装包下载离线安装包https://download.csdn.net/download/weixin_38305440/12265961 上传离线安装包 docker-install 目录上传到 /root切换到docker-install目录 cd docker-install装置 rpm -ivh *.rpm设置零碎服务 systemctl enable docker启动docker零碎服务 systemctl start dockeryum 在线装置 docker官网装置手册https://docs.docker.com/install/linux/docker-ce/centos/ 卸载旧版 sudo yum remove docker-ce docker-ce-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine装置一组工具 ...

December 8, 2020 · 5 min · jiezi

关于docker:read-tcp-IPADDRESS42648IPADDRESS443-read

问题形容在应用docker pull相干镜像的时候,呈现的谬误:read tcp $IP_ADDRESS:42648->$IP_ADDRESS:443: read: connection reset by peer 解决方案各方排查之后发现是因为pull的时候服务器在国外的起因(十之八九)。故尝试采纳ayiyun镜像加速器,配置如下: 在此网站注册https://promotion.aliyun.com/ntms/act/kubernetes.html之后在镜像核心-》镜像加速器 找到本人的加速器地址并依据以下文档进行后续配置https://help.aliyun.com/document_detail/60750.html?spm=5176.11065259.1996646101.searchclickresult.78451bd5YiusoH问题解决!

December 7, 2020 · 1 min · jiezi

关于docker:Docker-入门终极指南别再说不会用Docker了

富 Web 时代,利用变得越来越弱小,与此同时也越来越简单。集群部署、隔离环境、灰度公布以及动静扩容缺一不可,而容器化则成为两头的必要桥梁。 本节咱们就来摸索一下Docker 的神秘世界,从零到一把握 Docker 的基本原理与实际操作。别再守着前端那一亩三分地,是时候该开疆扩土了。 咱们将会围绕上面几点开展: 讲个故事虚拟机与容器意识 Docker外围概念装置 Docker疾速开始惯例操作最佳实际一、讲个故事为了更好的了解 Docker 是什么,咱们先来讲个故事: 我须要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。 后果,住了一段时间,灵机一动想搬到海边去。这时候按以往的方法,我只能去海边,再次搬石头、砍木头、画图纸、盖房子。 懊恼之际,跑来一个魔法师教会我一种魔法。这种魔法能够把我盖好的房子复制一份,做成「镜像」,放在我的背包里。 黑魔法 等我到了海边,就用这个「镜像」,复制一套房子,拎包入住。 是不是很神奇?对应到咱们的我的项目中来,房子就是我的项目自身,镜像就是我的项目的复制,背包就是镜像仓库。如果要动静扩容,从仓库中取出我的项目镜像,轻易复制就能够了。Build once,Run anywhere! 不必再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的难堪。 二、虚拟机与容器开始之前,咱们来做一些基础知识的储备: 1.虚拟机:虚拟化硬件 虚拟机 Virtual Machine 指通过软件模仿的具备残缺硬件零碎性能的、运行在一个齐全隔离环境中的残缺计算机系统。在实体计算机中可能实现的工作在虚拟机中都可能实现。 在计算机中创立虚拟机时,须要将实体机的局部硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的 CMOS、硬盘和操作系统,能够像应用实体机一样对虚拟机进行操作。在容器技术之前,业界的网红是虚拟机。 虚拟机技术的代表,是 VMWare 和 OpenStack。更多请参看: https://baike.baidu.com/item/...2.容器:将操作系统层虚拟化,是一个规范的软件单元 随处运行:容器能够将代码与配置文件和相干依赖库进行打包,从而确保在任何环境下的运行都是统一的。高资源利用率:容器提供过程级的隔离,因而能够更加精密地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。疾速扩大:每个容器都可作为独自的过程予以运行,并且能够共享底层操作系统的系统资源,这样一来能够放慢容器的启动和进行效率。3.区别与分割 虚拟机尽管能够隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如VMWare;容器技术不须要虚构出整个操作系统,只须要虚构一个小规模的环境,相似「沙箱」;运行空间,虚拟机个别要几 GB 到 几十 GB 的空间,而容器只须要 MB 级甚至 KB级;咱们来看一下比照数据: 与虚拟机相比,容器更轻量且速度更快,因为它利用了 Linux 底层操作系统在隔离的环境中运行。虚拟机的 Hypervisor 创立了一个十分牢固的边界,以避免应用程序冲破它,而容器的边界不那么弱小。 物理机部署不能充分利用资源,造成资源节约。虚拟机形式部署,虚拟机自身会占用大量资源,导致资源节约,另外虚拟机性能也很差。而容器化部署比拟灵便,且轻量级,性能较好。 虚拟机属于虚拟化技术,而 Docker 这样的容器技术,属于轻量级的虚拟化。 三、意识 Docker Docker 1.概念 Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口。 ...

December 7, 2020 · 2 min · jiezi

关于docker:Lunix安装docker和dockercompose

docker装置# 装置必要依赖yum install -y yum-utils device-mapper-persistent-data lvm2# 配置docker下载源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 装置dockeryum makecache fast \yum install -y docker-ce应用docker# 启动docker systemctl start docker# 设置为开机主动启动systemctl enable docker# 查看以后docker版本号docker --vefsion装置docker-compose# 下载 docker-compose 命令sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# docker-compose 执行权限sudo chmod +x /usr/local/bin/docker-compose# 查看以后docker-compose版本号docker-compose -vefsion须要容器相干操作和镜像相干操作的话请评论区留言

December 5, 2020 · 1 min · jiezi

关于docker:sh-安装docker

#!/bin/bashfunction install(){ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun}function cndocker(){ echo "{" > /etc/docker/daemon.json echo "\"registry-mirrors\": [" >> /etc/docker/daemon.json echo " \"https://registry.docker-cn.com\", " >> /etc/docker/daemon.json echo " \"http://hub-mirror.c.163.com\", " >> /etc/docker/daemon.json echo " \"https://docker.mirrors.ustc.edu.cn\" " >> /etc/docker/daemon.json echo " ]" >> /etc/docker/daemon.json echo "}" >> /etc/docker/daemon.json }function start(){ systemctl start docker}function restart(){ systemctl restart docker}case "$1" in install) install ;; cndocker) cndocker sleep 2 restart ;;esac

December 4, 2020 · 1 min · jiezi

关于docker:Dockerdockercompose-使用简介

是什么 Docker Compose 是一个容器编排的工具,通过编写一个简略的 yml 配置文件来定义应用程序所须要的所有服务(如 web 利用的 lamp),而后通过一个简略的 docker-compose up 命令就能够标准化的创立所有容器并启动服务。 docker-compose.yml 一个简略的示例 version: '3' # 版本,有1.x,2.x,3.x 跟docker 版本有对应关系,配置也有些差别,用新版就好了services: # 定义一组服务 web: # 第一个服务 hostname: webapp # 给容器起个名字 build: # 指定镜像起源,这是其中一种,应用 dockerfile 构建 context: ../ # docker run 运行的上下文门路 dockerfile: build/Dockerfile # dockerfile 文件地位,留神跟上一个配置对应,不指定默认是当前目录的 Dockerfile networks: # 指定网络 - dev-local-network # 网络名称,须要先定义 depends_on: # 指定依赖服务,服务会在依赖服务启动后再开启 - mysql # 服务名称 ports: # 端口映射 - "80:80" # 宿主机端口到容器端口的映射 volumes: # 宿主机的数据卷或文件挂载到容器里 - ../:/var/www/html # 宿主机门路:容器里的门路 environment: # 环境变量,有两种形式,间接键值对或者 env_file OMS_DB_HOST: ${OMS_DB_HOST} # ${} 示意取配置文件里的值,默认文件是以后默认的.env,也能够--env-file 指定门路 command: ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf", "--nodaemon"] # 这是容器启动后的第一个命令,留神是要在前台的命令,不能执行完就完结了,不然容器启动就敞开了 mysql: # 第二个服务了 image: "mysql:5.7" # 指定镜像源的第二种形式,间接指定 image,这是是官网的 mysql 5.7版本networks: # 定义网络 dev-local-network: # 网络名称,下面用到的网络就是这里定义的启动 ...

December 4, 2020 · 1 min · jiezi

关于docker:Kubernetes弃用Docker其实不用慌

近日,Kubernetes 在1.20版本中 的 ChangeLog 提到,将废除 Docker 作为容器运行时。 kubelet 中的 Docker 反对性能现已弃用,并将在之后的版本中被删除。Kubelet 之前应用的是一个名为 dockershim 的模块,用以实现对 Docker 的 CRI 反对。但 Kubernetes 社区发现了与之相干的保护问题,因而倡议大家思考应用蕴含 CRI 残缺实现的可用容器运行时。 尽管这一问题在行业内引起了关注与探讨,但其实用户并不需要感到太惊恐。具体能够参考《(闲聊)据说 K8s 要甩了 Docker 了》这篇文章中的解释,以及CNCF 公众号公布的《不要惊恐:kubernetes 和 Docker 》。 kubernetes 真的弃用 docker 了吗?Kubernetes 1.20 版本提到的不再保护 dockershim 垫片,并逐步在后续版本中移除该垫片,这意味着在将来的 Kubernetes 环境中,docker 的占比将逐步降落。简而言之,Docker 作为底层运行时确实正在被弃用,但用户不用惊恐,Docker 生成的镜像将持续在用户的集群中与所有运行时一起工作。 Docker 我的项目自2013年开源以来,引领了容器技术浪潮,至今依然是泛滥容器环境下的首选,与 kubernetes 集成的成熟度高,最为稳固。Docker 技术自身在用户体验、容器构建等多方面的优良体现,也会在开发环境、镜像构建等方面持续沉闷。 其次,Docker 我的项目在最近几年的进化中,曾经拆分成了多个小我的项目,例如 containerd / runc 等,这些新生我的项目也会在将来的 kubernetes 环境中持续发光发热。 对已应用k8s+docker的用户是否有影响?作为为企业用户提供容器云产品与服务的提供商,博云也留神到了这一事件,同时咱们也收到局部客户对这一问题的疑虑。 博云基于 kubernetes 自主研发的容器云产品是博云的外围产品之一。因而,博云始终深耕容器云底层核心技术的改良与加强,并积极参与开源社区奉献,对 kubernetes 一直加强的趋势始终继续关注和钻研。为使企业客户防止繁多技术绑定带来的危险,博云容器云平台曾经实现提供除 docker 以外的其余多种容器运行时的反对。 ...

December 4, 2020 · 1 min · jiezi

关于docker:Docker之WARNING-IPv4-forwarding

我装完了Docker,而后启动镜像,发现没有网络,而且不能ifconfig,过后就淡腾了起初查找材料发现,是没有开启转发,网桥配置完后,须要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,增加net.ipv4.ip_forward=1 配置转发`vim /etc/sysctl.conf#配置转发net.ipv4.ip_forward=1#重启服务,让配置失效systemctl restart network#查看是否胜利,如果返回为“net.ipv4.ip_forward = 1”则示意胜利sysctl net.ipv4.ip_forward`* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11 配置胜利,能够看到配置信息 查看容器是否失常拜访网络`#重启docker服务service docker restart #查看运行过的容器docker ps -a#启动gitlab 容器docker start gitblab2 #进入gitlab容器docker attach gitlab2#获取百度信息curl baidu.com`

December 3, 2020 · 1 min · jiezi

关于docker:Docker从零开始部署Laravel

一.记录docker常用命令systemctl enable docker //docker自启动systemctl daemon-reload //daemo 守护reloadsystemctl restart docker.service 重启docker服务docker ps -a //查看所有容器docker start containeid //启动容器docker stop containerid //敞开容器docker restart containeriddocker exec -it containerid /bin/bash //进入容器docker export containerid > name.tar //导出容器cat docker/name.tar | docker import - imagename //导入容器docker rm -f containerid //删除容器docker images //列出本机镜像先写到这,今天再写

December 3, 2020 · 1 min · jiezi

关于docker:Docker超详细基础教程

一.Docker介绍Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。 容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。 二.Docker的基本操作2.1根本筹备这篇文章中我的运行环境都是在CentOS7中运行。 配套视频: 2020 Docker最新超具体版教程通俗易懂 2.2装置Docker# 1.下载对于Docker的依赖环境yum -y install yum-utils device-mapper-persistent-data lvm2# 2.设置下载Docker的镜像源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3.装置Dockeryum makacache fastyum -y install docker-ce# 4.启动Docker,并设置为开机主动启动,测试# 启动Docker服务systemctl start docker# 设置开机主动启动systemctl enable docker# 测试docker run hello-world2.3 Docker的地方仓库Docker官网的地方仓库: 这个仓库是镜像最全的,然而下载速度较慢。https://hub.docker.com/国内的镜像网站:网易蜂巢、daoCloud。。。https://c.163yun.com/hub#/homehttps://hub.daocloud.io/ (举荐应用)在公司外部会采纳私服的形式拉取镜像。(增加配置)# 须要在/etc/docker/daemon.json{ "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["ip:port]}# ip:port公司私服的ip和port# 重启两个服务systemctl daemon-reloadsystemctl restart docker 2.4 镜像的操作# 1. 拉取镜像到本地docker pull 镜像名称[:tag]# 举个例子 tomcatdocker pull daocloud.io/library/tomcat:8.5.15-jre8# 2. 查看全副本地的镜像docker images# 3. 删除本地镜像docker rmi 镜像的标识# 4. 镜像的导入导出(不标准)# 将本地的镜像导出docker save -o 导出的门路 镜像id# 加载本地的镜像文件docker load -i 镜像文件# 批改镜像名称docker tag 镜像id 新镜像名称:版本2.5 容器的操作# 1. 运行容器# 简略操作docker run 镜像的标识|镜像名称[tag]# 罕用的参数docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]# -d: 代表后盾运行容器# -p: 宿主机端口:容器端口: 为了映射以后Linux的端口和容器的端口# --name 容器名称: 指定容器的名称# 2. 查看正在运行的容器docker ps [OPTIONS]# OPTIONS阐明:# -a: 代表查看全副的容器,包含没有运行# -q: 只查看容器的标识# -f: 依据条件过滤显示的内容# --format: 指定返回值的模板文件# -l: 显示最近创立的容器# -n: 列出最近创立的n个容器# --no-trunc: 不截断输入# -s: 显示总的文件大小# 3. 查看容器的日志docker logs -f 容器id# -f: 能够滚动查看日志的最初几行# 4. 进入到容器外部docker exec -it 容器id bash# 5. 删除容器(删除容器前,须要先进行容器)docker stop 容器id# 进行指定的容器docker stop $(docker ps -qa)# 进行全副容器docker rm 镜像id# 删除指定容器docker rm $(docker ps -qa)# 删除全副容器#6. 启动容器docker start 容器id三.Docker利用3.1 筹备SSM工程# MySQL数据库的连贯用户名和明码扭转了,批改db.propreties# 我的项目从新打包mvn clean package -DskipTests# 我的项目地址链接: https://pan.baidu.com/s/1F4xTLoOFCMb7rl1VUrBASA 明码: bgjw3.2 筹备MySQL容器# 运行MySQL容器docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.43.3 筹备Tomcat容器# 运行Tomcat容器,在下面容器操作中曾经搞定,只须要将SSM我的项目的war包部署到Tomcat容器外部# 能够通过命令将宿主机的内容复制到容器外部docker cp 文件名称 容器id:容器外部门路# 举个例子docker cp ssm.war fe:/usr/local/tomcat/webapps/3.4数据卷为了部署SSM的工程,须要应用到cp的命令将宿主机内的ssm.war文件复制到容器外部。数据卷:将宿主机的一个目录映射到容器的一个目录中。 ...

December 3, 2020 · 4 min · jiezi

关于docker:docker-dockercompose-入门

一、docker1、why docker ? 2、repository、image、container、tag 3、how to use ?1) command# 以守护过程模式启动Dockersudo service docker start# 设置开机主动启动Dockersystemctl start docker# 查看版本docker version# 拉取镜像 docker pull name:tagdocker pull nginxdocker pull busyboxdocker pull python:2.7# 查看镜像docker images# 删除镜像docker rmi id# 查看容器 运行中docker psdocker ps -a # 查看网络 (namespace,veth pair)docker network ls{ bridge, host, none, overlay}# docker run 启动容器-d 后盾运行--name 指定容器名称-p 80:80 端口映射-v /root:/root 目录映射--link 链接容器--nwtwork 指定网络-c 增加运行时cmd 命令-e 增加环境变量 # docker exec name -it -it 交互模式进入容器-i --interactive-t --tty 2) example-- 启动nginx容器docker run -it --name web-n1 -p 80:80 -v /var/www/html:/usr/share/nginx/html -d nginx:alpine ...

November 30, 2020 · 2 min · jiezi

关于docker:docker命令

docker 装置========= sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get -y update sudo apt-get -y install docker-ce docker version 有时候装置失败,须要确认一下零碎版本 i386 仿佛不反对不了dpkg --print-architecture amd64 或者 i386 docker-compose 装置curl -L https://github.com/docker/com...uname -s-uname -m -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose version mkdir /data mkdir /data/docker mkdir /data/docker-data docker network create my_net ...

November 26, 2020 · 2 min · jiezi

关于docker:Docker安装JDK

1.批改docker仓库地址 为了晋升docker下载数据批改仓库地址(如果没有创立一个)vim /etc/docker/daemon.jsoncat>>daemon.json{ "registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]}# 重启daemonsystemctl daemon-reload# 重启docker服务systemctl restart docker 2.docker装置centos环境 docker search centos(docker查问centos镜像有哪些)docker pull centos3.docker装置jdk docker search jdk(docker查问jdk镜像有哪些)docker pull ascdc/jdk84.查看镜像 docker images5.创立容器容器是基于镜像创立的,执行镜像生成容器,方可进入容器启动容器命令: docker run <相干参数> <镜像 ID> <初始命令>docker run -i -t -v /www/software/:/mnt/software/ 0d120b6ccaa8 /bin/bash参数解析 -i:示意以“交互模式”运行容器 -t:示意容器启动后会进入其命令行 -v:示意须要将本地哪个目录挂载到容器中,格局:-v <宿主机目录>:<容器目录> /bin/bash:一旦容器启动,须要执行的命令,以后应用 "/bin/bash", 示意启动后间接进bash shell /www/software是宿主机器(Linux)上创立的一个文件夹; /mnt/software是centos的容器外面的目录文件 这里挂载的意思就是 0d120b6ccaa8 创立的容器拜访 /mnt/software/ 目录下的文件就相当于拜访 宿主机的 /www/software/下的文件,且两者文件夹里内容雷同6.查看容器 docker ps -a(查看正在运行的容器)docker ps(查看敞开的容器)docker start [容器ID](启动容器)docker exec -it [容器ID] /bin/bash (进入容器命令行)7.配置jdk环境

November 26, 2020 · 1 min · jiezi

关于docker:Centos安装Docker

docker是个什么货色Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口 docker由什么组成镜像这里你就能够把镜像认为是一种模板。咱们能够应用docker依据这个模板创立容器来运行。docker镜像中有分层的概念,就是一个镜像可能基于好几个镜像,比方一个web运行环境可能须要操作系统ubuntu、数据库mysql、.net core runtime运行时,那咱们拉取的这个镜像就会包好这好几个镜像,这就如同咱们前边说的打包好的运行环境一样,间接就拉下来一个小电脑一样。容器当咱们拉取了一个镜像,而后run一下,就会依据这个镜像运行进去一个容器,运行的容器就如同咱们的应用程序一样,能够拜访能够进行,咱们使用屡次run命令,就运行了很多很多容器,也能够说是镜像的实例。从这个角度来看,咱们能够把镜像看作是类,容器看作new进去的实例,也是很适合的。仓库寄存docker镜像的中央咱们叫做dockerhub,是docker的地方仓库。其实曾经有dockerhub这个网站了(https://hub.docker.com/),这就是 寄存docker镜像的官网仓库,好多官网的也保留在这里,保障了镜像的安全性和可靠性,咱们能够从上边拉取一下镜像来运行咱们的软件。当然咱们也能够制作好咱们本人镜像推送下来,不过这些必定是要官网审核的,避免有些人写入一些恶意代码。不过咱们能够推到咱们本人的dockerhub下来,供咱们本人应用,这个就好咱们的github账号一样了,属于公有镜像了。centos装置docker 更新yum到最新版本 yum upate 卸载旧版本docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine装置须要的软件包sudo yum install -y yum-utils device-mapper-persistent-data lvm2配置阿里云docker yum源sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo查看docker版本yum list docker-ce --showduplicates留神:在某些版本之后,docker-ce装置呈现了其余依赖包,如果装置失败的话请关注错误信息。例如 docker-ce 17.03 之后,须要先装置 docker-ce-selinux(查问所有的selinux)yum list docker-ce-selinux --showduplicates装置低版本docker(比方docker 17.03.2)时须要指定残缺的rpm包的包名,并且加上`--setopt=obsoletes=0`yum install -y --setopt=obsoletes=0 \ docker-ce-17.03.2.ce-1.el7.centos.x86_64 \ docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch装置Docker较新版本(比方Docker 18.03.0)时加上rpm包名sudo yum install docker-ce-18.03.0.ce装置最新版本无需加版本号sudo yum install docker-ce启动docker服务systemctl enable docker(设置开机启动)systemctl start docker(启动)systemctl stop docker(暂停)systemctl restart docker(重启)查看docker版本docker version

November 26, 2020 · 1 min · jiezi

关于docker:金瓯无缺江河一统Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_180 OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的、具备工业规范个性的利用协定,能够应用TCP协定提供访问控制和保护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。好吧,让咱们变得理性一点,如果我每天早上应用Twitter想听听懂王又吹了什么牛,登录Twitter账号密码,紧接着又想上Instagram看看女神又post了什么新靓照,好的,登录Instagram账号密码,摸了一上午的鱼之后,忽然想起来要登录公司的邮箱,看看有没有新需要,是的,又须要那该死的账号和明码,甚至于查问社保、公积金提取、交罚款都须要各自零碎的账号和明码。设想一下,如果有一套零碎能够对立治理和保护所有上游利用的账号和权限,咱们不须要花工夫反复的注册新利用的账号,而只须要关注利用自身,从而实现账号集中认证治理,此时作为账号管理员的咱们只须保护OpenLDAP 服务器条目即可,金瓯无缺江山一统,这就是openladp可能带给咱们的益处。 LDAP是十分典型的层级构造,信息模型是建设在属性条目(entries)的根底上。一个属性条目是一些属性的汇合,并且具备一个全局惟一的"可辨别名称"DN,一个条目能够通过DN来援用。每一个条目标属性具备一个类型和一个或者多个值。类型通常是容易记忆的名称,比方"cn"是通用名称(common name) ,或者"mail"是电子邮件地址。条目标值的语法取决于属性类型。比方,cn属性可能具备一个值"jack joe" 。一个mail属性可能蕴含"admin@v3u.cn" 。一个pngphoto属性可能蕴含一幅PNG(二进制)格局的图片。 这里简略介绍一下openldap罕用的层级关键字的解释: dc:Domain Component 域名的范畴,其格局是将残缺的域名分成几局部,如域名为v3u.cn则写成dc=v3u,dc=cn。 uid:User Id 用户ID,比方自增长“1”。 ou:Organization Unit 组织单位,相似于文件系统中的子目录,它是一个容器对象,组织单位能够蕴含其余各种对象(包含其余组织单元),如“newgroup”。 cn:Common Name 公共名称,如“jack joe”。 sn: Surname 姓,如“joe”。 dn :Distinguished Name 惟一分别名,相似于文件系统中的绝对路径,每个对象都有一个惟一的名称,相似于mysql的全局惟一索引,如“uid= tom,ou=market,dc=example,dc=com”,记住在一个目录树中DN总是惟一的。 了解了概念,让咱们来实操一把,因为实际永远是测验真谛的唯一标准,首先装置Docker,参照:win10零碎下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑)。 随后拉取openldap镜像: docker pull osixia/openldap:1.3.0这里咱们应用1.3稳定版,拉取胜利后查看本地镜像 docker images能够看到只有200mb左右,十分玲珑: liuyue:~ liuyue$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE osixia/openldap 1.3.0 faac9bb59f83 6 months ago 260MB启动容器: docker run -p 389:389 --name myopenldap --network bridge --hostname openldap-host --env LDAP_ORGANISATION="v3u" --env LDAP_DOMAIN="v3u.cn" --env LDAP_ADMIN_PASSWORD="admin" --detach osixia/openldap:1.3.0这里咱们通过端口映射将389端口作为链接桥梁,同时配置LDAP组织者:--env LDAP\_ORGANISATION="v3u",配置LDAP域:--env LDAP\_DOMAIN="v3u.cn",配置LDAP明码:--env LDAP\_ADMIN\_PASSWORD="admin",默认登录用户名:admin,并且开启后盾守护过程。 ...

November 24, 2020 · 2 min · jiezi

关于docker:程序员苦应用部署久矣docker献计闪电五连鞭

程序员受苦久矣多年前的一个夜晚,风雨大作,一个名叫Docker的年轻人来到Linux帝国拜会帝国的长老。 “Linux长老,天下程序员苦于利用部署久矣,我要扭转这一现状,心愿长老你能帮帮我” 长老答复:“哦,小小年纪,口气不小,先请入座,你有何所求,愿闻其详” Docker坐下后开始娓娓而谈:“当今天下,利用开发、测试、部署,各种库的依赖纷繁复杂,再加上版本之间的差别,经常出现在开发环境运行失常,而到测试环境和线上环境就出问题的景象,程序员们饱受此苦,是时候扭转这一情况了。” Docker回头看了一眼长老接着说到:“我想做一个虚构的容器,让应用程序们运行其中,将它们须要的依赖环境整体打包,以便在不同机器上移植后,依然能提供统一的运行环境,彻底将程序员们解放出来!” Linux长老听闻,微微拍板:“年轻人想法不错,不过听你的形容,如同虚拟机就能解决这个问题。将利用和所依赖的环境部署到虚拟机中,而后做个快照,间接部署虚拟机不就能够了吗?” Docker连连点头说到:“长老有所不知,虚拟机这家伙轻便如牛,体积又大,动不动就是以G为单位的大小,因为它外面要运行一个残缺的操作系统,所以跑起来分外吃力,慢就不说了,还十分占资源,一台机器上跑不了几台虚拟机就把性能拖垮了!而我想要做一个轻量级的虚构容器,只提供一个运行环境,不必运行一个操作系统,所有容器中的零碎内核还是和里面的宿主机共用的,这样就能够批量复制很多个容器,轻便又快捷” Linux长老站了起来,来回踱步了几圈,思考片刻之后,突然拍桌子大声说到:“真是个好想法,这个我的项目我投了!” Docker眼里见光,喜上眉梢,“这事还真离不开长老的帮忙,要实现我说的指标,对过程的治理隔离都至关重要,还望长老助我一臂之力!” “你稍等”,Linux长老转身回到内屋。没多久就进去了,手里拿了些什么货色。 “年轻人,回去之后,只管放手大干,我赐你三个锦囊,若遇难题,可顺次拆开,必有大用” Docker开心的收下了三个锦囊,拜别Linux长老后,冒雨而归。 锦囊1:chroot & pivot_root受到长老的激励,Docker充斥了干劲,很快就筹备启动他的我的项目。 作为一个容器,首要任务就是限度容器中过程的流动范畴——能拜访的文件系统目录。决不能让容器中的过程去肆意拜访实在的系统目录,得将他们的流动范畴划定到一个指定的区域,不得越雷池半步! 到底该如何限度这些过程的流动区域呢?Docker遇到了第一个难题。 苦思好久未果,Docker终于忍不住拆开了Linux长老送给本人的第一个锦囊,只见下面写了两个函数的名字:chroot & pivot_root。 Docker从未应用过这两个函数,于是在Linux帝国到处打听它们的作用。起初得悉,通过这两个函数,能够批改过程和零碎的根目录到一个新的地位。Docker大喜,长老真是诚不欺我! 有了这两个函数,Docker开始想方法怎么来“伪造”一个文件系统来坑骗容器中的过程。 为了不露出破绽,Docker很聪慧,用操作系统镜像文件挂载到容器过程的根目录下,变成容器的rootfs,和实在系统目录截然不同,足能够以假乱真: $ ls /bin dev etc home lib lib64 mnt opt proc root run sbin sys tmp usr var 锦囊2:namespace文件系统的问题总算解决了,然而Docker不敢懈怠,因为在他心里,还有一个大问题始终困扰着他,那就是如何把实在零碎所在的世界暗藏起来,别让容器中的过程看到。 比方过程列表、网络设备、用户列表这些,是决不能让容器中的过程晓得的,得让他们看到的世界是一个洁净如新的零碎。 Docker心里分明,本人尽管叫容器,但这只是表面现象,容器内的过程其实和本人一样,都是运行在宿主操作系统下面的一个个过程,想要遮住这些过程的眼睛,瞒天过海,切实不是什么容易的事件。 Docker想过用HOOK的形式,坑骗过程,但施行起来工作太过简单,兼容性差,稳定性也得不到保障,思来想去也没想到什么好的主见。 正在束手无策之际,Docker又想起了Linux长老送给本人的锦囊,他连忙拿了进去,关上了第二个锦囊,只见下面写着:namespace。 Docker还是不解其中之意,于是又在Linux帝国到处打听什么是namespace。 通过一阵推敲,Docker总算是明确了,原来这个namespace是帝国提供的一种机制,通过它能够划定一个个的命名空间,而后把过程划分到这些命名空间中。 而每个命名空间都是独立存在的,命名空间外面的过程都无奈看到空间之外的过程、用户、网络等等信息。 这不正是Docker想要的吗?真是踏破铁鞋无觅处,得来全不费功夫! Docker连忙加班加点,用上了这个namespace,将过程的“视线”锁定在容器规定的范畴内,如此一来,容器内的过程彷佛被施上了障眼法,再也看不到里面的世界。 锦囊3:CGroup文件系统和过程隔离的问题都解决了,Docker心里的石头总算是放下了。心里焦急着想测试本人的容器,可又好奇这最初一个锦囊写的是什么,于是关上了第三个锦囊,只见下面写着:CGroup。 这又是什么货色?Docker依然看不懂,不过这一次管不了那么许多了,先运行起来再说。 试着运行了一段时间,一切都在Docker的打算之中,容器中的过程都能失常的运行,都被他构建的虚构文件系统和隔离进去的零碎环境给坑骗了,Docker快乐坏了! 很快,Docker就开始在Linux帝国推广本人的容器技术,后果大受欢迎,播种了有数粉丝,连nginx、redis等一众大佬都纷纷入驻。 然而,鲜花与掌声的背地,Docker却不晓得本人行将大难临头。 这天,Linux帝国内存管理部的人扣下了Docker筹备“处决”掉他,Docker一脸惊讶的问到,“到底产生了什么事,为什么要对我下手?” 管理人员厉声说到:“帝国治理的内存快被一个叫Redis的家伙用光了,当初要筛选一些过程来杀掉,不好意思,你中奖了” Redis?这家伙不是我容器里的过程吗?Docker心中一惊! “两位小孩儿,我意识帝国的长老,麻烦通融通融,找他人去吧,Redis那家伙,我有方法拾掇他” 没想到他还意识帝国长老,管理人员犹豫了一下,就放了Docker到别处去了。 惊魂未定的Docker,思来想去,如果不对容器中的过程加以管教,那几乎太危险了!除了内存,还有CPU、硬盘、网络等等资源,如果某个容器过程霸占着CPU不撒手,又或者某个容器过程疯狂写硬盘,那迟早得连累到本人身上。看来必须得对这些过程进行管控,避免他们干出出格的事来。 这时候,他想起了Linux长老的第三个锦囊:CGroup!说不定能解这当务之急。 通过一番钻研,Docker如获至宝,原来这CGroup和namespace相似,也是Linux帝国的一套机制,通过它能够划定一个个的分组,而后限度每个分组可能应用的资源,比方内存的上限值、CPU的使用率、硬盘空间总量等等。零碎内核会主动检查和限度这些分组中的过程资源使用量。 Linux长老这三个锦囊几乎太贴心了,一个比一个有用,Docker心田充斥了感谢。 随后,Docker加上了CGroup技术,增强了对容器中的过程管控,这才松了一口气。 在Linux长老三个神机妙算的加持下,Docker堪称风光一时,成为了Linux帝国的小名人。 然而,能力越大,责任越大,让Docker没想到的是,新的挑战还在前面。 举荐一下本人的linuxC/C++交换群:973961276!整顿了一些集体感觉比拟好的学习书籍、视频材料以及大厂面经视频共享在群文件外面,有须要的小伙伴能够自行添加哦!

November 24, 2020 · 1 min · jiezi

关于docker:docker安装rabbitmq延时队列插件

1、查找Docker容器中的RabbitMQ镜像     docker ps -a [root@linux ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8efd6f3add3c chenchuxin/dubbo-admin "catalina.sh run" 6 weeks ago Up 5 weeks 0.0.0.0:9090->8080/tcp dubbo-admin6939b83d0942 zookeeper "/docker-entrypoint.…" 6 weeks ago Up 5 weeks zookeeper012aec2548a9f8 525bd2016729 "docker-entrypoint.s…" 6 weeks ago Up 5 weeks 0.0.0.0:27017->27017/tcp docker_mongodb2、上传rabbitmq\_delayed\_message_exchange-20171201-3.7.x.ez插件到Linux文件夹中      下载解压文件  https://download.csdn.net/download/zhangdaiscott/13130449 3、拷贝插件文件到rabbitMQ的Docker容器中 [root@linux ~]# docker cp rabbitmq_delayed_message_exchange-20171201-3.7.x.ez rabbitmq3.7.7:/plugins4、进入rabbitMQ的Docker容器中docker exec -it rabbitmq3.7.7 bash [root@linux ~]# docker exec -it rabbitmq3.7.7 bashroot@myRabbit:/# 5、查看插件列表 ...

November 24, 2020 · 1 min · jiezi

关于docker:docker安装nacos

1、搜寻nacos镜像 docker search nacos2、下载镜像 docker pull nacos/nacos-server 3、查看本地镜像,看看拉到本地没有 docker images 4、启动镜像    nacos官网文档 docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos/nacos-server 5、验证是否胜利 http://localhost:8848/nacos 默认用户名明码都是:nacos

November 24, 2020 · 1 min · jiezi

关于docker:docker安装xxljobadmin

1、下载镜像 docker pull xuxueli/xxl-job-admin:2.2.02、查看镜像 docker images 3、初始化数据库     Mysql脚本:  https://github.com/xuxueli/xxl-job/blob/2.2.0/doc/db/tables\_xxl\_job.sql 4、配置host       5、启动镜像 docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://jeecg-boot-mysql:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&useSSL=false --spring.datasource.username=root --spring.datasource.password=root --xxl.admin.login=false" ^  -p 9080:8080 --name xxl-job-admin ^  -d xuxueli/xxl-job-admin:2.2.0数据库的链接改成本人的配置拜访治理后盾    http://127.0.0.1:9080/xxl-job-admin     admin/123456 创立执行器和定时工作新增执行器 新增定时工作 测试定时工作(前提微服务各个模块和定时工作服务端已启动) 执行后果如下所示

November 24, 2020 · 1 min · jiezi

关于docker:docker安装rabbitmq

1、下载镜像 docker pull rabbitmq:3.7.7-management2、启动镜像(用户名和明码设置为guest guest) docker run -dit --name rabbitmq3.7.7 -e RABBITMQ\_DEFAULT\_USER=guest -e RABBITMQ\_DEFAULT\_PASS=guest -p 15672:15672 -p 5672:5672 rabbitmq:3.7.7-management3、拜访rabbitmq治理界面     http://127.0.0.1:15672     guest/guest 4、装置延时队列(delayed\_message\_exchange)     https://my.oschina.net/jeecg/blog/4719615

November 24, 2020 · 1 min · jiezi

关于docker:Docker学习教程Docker使用和安装手册

Docker 教程Docker 教程、Docker 架构 Docker 装置Ubuntu Docker 装置、CentOS Docker 装置、Windows Docker 装置、MacOS Docker 装置 Docker 应用Docker Hello World、Docker 容器应用、Docker 镜像应用、Docker 容器连贯 Docker 实例Docker 装置 Nginx、Docker 装置 PHP、Docker 装置 MySQL、Docker 装置 Tomcat、Docker 装置 Python、Docker 装置 Redis、Docker 装置 MongoDB、Docker 装置 Apache Docker 参考手册Docker 命令大全、Docker 资源汇总

November 23, 2020 · 1 min · jiezi

关于docker:如何排查Java应用内存泄漏问题

什么是内存透露内存透露是指java利用的堆内存使用率继续升高,直至内存溢出。内存透露的的起因可能有多种 调配给应用程序的内存自身过小。而利用的业务代码,的确须要生成大量的对象代码bug,某些须要被回收的对象,因为代码bug,却继续的被援用,导致java虚拟机无奈回收这些对象。从而撑爆内存无论哪种内存泄露,咱们的解决办法都是要定位到具体是什么对象,占用了大量内存,从而不便咱们基于此进行代码剖析,debug,找出代码问题。而可能帮忙咱们实现这一目标的形式就是获取java利用的内存 dump 如何获取内存dump应用命令获取jcmd首先须要获取java 过程id,获取到java过程后应用命令 jcmd <pid> GC.heap_dump <file-path>如果执行报错 com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded个别是因为执行jcmd的用户同java利用自身不是同一个用户。解决办法是切换到利用对应的用户下再执行上述命令 sudo -u [userid] /jcmd <pid> GC.heap_dump <file-path>如果利用在本地如果利用是在本地,除了用上述办法外,还能够用JVisualVM 、JConsole 程序异样退出时主动dump但更为重要的,为了精确还原利用故障的现场,最好通过指定java 执行参数,在程序出错时,主动dump java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<file-or-dir-path>如何剖析内存dump获取到dump文件后,须要应用eclipse.org 出品的 Memory Analyzer 工具。应用其中的Dominator Tree,查看各对象的内存占用状况 找出占用内存最多的对象及其类信息 参考资料https://www.baeldung.com/java...https://www.cnblogs.com/alcc/...https://www.eclipse.org/mat/ 欢送关注我的集体公众号"东南偏北UP",记录代码人生,行业思考,科技评论

November 23, 2020 · 1 min · jiezi

关于docker:docker安装k8s依赖镜像

前言最近学习K8s须要装置镜像,然而因为种种原因须要手动去下载和装置,所以记录下来分享给大家。 操作过程首先,咱们看看须要装置哪些镜像,应用如下命令: ╭─root@kube-master ~╰─# kubeadm config images listW1122 01:44:17.606714 16720 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]k8s.gcr.io/kube-apiserver:v1.19.4k8s.gcr.io/kube-controller-manager:v1.19.4k8s.gcr.io/kube-scheduler:v1.19.4k8s.gcr.io/kube-proxy:v1.19.4k8s.gcr.io/pause:3.2k8s.gcr.io/etcd:3.4.13-0k8s.gcr.io/coredns:1.7.0从下面命令运行的后果能够看进去,咱们须要kube-proxy、kube-apiserver、kube-controller-manager、kube-scheduler、etcd、coredns、pause镜像,因而咱们就到docker hub下面去找,再这之前咱们先来配置阿里镜像减速,如下所示: sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker留神:下面的xxx是我暗藏我的id写法,你们到阿里镜像下来,开明服务,复制成你们的就好! 减速设置好之后,接下来咱们去docker hub去下载下面的依赖镜像,如图所示:而后找到对应的1.19.4版本,如图所示:点击复制左边的命令执行: docker pull kubeimage/kube-apiserver-amd64:v1.19.4下载实现之后,咱们须要把标签改下`: docker tag kubeimage/kube-apiserver-amd64:v1.19.4 k8s.gcr.io/kube-apiserver:v1.19.4docker rmi kubeimage/kube-apiserver-amd64:v1.19.4下面的两步操作的意思是先打个k8s.gcr.io/kube-apiserver:v1.19.4标签,而后再把kubeimage/kube-apiserver-amd64:v1.19.4删除。依此类推,剩下的几个依赖包也是这样操作,我就不再赘述了,最初的如下所示: ╭─root@kube-master ~╰─# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEk8s.gcr.io/kube-proxy v1.19.4 635b36f4d89f 10 days ago 118MBk8s.gcr.io/kube-apiserver v1.19.4 b15c6247777d 10 days ago 119MBk8s.gcr.io/kube-controller-manager v1.19.4 4830ab618586 10 days ago 111MBk8s.gcr.io/kube-scheduler v1.19.4 14cd22f7abe7 10 days ago 45.7MBk8s.gcr.io/etcd 3.4.13-0 0369cf4303ff 2 months ago 253MBk8s.gcr.io/coredns 1.7.0 bfe3a36ebd25 5 months ago 45.2MBk8s.gcr.io/pause 3.2 80d28bedfe5d 9 months ago 683kB总结1、我这个是centos7下面装置的k8s,大家留神一下操作系统版本 ...

November 22, 2020 · 1 min · jiezi

关于docker:Podman-快速入门

明天在某云上新购一台云服务器,发现曾经有了 CentOS8.2 官网镜像可选,出于对陈腐事物的好奇,我决定开始采纳 CentOS8.2,即便我还没有为它的新个性做好筹备。 我的利用次要以单机版容器为主。因而,服务器启动的第一件事就是装置 Docker。可怜的事件产生了,我的 Docker 利用没有像 CentOS7 那样如期 running 起来。 花了大量的工夫排查,才找到一丝线索:CentOS8 以上的版本默认曾经装置一个等同于 Podman 的容器解决方案。 两个容器解决在一起工作,互相打架的事件必然会产生。出于长治久安的考量,明天整个下午我开展了对 Podman 的钻研,失去了如下的论断,心愿这些论断可能让大家少走一点弯路。 Podman 与 Docker 哪个好?对于这种问题,我想没有粗浅的实际是无奈得出结论的。所以就我集体来说,只能从各种业余博客和论坛中寻找答案。 我发现 Podman 中文相干的材料非常少,同理,评估它的博客就更少了,倒是有一篇十分吸人眼球的文章,例如《Docker 大势已去,Podman 万岁》。但认真浏览它,却没有特地有价值的比照,齐全是一种主观的表白。因而,咱们不要被别人的文章所疏导(误导)而造成一种偏见。 Podman 是 RedHat 为了抢占容器规范的一种策略产品,这就是我的认识。 Podman 兼容 Docker吗?大部分是兼容的,例如: 1.能够间接应用 Docker 镜像 2.命令十分类似 如果你十分思念 docker命令,甚至能够给 Podman 设置别名为 docker: echo "alias docker=podman" >> .bashrcsource .bashrcPodman 镜像默认镜像库文件 /etc/containers/registries.conf 是设置镜像地址配置文件,默认会搜寻 ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io', 'quay.io']等几个镜像库。 不过,这几个镜像库下载速度十分慢,能够说是根本无奈顺利的将镜像拉下来。 所以,须要批改批改镜像库配置文件,也就是大家说的镜像减速计划。 镜像减速只需4个步骤实现镜像减速: 1.改名并备份好文件:/etc/containers/registries.conf 2.再新建一个空的 registries.conf 文件,插入如下内容 unqualified-search-registries = ["docker.io"][[registry]]prefix = "docker.io"location = "******.mirror.aliyuncs.com"3.批改 location ...

November 20, 2020 · 1 min · jiezi

关于docker:Docker安装RedisSpring-Boot使用Redis解决Redis发生的类型转换异常

Docker装置Redis(如果已装置请跳过这一步) 1、拉取Redis镜像(默认最新版本) docker pull redis 如果下载比较慢的话倡议配置阿里云镜像 查看阿里云镜像:阿里云官网-->产品-->搜寻容器镜像服务-->治理控制台 左侧边栏下方的镜像加速器: 点进去能够看到下方有一个减速地址和应用办法: 把大括号及大括号里的内容复制进/etc/docker/daemon.json文件中: vim /etc/docker/daemon.json 从新加载daemon文件和docker即增加镜像胜利 systemctl daemon-reload systemctl restart docker - 2、装置完redis镜像后查看是否装置胜利 ========================== docker images - 3、运行redisdocker run -d -p 6379:6379 --name myredis redis 4、查看是否运行胜利 =============== docker ps 疾速应用Redis 1、导入Redis的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2、增加配置文件# Redis数据库索引(默认为0)spring.redis.database=0 # Redis服务器地址(默认为localhost)spring.redis.host=localhost# Redis服务器连贯端口(默认为6379)spring.redis.port=6379 # Redis服务器连贯明码(默认为空)spring.redis.password=# 连接池最大连接数(应用负值示意没有限度) 默认 8spring.redis.lettuce.pool.max-active=8# 连接池最大阻塞等待时间(应用负值示意没有限度) 默认 -1spring.redis.lettuce.pool.max-wait=-1# 连接池中的最大闲暇连贯 默认 8spring.redis.lettuce.pool.max-idle=8# 连接池中的最小闲暇连贯 默认 0spring.redis.lettuce.pool.min-idle=0 3、增加Redis配置类自定义一个RedisCacheManager@Configurationpublic class MyRedisConfig { @Bean public RedisCacheManager defaultRedisCacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(6)) // 设置缓存过期工夫为6小时 .disableCachingNullValues() // 禁用缓存空值,不缓存null校验 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); // 设置CacheManager的值序列化形式为json序列化 return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build(); // 设置默认的cache组件 }} ...

November 19, 2020 · 1 min · jiezi

关于docker:器篇Docker-Docker以及DockerCompose-安装方法

一、引言来Docker是近几年比拟火的容器技术,借助它能显著进步开发团队构建和公布服务的能力。本教程领导如何在Centos 7 上装置Docker CE ,Docker-compose 。 二、装置步骤来具体手动装置步骤参照上面操作。 1.装置Docker CEDocker CE 分为 stable test 和 nightly 三个更新频道。每六个月公布一个 stable 版本 (18.09, 19.03, 19.09...),生产环境应用stable版本。 1.1 卸载旧版本Docker,Docker-Engine确定未装置过Docker可不进行此步骤 $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine1.2 配置 Ali Docker YUM源#first 装置依赖包$sudo yum install -y yum-utils device-mapper-persistent-data lvm2#then 应用ali仓库源$sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1.3装置Docker CE查看可供装置的版本 #按需抉择适宜本人的版本 $yum list docker-ce --showduplicates接下来提供两种装置形式,一种是脚本装置,一种是非脚本装置。 非脚本装置latest stable ...

November 19, 2020 · 1 min · jiezi

关于docker:Kubernetes笔记六了解控制器-Deployment

Pod(容器组)是 Kubernetes 中最小的调度单元,能够通过 yaml 定义文件间接创立一个 Pod。但 Pod 自身并不具备自我复原(self-healing)性能。如果一个 Pod 所在的节点呈现故障,或者调度程序本身呈现问题,以及节点资源不够或节点进入保护而驱赶 Pod 时,Pod 将被删除,且不能自我复原。 因而,Kubernetes 中咱们个别不间接创立 Pod, 而是通过 Controller(控制器)来治理 Pod。 <!--more--> ControllerController 能为 Pod 提供如下个性: 程度扩大,管制 Pod 运行的正本数rollout,即版本更新self-healing,即自我复原。当节点呈现故障时,控制器能够主动地在另一个节点调度一个配置齐全一样的 Pod,以替换故障节点上的 Pod。Kubernetes 中反对的控制器包含: ReplicationController:用来保护一个数量稳固的 Pod 正本汇合的控制器ReplicaSet:是 ReplicationController 的升级版,比 ReplicationController 多一个个性:反对基于汇合的选择器。 不反对滚动更新(RollingUpdate)Deployment:蕴含了 ReplicaSet,可通过申明式、滚动更新的形式更新 ReplicaSet 及其 Pod。对于无状态利用,举荐应用 Deployment 部署StatefulSet:用于治理有状态的应用程序DaemonSet:在节点上以守护过程的形式运行一个指定的 Pod 正本,例如监控节点、收集节点上的日志时,可应用 DaemonSetCronJob:依照预约的工夫打算创立 Job,相似于 linux 的crontabJob:应用 Job 执行工作,执行完后完结ReplicaSetKubernetes 中,尽管个别应用 Deployment 来治理 Pod, 但 Deployment 中也是通过 ReplicaSet 来保护 Pod 的正本汇合的,因而此处也对 ReplicaSet 进行简略介绍。 在 ReplicaSet 的定义中,蕴含三局部: ...

November 19, 2020 · 8 min · jiezi

关于docker:docker-nginx运行vue编译后的项目

前言最近公司有个vue的我的项目,须要本地应用nginx启动运行,我感觉应用docker正适宜,所以记录下来分享给大家 筹备工作docker装置nginx镜像 docker pull nginx编译vue我的项目查看vue我的项目package.json "scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build","lint": "vue-cli-service lint"},而后应用如下命令编译到dist文件夹下 npm run build编译之后会生成到dist文件夹下,这里咱们会遇到一个问题,先咱们查看vue.config.js文件 module.exports = {publicPath: '/mvue',runtimeCompiler: true,这里咱们能够看到,publicPath:’/mvue’,意思就是说生成的index.html文件会以/mvue为目录,如下所示 : <!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=/mvue/favicon.ico> <link rel=stylesheet href=/mvue/style.css> <script src=/mvue/sso.js></script> <title>x7-manage</title><link href=/mvue/css/chunk-029a266b.ae198b8f.css rel=prefetch><link href=/mvue/css/chunk-0e19dd50.56b34581.css rel=prefetch><link href=/mvue/css/chunk-32fbd092.d54e527a.css rel=prefetch><link href=/mvue/css/chunk-4fe24ae8.3ad4b2fa.css rel=prefetch><link href=/mvue/css/chunk-555e9cec.0b71df2b.css rel=prefetch><link href=/mvue/css/group-portal.846ae1f7.css rel=prefetch><link href=/mvue/js/chunk-029a266b.f7ef4a5e.js rel=prefetch><link href=/mvue/js/chunk-0e19dd50.a4a3fb7b.js rel=prefetch><link href=/mvue/js/chunk-32fbd092.d215351e.js rel=prefetch><link href=/mvue/js/chunk-4fe24ae8.44626d02.js rel=prefetch><link href=/mvue/js/chunk-555e9cec.32e5e3df.js rel=prefetch><link href=/mvue/js/chunk-fdf08432.bf5a8420.js rel=prefetch><link href=/mvue/js/group-portal.c513f391.js rel=prefetch><link href=/mvue/css/app.15268106.css rel=preload as=style><link href=/mvue/css/chunk-vendors.4cb091d7.css rel=preload as=style><link href=/mvue/js/app.bb879746.js rel=preload as=script><link href=/mvue/js/chunk-vendors.099adcdc.js rel=preload as=script><link href=/mvue/js/index.a9a2084a.js rel=preload as=script><link href=/mvue/css/chunk-vendors.4cb091d7.css rel=stylesheet><link href=/mvue/css/app.15268106.css rel=stylesheet></head><body><noscript><strong>We're sorry but x7-manage doesn't work properly without JavaScript enabled. Please enable it tocontinue.</strong></noscript><div id=app></div><script src=/mvue/js/chunk-vendors.099adcdc.js> </script> <script src=/mvue/js/index.a9a2084a.js> </script> <scriptsrc=/mvue/js/app.bb879746.js> </script> </body> </html>留神这点,咱们应该就晓得了,所以咱们新建一个/mvue目录,而后把生成的/dist文件全副复制到/mvue外面,目录构造如下所示 : ...

November 18, 2020 · 1 min · jiezi