• Docker(一)安装、介绍、镜像、容器与仓库


    全文参考书籍:《Docker技术入门与实践》,杨保华等,机械工业出版社

    一. Ubuntu上安装Docker

    参考博客:https://blog.csdn.net/weixin_50999155/article/details/119581698

    centos的:https://blog.csdn.net/weixin_46152207/article/details/112469201

    离线安装时docker下载官网:https://download.docker.com/linux/

      可以根据linux类型选择,也可以直接选择:https://download.docker.com/linux/static/stable/x86_64/

      注意处理器类型。

    具体步骤:

    1. 卸载Ubuntu上自带的docker:

    sudo apt-get remove docker docker-engine docker.io containerd runc

    2. 更新系统软件

    sudo apt-get update

    3. 安装工具软件

    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        lsb-release

    4. 添加官方 gpg key,用来防伪的

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    5. 下载仓库文件

    echo \
      "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    6. 再次更新

    sudo apt-get update

    7. 安装docker

    sudo apt-get install docker-ce docker-ce-cli containerd.io -y

    8. 启动docker,在安装完成后是自动启动docker的

    sudo service docker start

    9. 查看是否启动docker

    ps aux|grep docker

    10. 测试运行第一个docker容器

    sudo docker run hello-world

    ---------------------------------------------以上安装完成---------------------------------------------

     11. 如果想设置自启动的话

    $ systemctl start docker
    $ systemctl enable docker

    12. 每次启动docker后,可通过查询版本信息来确保docker正常运行

    docker version
    // 简化版 docker -v

    13. 为了避免每次使用docker都要用特权身份,可以将当前用户加入安装时自动创建的docker用户组:

    sudo usermod -aG docker USER_NAME

    之后更新用户组:

    newgrp docker

    当出现 Got permission denied while trying to connect to the Docker daemon socket 报错时,说明当前用户不在docker组里,可通过上述方式解决。

    14. 重启docker服务命令

    sudo service docker restart

    二. Docker介绍

    参考博客:https://blog.csdn.net/qq_34936541/article/details/104890251

     1. 什么是Docker

      Docker 是基于Go语言实现的开源容器项目,诞生于2013年初。目前主流的 Linux 都支持Docker,例如在Ubuntu 14.04 以上都自带Docker。

      Docker的构想是实现 “build, ship and run any app, anywhere”,即通过对应用的封装(packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件“一次封装,到处运行“的目的。

      基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说,Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。

      Docker 是在Linux容器(Linux Container, LXC)技术上发展而来,Docker提供了各种容器管理工具,让用户无需关注底层操作。Docker引入分层文件系统构建高效的镜像机制,降低了迁移难度。

      项目开源地址:http://github.com/docker/docker

      官网:docker.com

      Docker 17中文开发手册:https://www.php.cn/manual/view/36012.html

    2. 为什么使用Docker

    • 更快的交付和部署

      通过使用镜像来快速构建一套标准的开发环境,通过快速创建和删除容器来实现快速迭代。

    • 更高效的资源利用

      Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。跟传统虚拟机方式相比,要提高一到两个数量级。

    • 更轻松的迁移和扩展

      Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。

    • 更简单的更新管理

       使用Docker file,只需要很少的配置修改,并且所有的修改都以增量的方式被分发和更新,从而实现自动化且高效的容器管理。

    3. Docker 与虚拟机对比

    虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。

      传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

     4. 核心概念

      Docker的大部分操作都围绕它的三大核心概念----镜像、容器和仓库展开。

    镜像 Image

      Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。可以把它称为一个Apache镜像。

      镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

    容器 Container

      Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。

    可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

      镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

     仓库 Repository

      Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。

     三、使用Docker镜像

      Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用DockerHub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

    1. 获取镜像

    docker pull NAME[: TAG]

      其中,NAME 是镜像仓库的名称(用来区分镜像),TAG 是镜像的标签(往往用来表示版本信息)。通常情况下,描述一个镜像需要包括“名称+标签"信息。

    // 实例,下载版本为14.04 的ubuntu镜像
    docker pull ubuntu:14.04
    
    //如果没有显式给出标签,则默认选择latest标签,这会下载最新版本的镜像
    docker pull ubuntu

      一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新的非稳定版本而发布,内容是不稳定的。从稳定性上考虑,不要忽略镜像的标签信息或使用默认的latest标记的镜像。

     

      下载过程中可以看出,镜像文件一般由若干层(layer)组成,6c953ac5d795这样的串是层的唯一id(实际上完整的id包括256比特,由64个十六进制字符组成)。使用docker pull命令下载时会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储层的一份内容,减小了需要的存储空间。

      严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry,注册服务器)作为前缀,只是我们默认使用的是DockerHub服务,该前缀可以忽略。

      如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu: 14.04镜像,可以使用如下命令:

    docker pull hub.c.163.com/public/ubuntu:14.04

      pull子命令支持的选项主要包括: -a, --all-tags=true l false:是否获取仓库中的所有镜像,默认为否。

     2.查看镜像信息

    1.使用images命令列出镜像

    docker images

      使用docker images命令可以列出本地主机上已有镜像的基本信息。

      

      在列出的信息中,可以看到以下几个字段信息。
      (1)来自于哪个仓库,比如ubuntu仓库用来保存ubuntu系列的基础镜像。
      (2)镜像的标签信息,比如14.04、latest用来标注不同的版本信息。标签只是标记,并不能标识镜像内容。TAG信息用来标记来自同一个仓库的不同镜像。
      (3)镜像的ID(唯一标识镜像),如ubuntu: latest和ubuntu: 16.04镜像的ID都是2fa927b5cdd3,说明它们目前实际上指向同一个镜像。其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。
      (4)创建时间,说明镜像最后的更新时间。
      (5)镜像大小,优秀的镜像往往体积都较小。镜像大小信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像的逻辑体积之和。

      更多子命令选项还可以通过man docker images来查看。

    2. 使用tag命令添加镜像标签

    docker tag ubuntu:latest myubuntu:latest

      之后,用户就可以直接使用myubuntu: latest来表示这个镜像了。myubuntu : latest镜像的lD跟ubuntu: latest完全一致。它们实际上指向同一个镜像文件,只是别名不同而已。dockertag命令添加的标签实际上起到了类似链接的作用。

     3. 使用inspect命令查看详细信息

    docker inspect ubuntu:14.04

      返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用参数-f来指定。

     4. 使用history命令查看镜像历史

    docker history ubuntu:14.04
    // 注意过长的命令被自动截断了,可以使用--no-trunc选项来输出完整命令。

      镜像文件由多个层组成,使用history命令,该命令将列出各层的创建信息。

     3. 搜寻镜像

    docker search TERM

      使用docker search命令可以搜索远端仓库中共享的镜像,默认搜索官方仓库中的镜像。支持的主要参数如下:

      --automated=true | false:仅显示自动创建的镜像,默认为否;
      --no-trunc=true | false:输出信息不截断显示,默认为否;
      --s, --stars=x:指定仅显示评价为指定星级以上的镜像,默认为0,即输出所有镜像。

      默认的输出结果将按照星级评价进行排序。

     4. 删除镜像

    docker rmi IMAGE【IMAGE...】  //括号里面的IMAGE可以是标签或ID

    1. 使用标签删除镜像

      当同一个镜像拥有多个标签的时候,docker rmi命令只是删除该镜像多个标签中的指定标签,并不影响镜像文件。

      但当镜像只剩下一个标签,此时再使用docker rmi命令会彻底删除镜像。

    // 示例
    docekr rmi myubuntu:latest

    2. 使用镜像ID删除镜像

      当使用docker rmi命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

      注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。

    // 使用ps命令可看到本机上存在的所有容器
    docker ps -a
    
    // 使用ID删除
    docker rmi a21c0840213e

    // 如果想强行删除,可以使用-f参数
    docker rmi -f ubuntu:14.04

      通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。

    5. 创建镜像

      创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Docker file创建。

    1. 基于已有镜像的容器创建

    docker commit [OPTIONS] CONTAINER [ REPOSITORY[:TAG] ]

      -a, --author="":作者信息;
      -c, --change=[]:提交的时候执行Dockerfile指令,包括CMDIENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD(USER|VOLUME| WORKDIR等;
      -m, --message=""︰提交消息;
      -p,--pause=true:提交时暂停容器运行。

    // 示例
    docker commit -m "Added a new file" -a "Docker" ubuntu:latest test:0.1

      顺利的话,会返回新创建的镜像的ID信息。

    2. 基于本地模板导入(没有验证)

    docker import [OPTIONS] file |URL| - [ REPOSITORY[:TAG] ]

      要直接导入一个镜像,可以使用OpenVZ提供的模板来创建,或者用其他已导出的镜像模板来创建。OpenVZ模板的下载地址为http://openvz.org/Download/templates/precreated

     3. 基于Docker file创建

       pass

    6. 存出和载入镜像 

     1. 导出镜像到本地文件

    docker save
    
    // 例如导出本地ubuntu:14.04镜像为文件ubuntu_14.04.tar
    docker save -o ubuntu_14.04.tar ubuntu:14.04 

    2. 载入文件

    docker load --input ubuntu_14.04.tar
    // 或者
    docker load < ubuntu_14.04.tar

    7. 上传镜像

      使用docker push命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。命令格式为:

    docker push NAME[:TAG] | [ REGISTRY_HOST[:REGISTRY_PORT]/ ] NAME[:TAG]

    四、操作Docker容器

      容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。

    1. 新建容器

    docker create
    
    // 示例
    docker create -it ubuntu:latest  // 可以是 -i -t
    // 会返回一串16进制串 eg. af13241865121

      其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。

      使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。
      create命令和后续的run命令支持的选项都十分复杂,主要包括如下几大类:与容器运行模式相关、与容器和环境配置相关、与容器资源限制和安全保护相关。详见Docker开发手册。

     2. 启动容器

    docker start af  // 后面这个是16进制串的前缀

    docker ps // 显示的是当前运行的容器

    3. 新建并启动容器

      docker run可以直接新建并启动容器

    // 示例 下面命令输出一个'Hello World',之后容器自动终止
    docker run ubuntu /bin/echo 'Hello World'

      当利用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:
    (1) 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
    (2) 利用镜像创建一个容器,并启动该容器;·分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
    (3) 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
    (4) 从网桥的地址池配置一个IP地址给容器;
    (5)执行用户指定的应用程序;
    (6)执行完毕后容器被自动终止。

     

       这个示例用命令启动了一个bash终端,允许用户进行交互,通过输入 ps 命令 可在容器内查看进程。最后输入exit 退出。

      对于所创建的bash容器,当使用exit命令退出之后,容器就自动处于退出(Exited)状态了。这是因为对Docker容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。

      某些时候,执行dockerrun会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码。

      默认情况下,常见错误代码包括:

      · 125:Docker daemon执行出错,例如指定了不支持的Docker命令参数;

      · 126:所指定命令无法执行,例如权限出错;

      · 127:容器内命令无法找到。

      命令执行后出错,会默认返回错误码。

     4. 守护态运行

      更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现。

    docker run -d ubuntu

     5. 终止容器

    docker stop[-t|--time[=10]][CONTAINER...]

      首先向容器发送SIGTERM信号,等待一段超时时间(默认为10秒)后,再发送SIGKILL信号来终止容器:

    // 示例
    docker stop ID

      docker kill命令会直接发送SIGKILL信号来强行终止容器。

      此外,当Docker容器中指定的应用终结时,容器也会自动终止。例如对于上面第3节示例中只启动了一个终端的容器,用户通过exit命令或Ctrl+d来退出终端时,所创建的容器立刻终止,处于stopped状态。

    docker ps -qa
    // 查看所有容器的ID,真的只显示ID,别的啥也不显示。不如用-a

      处于终止状态的容器,可以通过docker start命令来重新启动

       此外,docker restart命令会将一个运行态的容器先终止,然后再重新启动它。

     6. 进入容器

      在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。

      这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。

    1. attach命令

      attach是Docker自带的命令,命令格式为:

    docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

      支持三个主要选项:

    · --detach-keys[=[]]:指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q;

    · --no-stdin=true|false:是否关闭标准输入,默认是保持打开;

    · --sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true。

    docker run -itd ubuntu
    
    docker attach ID

      但是使用attach命令有时候并不方便。当多个窗口同时用attach命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

    2. exec命令

      exec命令可以在容器内直接执行任意命令。该命令的基本格式为:

    docker exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

      比较重要的参数有:

    · -i,--interactive=true|false:打开标准输入接受用户输入命令,默认为false;

    · --privileged=true|false:是否给执行命令以高权限,默认为false;

    · -t,--tty=true|false:分配伪终端,默认为false;

    · -u,--user="":执行命令的用户名或ID。

    //例如进入到刚创建的容器中,并启动一个bash:
    docker exec -it ID  /bin/bash

      通过指定-it参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式。

    3. nsenter工具

      pass

    7. 删除容器

    docker rm [-f|--force][-l|--link][-v|--volumes]CONTAINER[CONTAINER...]

      主要支持的选项包括:

    · -f,--force=false:是否强行终止并删除一个运行中的容器;

    · -l,--link=false:删除容器的连接,但保留容器;

    · -v,--volumes=false:删除容器挂载的数据卷。

      如果要直接删除一个运行中的容器,可以添加-f参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除,

    8. 导出容器

      导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。

    docker export[-o|--output[=""]]CONTAINER
    // 示例
    docker export -o test.tar ID
    //or
    docker export ID > test.tar

      之后,可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,从而实现容器的迁移。

    9. 导入容器

      导出的文件又可以使用docker import命令导入变成镜像,该命令格式为:

    docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]

      实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。

      这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

    五、访问Docker仓库

      仓库(Repository)是集中存放镜像的地方,分公共仓库和私有仓库。一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。从这方面来说,可将仓库看做一个具体的项目或目录。例如对于仓库地址private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。

     1. Docker Hub公共镜像市场

      Docker官方维护了一个公共镜像仓库https://hub.docker.com

      1. 在网站注册后可用命令 docker login 登录

      2. 用户无需登录即可通过docker search命令来查找官方仓库中的镜像,并利用docker pull命令来将它下载到本地。

      3. 这些镜像资源分为两类。一种是类似ubuntu这样的基础镜像,称为基础或根镜像。这些镜像是由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。

          还有一种类型,比如ansible/centos7-ansible镜像,它是由Docker用户ansible创建并维护的,带有用户名称为前缀,表明是某用户下的某仓库。可以通过用户名称前缀user_name/镜像名来指定使用某个用户提供的镜像。

    Ansible是知名自动化部署配置管理工具

      4. 自动创建

      自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。

      而自动创建允许用户通过Docker Hub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。

      要配置自动创建,包括如下的步骤:

    1)创建并登录Docker Hub,以及目标网站;*在目标网站中连接帐户到Docker Hub;

    2)在Docker Hub中配置一个“自动创建”;

    3)选取一个目标网站中的项目(需要含Dockerfile)和分支;

    4)指定Dockerfile的位置,并提交创建。

    2. 国内镜像市场

      各种云服务厂商都有。

      pass

    3. 搭建本地私有仓库


    1. 创建

      下载registry镜像

    docker pull registry

      创建registry容器并开放窗口

    docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true  -v /data/registry:/var/lib/registry  registry:latest

    -p指定端口,一内一外;
    --name=registry 运行的容器名称
    --restart=always 自动重启
    --privileged=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
    -v表示挂载,前者是宿主机,后者是容器
    registry:latest  需要运行镜像名称

    /*-----------------------简例--------------------------

      安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:

    docker run -d -p 5000:5000 registry

      这将自动下载并启动一个registry容器,创建本地的私有仓库服务。

      默认情况下,会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。

    //例如下面的例子将上传的镜像放到/opt/data/registry目录:
    $ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

      此时,在本地将启动一个私有仓库服务,监听端口为5000。

    */

    2. 管理

     1. 首先查询docker本机IP地址,使用下面命令查看registry详细信息:

    docker inspect registry

    2.  修改上传目标镜像标签

    // 假设上传ubuntu, 修改标签ip/name
    docker tag ubuntu:latest 172.17.0.2:5000/test

    3. 在本地节点172.17.0.2上配置镜像仓库地址

    如果这时直接上传该镜像,可能会遇0到如下错误

    出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。

    这个报错是在本地上传私有镜像的时候遇到的报错。

    解决方法:

    在/etc/docker/daemon.json中配置

    {
      "insecure-registries": ["172.17.0.2:5000"]
    }
    //详细过程
    //第一次进root时,使用命令sudo passwd root
    $ su //进入特权命令 $ cd /etc/docker //转到该目录下 $ ls //查看该目录下有无daemon.json文件 $ vi daemon.json //如果没有创建该文件并写入如下内容,请先安装vim /* { "insecure-registries": ["192.168.17.83:5000"] } */ // 重启docker服务 $ systemctl daemon-reload $ systemctl restart docker

    参考博客:https://www.cnblogs.com/programmer-tlh/p/10996443.html

         当然,如果没有如上错误也得配置一遍,新的Docker版本对安全性要求较高,会要求仓库支持SSL/TLS证书。对于内部使用的私有仓库,可以自行配置证书或关闭对仓库的安全性检查。

      修改Docker daemon的启动参数,添加如上的参数,表示信任这个私有仓库,不进行安全证书检查。

      如果要使用安全证书,用户也可以从较知名的CA服务商(如verisign)申请公开的SSL/TLS证书,或者使用openssl等软件来自行生成。

     4. 上传镜像

    docker push 172.17.0.2:5000/test

      之后可用如下命令查看:

    curl http://172.17.0.2:5000/v2/_catalog

    5. 在本机或其他节点下载镜像

      其他节点要在/etc/docker/daemon.json中配置,并随后重启docker服务

    {
      "insecure-registries": ["192.168.17.83:5000"]
    }

      使用pull命令下载本地仓库镜像:

    docker pull 172.17.0.2:5000/test

     管理 这里参考了博客:https://blog.csdn.net/liaomingwu/article/details/124167375

    实例

    配置情况:校园网,两台主机有线连接,PC1为双系统Ubuntu,PC2为Windows上虚拟机Ubuntu

      在PC1上配置了本地仓库,此时docker ip地址为172.17.0.2,本地ip地址为10.71.22.141

    docker ip地址的查看方式为docker inspect registry, 显示的详细信息里找 “network”->"ip addess"即可

    本地ip地址查看方式1. ip addr show   2. 安装net-tools,命令ifconfig -a 查看,在PC1上显示在PPP0里。

      看网上博客说需要将虚拟机上的Ubuntu网络改为桥接模式,我试了下发现不行,甚至都ping不通PC1,直接使用NAT模式即可。

      在PC1上测试发现,使用172.17.0.2就可以下载镜像,而10.71.22.141则不行,但是可以查到本地仓库。

      在PC2的虚拟机上,将10.71.22.141设置在daemon.json文件后,就可以通过该ip地址拉取本地镜像了。

  • 相关阅读:
    DockerPush
    DockerInstall
    DockerFile
    基于虚拟机实例/java程序线程的虚拟机内存分配
    Class文件结构及方法中的指令
    JAVA类型生命周期的开始阶段和使用阶段/以及创建对象的几种方式
    。。。。。毕业季
    PCA算法
    ffmpeg将图片转为视频
    Linux下使用bgslibrary的OpenCv库
  • 原文地址:https://www.cnblogs.com/astonc/p/16466878.html
Copyright © 2020-2023  润新知