云服务器内容精选

  • 产品简介 容器镜像服务(SoftWare Repository for Container,简称SWR)是一种支持镜像全生命周期管理的服务, 提供简单易用、安全可靠的镜像管理功能,帮助您快速部署容器化服务。 通过使用容器镜像服务,您无需自建和维护镜像仓库,即可享有云上的镜像安全托管及高效分发服务,并且可配合云容器引擎 CCE、云容器实例 CCI使用,获得容器上云的顺畅体验。 容器镜像服务共享版免费,企业版收费。共享版和企业版的差异详见共享版及企业版对比。企业版的计费项包括购买仓库的费用、制品存储的费用和制品传输流量费用
  • 访问方式 华为云提供了Web化的服务管理平台(即管理控制台)和基于HTTPS请求的API(Application programming interface)管理方式。 API方式 如果用户需要将容器镜像服务集成到第三方系统,用于二次开发,请使用API方式访问容器镜像服务。具体操作请参见《容器镜像服务API参考》。 管理控制台方式 其他相关操作,请使用管理控制台方式访问容器镜像服务。如果用户已在云平台注册,可直接登录管理控制台,从主页选择“容器镜像服务”。 如果未注册,请参考如何注册华为云管理控制台的用户,进行账号注册。
  • 产品功能 镜像全生命周期管理 容器镜像服务支持镜像的全生命周期管理,包括镜像的上传、下载、删除等。 私有镜像仓库 容器镜像服务提供私有镜像库,并支持细粒度的权限管理,可以为不同用户分配相应的访问权限(读取、编辑、管理)。 镜像加速 容器镜像服务通过华为自主专利的镜像下载加速技术,使CCE集群下载镜像时在确保高并发下能获得更快的下载速度。 镜像仓库触发器 容器镜像服务支持容器镜像版本更新自动触发部署。您只需要为镜像设置一个触发器,通过触发器,可以在每次镜像版本更新时,自动更新使用该镜像部署的应用。
  • 操作步骤 下载image-syncer,解压并运行工具。 以v1.3.1版本为例,您也可以选择其他版本。 wget https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz tar -zvxf image-syncer-v1.3.1-linux-amd64.tar.gz 创建镜像仓库的认证信息文件auth.json。 image-syncer支持基于Docker Registry V2搭建的docker镜像仓库,按格式填写即可。将源仓库及目标仓库认证信息写入,示例如下。 { "swr.××××.myhuaweicloud.com": { "username": "××××@F1I3Q……", "password": "2fd4c869ea0……" }, "swr.××××.myhuaweicloud.com": { "username": "××××@4N3FA……", "password": "f1c82b57855f9d35……" } } 其中swr.××××.myhuaweicloud.com为镜像仓库地址,username、password可以在登录命令中获取,获取方法如下: 登录SWR控制台,在总览页面右上角单击“登录指令”,在弹出的窗口中获取登录指令,如下图所示。 图1 登录指令 因安全性要求,以上示例中所有username和password均有部分内容进行省略,请以控制台获取到的实际用户名和密码为准。 创建同步镜像描述文件images.json。 如下示例,左边是源仓库的地址,右边是目的仓库地址。image-syncer还支持其他描述方式,具体请参见README-zh_CN.md。 { "swr.cn-north-4.myhuaweicloud.com/org-ss/canary-consumer": "swr.cn-east-3.myhuaweicloud.com/dev-container/canary-consumer" } 执行如下命令将镜像迁移至SWR。 ./image-syncer --auth=./auth.json --images=./images.json --namespace=dev-container --registry=swr.cn-east-3.myhuaweicloud.com --retries=3 --log=./log 表1 命令行参数说明 参数 说明 --config 设置用户提供的配置文件路径,使用之前需要创建此文件,默认为当前工作目录下的config.json文件。这个参数与 --auth和--images 的作用相同,分解成两个参数可以更好地区分认证信息与镜像仓库同步规则。建议使用 --auth 和 --images。 --images 设置用户提供的镜像同步规则文件所在路径,使用之前需要创建此文件,默认为当前工作目录下的images.json文件。 --auth 设置用户提供的认证文件所在路径,使用之前需要创建此认证文件,默认为当前工作目录下的auth.json文件。 --log 打印出来的log文件路径,默认打印到标准错误输出,如果将日志打印到文件将不会有命令行输出,此时需要通过cat对应的日志文件查看。 --namespace 设置默认的目标namespace,当配置文件内一条images规则的目标仓库为空,并且默认registry也不为空时有效,可以通过环境变量DEFAULT_NAMESPACE设置,同时传入命令行参数会优先使用命令行参数值。 --proc 并发数,进行镜像同步的并发goroutine数量,默认为5。 --retries 失败同步任务的重试次数,默认为2,重试会在所有任务都被执行一遍之后开始,并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout,都可以通过设置重试次数来减少失败的任务数量。 --registry 设置默认的目标registry,当配置文件内一条images规则的目标仓库为空,并且默认namespace也不为空时有效,可以通过环境变量DEFAULT_REGISTRY设置,同时传入命令行参数会优先使用命令行参数值。 迁移命令执行后,可登录目标镜像仓库,查看已迁移的镜像。
  • 操作步骤 购买一个CCE集群。 登录CCE控制台 在购买CCE集群页面配置集群参数,详细请参考创建集群参数配置。 等待集群创建成功。创建成功后在集群管理下会显示一个运行中的集群,且集群节点数量为0。 创建CCE节点。 集群创建成功后,您还需要在集群中创建运行工作负载的节点。CCE节点默认安装了Linux操作系统和Docker。我们可以用它创建基础镜像。 在下面的步骤中,我们将以Centos7.6为例,详细介绍如何创建JDK8基础镜像,并将它上传到SWR。 登录CCE控制台。 单击1中创建的集群,进入集群控制台。 在左侧菜单栏选择节点管理,进入节点页签,单击右上角“创建节点”,在弹框中配置节点的参数。 在网络配置中,选择“自动创建”1个弹性公网IP,带宽为5Mbit/s。 图1 网络配置 单击“下一步: 规格确认”。 查看节点规格无误后,阅读页面上的使用说明,勾选“我已阅读并知晓上述使用说明和《云容器引擎服务声明》”,单击“提交”。 等待节点创建成功。创建成功后在节点管理下会显示一个运行中的节点。 图2 CCE节点示例 下载JDK软件包。 节点创建成功后,单击节点名称,进入云服务器详情页。 在云服务器详情页,单击右上角“远程登录”。 选择一种登录方式,单击“登录”。 以root用户登录弹性云服务器。 新建一个目录image。 mkdir image 进入image目录。 cd image 下载JDK软件包。 wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u352-b08/openlogic-openjdk-8u352-b08-linux-x64.tar.gz 构建一个镜像。 执行vi dockerfile命令,编写一个Dockerfile,并写入以下信息: FROM centos #使用centos作为基础镜像 RUN useradd -d /home/springboot -m springboot #在工作目录下创建一个用户 ADD ./openlogic-openjdk-8u352-b08-linux-x64.tar.gz /home/springboot #拷贝jdk软件包到镜像,并自动解压 RUN chown springboot:springboot /home/springboot/openlogic-openjdk-8u352-b08-linux-x64 -R USER springboot #指定用户为springboot ENV JAVA_HOME=/home/springboot/openlogic-openjdk-8u352-b08-linux-x64 #设置环境变量 ENV PATH=$JAVA_HOME/bin:$PATH \ CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar WORKDIR /home/springboot/ #指定镜像的工作目录 以上仅为示例,如果您想详细了解Dockerfile的详细使用帮助,请查看Dockerfile reference。 按ESC,输入:wq,保存Dockerfile,并退出编辑。 执行下面的命令,构建一个镜像。 docker build -t openjdk:8 . 使用docker images命令,查看镜像是否构建成功。 图3 查看镜像是否创建成功 登录容器镜像服务控制台,并创建一个组织。 示例:这里我们创建一个名为testawa0306的组织。 上传镜像到5的组织下。 以root用户登录容器镜像服务控制台。 为镜像打标签。 示例如下:docker tag openjdk:8 swr.cn-north-4.myhuaweicloud.com/testawa0306/0penjdk:v8.8 上传镜像到步骤5的组织下。 docker push swr.cn-north-4.myhuaweicloud.com/testawa0306/0penjdk:v8.8 镜像上传成功后,我们可以在容器镜像服务控制台-“我的镜像”中找到刚刚上传成功的镜像。 (可选)镜像上传成功后,你可以使用已上传的镜像在CCE中部署工作负载。
  • 配置通过VPCEP访问SWR 通过VPCEP访问SWR用户场景可分为以下两种: 场景一(推荐):仅允许业务VPC内虚拟机下载镜像,禁止上传镜像。请参考配置VPCEP仅允许从SWR下载镜像进行配置。 场景二:允许业务VPC内虚拟机上传下载镜像。请参考配置VPCEP从SWR上传下载镜像进行配置。 配置VPCEP仅允许从SWR下载镜像 配置VPCEP从SWR上传下载镜像 验证是否已经切换到VPCEP访问SWR 父主题: 配置访问网络
  • 五、上传镜像 在安装容器引擎的虚拟机上执行以下命令,为2048镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 其中, [镜像名称1:版本名称1]:请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]:可在SWR控制台上查询,四、连接容器镜像服务中登录指令末尾的域名即为镜像仓库地址。 [组织名称]:请替换为三、创建组织中创建的组织。 [镜像名称2:版本名称2]:请替换为您期待的镜像名称和镜像版本。 示例: docker tag 2048:latest swr.cn-north-4.myhuaweicloud.com/cloud-develop/2048:v1 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 示例: docker push swr.cn-north-4.myhuaweicloud.com/cloud-develop/2048:v1 终端显示如下信息,表明上传镜像成功。 The push refers to repository [swr.cn-north-4.myhuaweicloud.com/cloud-develop/2048] fbce26647e70: Pushed fb04ab8effa8: Pushed 8f736d52032f: Pushed 009f1d338b57: Pushed 678bbd796838: Pushed d1279c519351: Pushed f68ef921efae: Pushed v1: digest: sha256:0cdfc7910db531bfa7726de4c19ec556bc9190aad9bd3de93787e8bce3385f8d size: 1780 返回SWR管理控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。 镜像上传成功后,你可以使用已上传的镜像在云容器引擎中部署工作负载。
  • 一、安装容器引擎 首先,您需要准备一台虚拟机并安装docker容器引擎,请确保容器引擎为1.11.2及以上版本。 参考购买并登录Linux弹性云服务器创建一台带有弹性公网IP的Linux弹性云服务器。 作为演示,弹性云服务器和公网IP的规格不需要太高,例如弹性云服务器的规格为“1vCPUs | 2GB”、公网IP带宽为“1 Mbit/s”即可,操作系统以选择“CentOS 7.5”为例。 您也可以使用其他机器安装容器引擎,不创建弹性云服务器。 如果您使用的操作系统为EulerOS,请参考EulerOS操作系统下安装。 如果您使用的是Centos操作系统,建议选择CentOS7、CentOS7.2、CentOS7.3、CentOS7.4、CentOS7.5、CentOS7.6操作系统版本,否则可能导致安装异常。 创建完成后返回弹性云服务器列表,单击操作列的“远程登录”,以root用户登录弹性云服务器。 使用如下命令快速安装容器引擎。 curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh sudo systemctl daemon-reload sudo systemctl restart docker
  • 二、构建镜像 在安装docker容器引擎的虚拟机上执行以下命令,下载2048应用的源码。 git clone https://gitee.com/jorgensen/2048.git 若提示“git: command not found”表示未安装Git工具,请先安装该工具(可使用yum install git命令)。 下载成功后,进入“2048”目录。 cd 2048 修改Dockerfile文件。 vim Dockerfile FROM nginx COPY . /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] FROM:指定基础镜像nginx。 COPY:将2048源码拷贝到容器内的“/usr/share/nginx/html”目录。 EXPOSE:暴露容器的80端口。 CMD:指定容器运行时的默认命令。 按“Esc”,输入:wq,保存并退出。 使用docker build命令构建镜像。 docker build -t 2048 . 其中, -t表示给镜像加一个标签,也就是给镜像取名,这里镜像名为2048。 . 表示上下文路径,镜像构建命令将该路径下的所有内容打包给容器引擎帮助构建镜像。 执行以下命令,查看已成功构建的2048镜像,版本为默认的latest。 docker images # docker images REPOSITORY TAG IMAGE ID CREATED SIZE 2048 latest 8d421c503ed0 About a minute ago 134MB nginx latest dd34e67e3371 6 days ago 133MB 您还可以看到一个nginx镜像,这个镜像是从镜像仓库下载下来,作为2048镜像的基础镜像使用的。 (可选)运行容器镜像。 镜像构建成功后,您可以执行docker run命令运行容器镜像。 docker run -p 8080:80 2048 docker run命令会启动一个容器,命令中-p是将虚拟机的8080端口映射到容器的80端口,即虚拟机的8080端口的流量会映射到容器的80端口,当您在本地机器的浏览器访问“https://ECS的弹性公网IP:8080”时,就会访问到容器中,此时浏览器返回的内容就是2048应用页面。
  • 入门指引 容器镜像服务是一种支持容器镜像全生命周期管理的服务,提供简单易用、安全可靠的镜像管理功能,帮助用户快速部署容器化服务。本文档以一个2048应用为例,帮助您学习如何安装容器引擎并构建镜像,以及如何使用容器引擎客户端上传镜像到容器镜像仓库。 上传镜像到容器镜像仓库支持两种方式:使用容器引擎客户端和console页面,console页面上传请参见页面上传。 上传镜像暂时没有开放镜像上传的API。 您将按以下流程学习如何使用容器镜像服务。 图1 入门流程
  • 为什么登录指令执行失败? 登录指令执行失败有以下几种情况: 容器引擎未安装正确,报如下所示错误: “docker: command not found” 解决方法:重新安装容器引擎,安装方法请参见安装容器引擎。 由于容器镜像服务支持容器引擎1.11.2及以上版本上传镜像,建议下载对应版本。 安装容器引擎需要连接互联网,内网服务器需要绑定弹性公网IP后才能访问。 临时登录指令已过期或登录指令中区域项目名称、AK、登录密钥错误,报如下所示错误: “unauthorized: authentication required” 解决方法:登录容器镜像服务控制台,在左侧菜单栏选择“我的镜像”,单击右侧“客户端上传”获取登录指令。 获取临时的登录指令:单击“生成临时登录指令”,在弹出的页面中单击复制登录指令。 获取长期有效的登录指令:单击“如何获取长期有效登录指令”,具体方法请参见获取长期有效登录指令。 登录指令中镜像仓库地址错误,报如下所示错误: “Error llgging in to v2 endpoint, trying next endpoint: Get https://{{endpoint}}/v2/: dial tcp: lookup {{endpoint}} on xxx.xxx.xxx.xxx:53 : no such host” 解决方法: 修改登录指令中的镜像仓库地址。 镜像仓库地址格式 : swr.区域项目名称.myhuaweicloud.com,如“华北-北京四”对应的镜像仓库地址为swr.cn-north-4.myhuaweicloud.com。 获取临时的登录指令:方法请参见2。 x509: certificate has expired or is not yet valid 长期有效登录指令中AK/SK被删除导致,请使用有效的AK/SK生成登录指令。 x509: certificate signed by unknown authority 问题原因: 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果服务端证书不是权威机构颁发的,则会报如下错误:x509: certificate signed by unknown authority 解决方法: 如果用户信赖服务端,跳过证书认证,那么可以手动配置Docker的启动参数,配置方法如下: CentOS: 修改“/etc/docker/daemon.json”文件(如果没有,可以手动创建),在该文件内添加如下内容: { "insecure-registries": ["{镜像仓库地址}"] } Ubuntu: 修改“/etc/default/docker”文件,在DOCKER_OPTS配置项中增加如下内容: DOCKER_OPTS="--insecure-registry {镜像仓库地址}" EulerOS: 修改“/etc/sysconfig/docker”文件,在INSECURE_REGISTRY配置项中增加如下内容: INSECURE_REGISTRY='--insecure-registry {镜像仓库地址}' 镜像仓库地址支持域名和IP形式。 域名:swr.区域项目名称.myhuaweicloud.com。例如“华北-北京四”的镜像仓库地址为:swr.cn-north-4.myhuaweicloud.com。 IP:可通过ping镜像仓库地址(域名形式)获取。 配置完成后,执行systemctl restart docker重启容器引擎。 denied: Authenticate Error 用户无编程访问权限,需要使用管理员账号登录IAM,修改用户访问方式。 denied: Not allow to login、upload or download image 用户大批量并发上传镜像或者攻击服务,系统把用户拉黑,用户无法登录和上传下载镜像。请在30分钟之后重新尝试或通过提工单的形式,由运维工程师进行处理。 父主题: 故障类
  • x509: certificate signed by unknown authority 问题现象:使用docker pull拉取镜像,报错“x509: certificate signed by unknown authority”。 问题原因: 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果客户端安装的根证书不完整,会报如下错误:“x509: certificate signed by unknown authority”。 容器引擎客户端配置了Proxy导致。 解决方法: 如果您信赖服务端,跳过证书认证,那么可以手动配置容器引擎的启动参数,配置如下(其中地址配置成需要的即可,选择一个配置即可): /etc/docker/daemon.json(如果没有可以手动创建),在该文件内添加如下配置(注意缩进,2个空格): { "insecure-registries":["镜像仓库地址"] } /etc/sysconfig/docker: INSECURE_REGISTRY='--insecure-registry=镜像仓库地址' 添加配置后执行如下命令重启:systemctl restart docker或service restart docker。 执行docker info命令,检查Proxy配置是否正确,修改为正确的Proxy配置。
  • Error response from daemon 问题现象:使用docker pull拉取官方镜像,如docker pull elasticsearch:5时,报错“Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)”。 问题原因:Docker默认的源为国外官方源,镜像拉取速度较慢,可能因超时而拉取失败。 解决方法:将Docker镜像源修改为容器镜像服务所提供的源,具体方法请参考设置镜像加速器。
  • Error: remote trust data does not exist 问题现象:使用docker pull拉取镜像,报错“Error: remote trust data does not exist”。 问题原因:客户端开启镜像签名验证,而镜像没有镜像签名层。 解决方法:查看“/etc/profile”文件中的环境变量是否设置了DOCKER_CONTENT_TRUST=1,如果设置了,请将其改为DOCKER_CONTENT_TRUST=0,然后执行source /etc/profile生效。
  • 为什么CCE工作负载拉取SWR内的镜像异常,且提示为“未登录”? 当CCE工作负载无法正常拉取SWR的镜像,且提示“未登录”时,请排查该工作负载的yaml文件中是否存在“imagePullSecrets”字段,且name参数值需固定为default-secret。 示例: apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret 父主题: 其他