Docker介绍以及实战教程

news2024/11/23 22:07:50

Docker简介

  • Docker为什么出现
    • 从事软件开发的朋友,可能经常会碰到以下场景:
    • 运维:你这程序有Bug啊,怎么跑不起来啊!
    • 开发:我机子上能跑啊,你会不会用啊
    • 究其原因还是开发环境与生产环境不同造成的,比如编译器,数据库版本不一致或者缺少某些组件。运维就得重新部署环境,费时费力。
    • 那么就有人想,能不能从根本上解决这个问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来?当然可以,答案就是Docker。
    • Docker可以把开发环境除了系统外,所有的东西都打包成一个镜像,然后交给运维,运维在生产环境上安装这个镜像后,就能保证生产环境和开发环境完全一致,就可以完美解决环境不同导致程序无法正常运行的问题。并且部署到新机器上时,直接进行安装,不用再费时费力的进行环境的部署。
  • Docker是什么
    • Docker是基于Go语言实现的云开源项目。主要目标是 “Build, Ship and Run Any App, Anywhere”, 也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能够做到 “一次镜像,处处运行”。
    • 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
  • Docker能干什么
    • 传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁琐的配置才能正常运行。Docker化之后只需交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省了部署配置和测试验证时间。

容器和虚拟机

  • 对于虚拟机技术来说,传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统
  • 容器技术和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器内没有自己的内核,也没有进行硬件虚拟。
    请添加图片描述

    虚拟机容器
    启动速度分钟级秒级
    运行性能5%左右损失接近原生
    磁盘占用GBMB
    隔离性系统级进程级
    封装程度完整的操作系统只打包代码和依赖环境,共享宿主机内核

Docker网站

  • 官网
  • github 源码

Docker三要素

  • 镜像(image)
    • 镜像可以用来创建Docker容器,一个镜像可以创建多个容器。把镜像比作类,容器就是用类实例化出来的类对象。
  • 容器(container)
    • Docker利用容器独立运行一个或一组应用,应用程序或者服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 仓库(repository)
    • 集中存放镜像文件的地方

Docker安装

  • centos安装docker流程
  • 安装准备
    • centos安装docker要注意版本至少是centos7
  • 卸载旧版本
    • 如果已经安装docker,执行以下命令卸载
    •  sudo yum remove docker \
                 docker-client \
                 docker-client-latest \
                 docker-common \
                 docker-latest \
                 docker-latest-logrotate \
                 docker-logrotate \
                 docker-engine
      
  • 安装gcc
    •   yum -y install gcc
        yum -y install gcc-c++
      
  • 安装软件包
    •   sudo yum install -y yum-utils
      
  • 设置stable镜像仓库
    •   sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
  • 更新yum软件包索引
    •    yum makecache fast
      
  • 安装docker
    •   sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      
  • 卸载docker
    •   	systemctl stop docker
        	sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 
        	sudo rm -rf /var/lib/docker
        	sudo rm -rf /var/lib/containerd
      

Docker测试

  • 启动docker
    • sudo systemctl start docker
  • 查看docker版本
    • docker version
    • 可以查看到docker版本信息,就说明安装成功了

配置阿里云容器镜像

  • 配置阿里云镜像可以在拉取镜像时提高速度
  • 阿里云官网
  • 在产品这里搜索容器镜像服务
    在这里插入图片描述
    • 选择免费试用
      在这里插入图片描述
    • 按照这里去操作即可
      在这里插入图片描述

Docker常用命令

  • 帮助启动类命令
    • 启动docker:systemctl start docker
    • 停止docker:systemctl stop docker
    • 重启docker:systemctl restart docker
    • 查看docker状态:systemctl status docker
    • 开机启动:systemctl enable docker
    • 查看docker概要信息:docker info
    • 查看docker帮助文档:docker --help
    • 查看docker命令详细帮助文档:docker 命令 --help
  • 镜像命令
    • 列举镜像 : docker images
      • REPOSITORY:镜像仓库源
      • TAG:镜像标签版本号,latest表示最新版本
      • IMAGE ID :镜像ID
      • CREATED :镜像创建时间
      • SIZE : 镜像大小
      • 示例
      •   [root@localhost lingp]# docker images
          REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
          chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago   844kB
        
    • 搜索镜像:docker search 镜像
      • NAME :镜像名
      • DESCRIPTION:镜像说明
      • STARS:点赞数
      • OFFICIAL:是否官方认证
      • AUTOMATED:是否是自动构建的
      •   [root@localhost lingp]# docker search hello-word
          NAME                                    DESCRIPTION                   STARS     OFFICIAL   AUTOMATED
          alexstruk/hello-wordpress                                             0                    
          chenlicn163/hello-word                  hello-word                    0                    [OK]
          princechopra/hello-word                                               0                    
          vaibhavmehta/hello-word-node            hello-word-node               0                    
          lyvy/hello-word                         hello-word spring boot        0                    
          ilfaugno/hello-word                                                   0                    
          sjolicoeur/hello-word                                                 0                    
          abhayjava/hello-word                    The dummy short description   0                    
          txg5214/hello-word                      hello-word                    0                    
          sjolicoeur/hello-word2                                                0                    
          yueshide/hello-word                                                   0                    
          rahulnit/hello-word                     hello-word                    0                    
          szaier75/hello-word                     hello-word                    0                    
          etokarev/hello-word-python                                            0                    
          cpangam/hello-word                                                    0                    
          geekmc/hello-word                                                     0                    
          bc14f103c716/hello-word                                               0                    
          rghorpade80/hello-word-docker-valaxy4                                 0                    
          wattwatt/hello-word                                                   0                    
          luoyangc/hello-word                                                   0                    
          hubikz/hello-worda                                                    0                    
          mselender/hello-word                                                  0                    
          thitikornc/hello-word                                                 0                    
          never001/hello-word                                                   0                    
          manyyaks/hello-word                                                   0         
        
    • 拉取镜像:git pull [镜像名字:TAG]
      • TAG可以不写,不写TAG就拉取最新的
      •   [root@localhost lingp]# docker pull chenlicn163/hello-word
          Using default tag: latest
          latest: Pulling from chenlicn163/hello-word
          19223ab0feef: Pull complete 
          Digest: sha256:2b7b800ab2ef8f0c2c3331ee170af82c3613b167d20e56d1884dca4772fee6c3
          Status: Downloaded newer image for chenlicn163/hello-word:latest
          docker.io/chenlicn163/hello-word:latest
          [root@localhost lingp]# docker images
          REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
          chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago   844kB
        
    • 查看镜像所占空间 : docker system df
    • 删除镜像 : docker rmi [镜像名:TAG 或者 IMAGE ID]
    • 删除所有镜像:docker rmi -f $(docker images -qa)
      • 这个命令知道就可以,可别随便用
  • 容器命令
    • 前面已经介绍了,把镜像比作类,容器就是类对象。因此我们先要有一个镜像,我们先拉取一个ubuntu镜像
    •   [root@localhost lingp]# docker pull ubuntu
        Using default tag: latest
        latest: Pulling from library/ubuntu
        7b1a6ab2e44d: Pull complete 
        Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
        Status: Downloaded newer image for ubuntu:latest
        docker.io/library/ubuntu:latest
        [root@localhost lingp]# docker images
        REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
        ubuntu                   latest    ba6acccedd29   21 months ago   72.8MB
        chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago     844kB
      
    • 新建启动容器 : docker run [OPTIONS] 镜像名:TAG COMMAND
      • OPTIONS可取以下值:
        • –name : 为容器指定一个名称
        • -d : 后台运行容器并返回容器ID,也即启动守护式容器
        • -i :以交互模式运行容器,通常与-t同时使用
        • -t : 为容器重新分配一个伪输入终端,通常与-i同时使用
        • -P :随机端口映射
        • -p : 指定端口映射
      •   [root@localhost lingp]# docker images
          REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
          ubuntu                   latest    ba6acccedd29   21 months ago   72.8MB
          chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago     844kB
          [root@localhost lingp]# docker run -it --name=myubuntu ubuntu:latest /bin/bash
          root@1a139f4915df:/#
        
      • TAG可以不写,默认就是最新的。这个命令表示使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。并给这个容器起名字myname,如果不指定name,系统会自动分配一个。这里说下-d参数的作用,不加-d,那么关闭当前容器终端,容器就会关闭,加-d,关闭当前容器终端,容器不会关闭,依旧在后台运行。
      • 这个时候我们就进入了ubuntu镜像开启的容器中,可以看下版本。此时我们新建和启动的这个容器就可以看成一个真实的ubuntu系统。
      •   root@1a139f4915df:/# cat /etc/issue
          Ubuntu 20.04.3 LTS \n \l
        
          root@1a139f4915df:/# 
        
    • 列出所有容器 : docker ps [OPTIONS]
      • OPTIONS可取以下值
        • -a : 列出当前所有正在运行的容器和历史运行过的
        • -l : 显示最近创建的容器
        • -n : 显示最近n个创建的容器
        • -q : 静默模式,只显示容器编号
        • –no-trunc : 表示不省略信息展示
      • 新开一个终端,执行命令。直接执行docker ps,只显示已启动的容器
      •   [root@localhost lingp]# docker ps -a
          CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
          1a139f4915df   ubuntu:latest   "/bin/bash"   6 minutes ago    Up 6 minutes                          myubuntu
          21c28993fefb   ubuntu:latest   "/bin/bash"   11 minutes ago   Exited (0) 7 minutes ago              infallible_dirac
          da45904d7f38   ubuntu          "/bin/bash"   24 minutes ago   Exited (0) 12 minutes ago             compassionate_thompson
          3e6cfc10ad0d   ubuntu          "/bin/bash"   29 minutes ago   Exited (0) 24 minutes ago             adoring_lalande
        
    • 退出容器
      • 先要进入容器
      • exit : 退出后,容器会停止
      • ctrl + p + q : 退出后,容器不会停止
    • 启动容器 : docker start 容器ID或容器名
      •   [root@localhost lingp]# docker ps -a
          CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                       PORTS     NAMES
          1a139f4915df   ubuntu:latest   "/bin/bash"   18 minutes ago   Exited (127) 5 seconds ago             myubuntu
          21c28993fefb   ubuntu:latest   "/bin/bash"   24 minutes ago   Exited (0) 19 minutes ago              infallible_dirac
          da45904d7f38   ubuntu          "/bin/bash"   36 minutes ago   Exited (0) 24 minutes ago              compassionate_thompson
          3e6cfc10ad0d   ubuntu          "/bin/bash"   42 minutes ago   Exited (0) 36 minutes ago              adoring_lalande
          [root@localhost lingp]# docker start 1a139f4915df
          1a139f4915df
          [root@localhost lingp]# docker ps -a
          CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
          1a139f4915df   ubuntu:latest   "/bin/bash"   19 minutes ago   Up 3 seconds                          myubuntu
          21c28993fefb   ubuntu:latest   "/bin/bash"   24 minutes ago   Exited (0) 20 minutes ago             infallible_dirac
          da45904d7f38   ubuntu          "/bin/bash"   36 minutes ago   Exited (0) 25 minutes ago             compassionate_thompson
          3e6cfc10ad0d   ubuntu          "/bin/bash"   42 minutes ago   Exited (0) 36 minutes ago             adoring_lalande
        
    • 重启容器 : docker restart 容器ID或容器名
    • 停止容器:docker stop 容器ID或容器名
    • 强制停止容器 : docker kill 容器ID或容器名
    • 删除已停止的容器 : docker rm 容器ID或容器名
      •   [root@localhost lingp]# docker ps -a
          CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
          1a139f4915df   ubuntu:latest   "/bin/bash"   21 minutes ago   Up 2 minutes                          myubuntu
          21c28993fefb   ubuntu:latest   "/bin/bash"   27 minutes ago   Exited (0) 22 minutes ago             infallible_dirac
          da45904d7f38   ubuntu          "/bin/bash"   39 minutes ago   Exited (0) 27 minutes ago             compassionate_thompson
          3e6cfc10ad0d   ubuntu          "/bin/bash"   45 minutes ago   Exited (0) 39 minutes ago             adoring_lalande
          [root@localhost lingp]# docker rm 3e6cfc10ad0d
          3e6cfc10ad0d
          [root@localhost lingp]# docker rm da45904d7f38
          da45904d7f38
          [root@localhost lingp]# docker ps -a
          CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
          1a139f4915df   ubuntu:latest   "/bin/bash"   22 minutes ago   Up 3 minutes                          myubuntu
          21c28993fefb   ubuntu:latest   "/bin/bash"   27 minutes ago   Exited (0) 23 minutes ago             infallible_dirac
        
    • 强制删除所有容器 : docker rm -f $(docker ps -a -q)
      • 谨慎使用
    • 查看容器日志 : docker logs 容器ID
    • 查看容器内运行的进程:docker top 容器ID
    • 查看容器内部细节 : docker insepct 容器ID
    • 进入已启动容器
      • docker exec -it 容器ID /bin/bash
        • 在容器中打开新的终端,并且可以启动新的进程。用exit退出,不会导致容器的停止。
      • docker attach 容器ID
        • 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。
      • 简单说就是exec进入容器后,执行exit退出,容器不会停止。attach进入容器,执行exit退出,容器会停止。推荐使用exec进入容器。
    • 容器和主机之间文件拷贝
      • 容器到主机 : docker cp 容器ID:容器中文件路径 主机路径
      • 主机到容器 : docker cp 主机文件路径 容器ID:容器中文件路径
    • 导入和导出容器
      • 导出容器 : docker export 容器ID > ./myubuntu.tar
      • 导入容器 : cat myubuntu.tar | docker import -镜像用户/镜像名:镜像版本号

提交带环境的镜像

  • 让我们回到文章开头那个场景,运维人员使用的环境要运行开发人员的程序,就要保证和开发人员的环境一致,比如开发人员是在ununtu上开发的,使用的环境有vim,gcc等工具。但运维人员的环境上是没有的,那么开发人员就可以将自己的整个开发环境打包提交
  • 在上面的介绍中,我们拉取了一个ubuntu镜像,并开启了一个容器。默认这个容器是没有vim,gcc等工具,我们在这个容器中安装vim,gcc后,打包成一个镜像并提交。
  • 提交命令
    • docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
    •   [root@localhost lingp]# docker images
        REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
        ubuntu                   latest    ba6acccedd29   21 months ago   72.8MB
        chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago     844kB
        [root@localhost lingp]# docker ps -a
        CONTAINER ID   IMAGE           COMMAND       CREATED       STATUS                     PORTS     NAMES
        8f9846cbdfb2   ubuntu:latest   "/bin/bash"   2 hours ago   Up 15 minutes                        myubuntud
        8a9c1c2704eb   ubuntu:latest   "/bin/bash"   2 hours ago   Exited (129) 2 hours ago             myubuntu
        [root@localhost lingp]# docker commit -m="add vim and gcc" -a="graywolf" 8f9846cbdfb2 grayubuntu:1.0.0
        sha256:56df3dc1d8b1f94583bc7ab59b4f0b2f402dbaa2869dd558b1630ce763eeb7a6
        [root@localhost lingp]# docker images
        REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
        grayubuntu               1.0.0     56df3dc1d8b1   8 seconds ago   342MB
        ubuntu                   latest    ba6acccedd29   21 months ago   72.8MB
        chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago     844kB
      
    • ubuntu是原始的镜像,grayubuntu是我们安装vim和gcc后的镜像。可以比对下,大小就发生变化了。运维拿到这个新镜像grayubuntu,启动容器后,就可以直接在容器中运行我们的程序了。

镜像发布到阿里云

  • 发布到阿里云
    • 进到阿里云官网容器镜像服务这块
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 首先创建一个命名空间
      在这里插入图片描述
      在这里插入图片描述
    • 在命名空间下创建镜像仓库
      在这里插入图片描述
      在这里插入图片描述
    • 选择本地仓库
      在这里插入图片描述
    • 创建镜像仓库成功后,阿里云会告诉我们如何拉取和推送镜像
      在这里插入图片描述
    • 我们在终端直接执行命令
    • 先进行登录
    •   [root@localhost lingp]# docker login --username=littleGrayWolf registry.cn-hangzhou.aliyuncs.com
        Password: 
        WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
        Configure a credential helper to remove this warning. See
        https://docs.docker.com/engine/reference/commandline/login/#credentials-store
        
        Login Succeeded
      
    • 推送到阿里云镜像仓库
    •   [root@localhost lingp]# docker images
        REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
        grayubuntu               1.0.0     56df3dc1d8b1   31 minutes ago   342MB
        ubuntu                   latest    ba6acccedd29   21 months ago    72.8MB
        chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago      844kB
        [root@localhost lingp]# docker tag 56df3dc1d8b1 registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0:1.0.0
        [root@localhost lingp]# docker push registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0:1.0.0
        The push refers to repository [registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0]
        2d9e91b2c941: Pushed 
        9f54eef41275: Pushed 
        1.0.0: digest: sha256:1dd42bfd2491b694c6d0fa5971c066d37192135d212b42faa6fb961e139e6849 size: 742
      
    • 这个时候阿里云上就有我们的镜像了
      在这里插入图片描述
    • 可以测试下,先删除本地镜像,然后从阿里云重新拉取
    •   [root@localhost lingp]# docker images
        REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
        ubuntu                   latest    ba6acccedd29   21 months ago   72.8MB
        chenlicn163/hello-word   latest    3ed90589c0b6   4 years ago     844kB
        [root@localhost lingp]# docker pull registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0:1.0.0
        1.0.0: Pulling from littlegraywolf/ubuntu1.0
        7b1a6ab2e44d: Already exists 
        d2cb84f992fd: Pull complete 
        Digest: sha256:1dd42bfd2491b694c6d0fa5971c066d37192135d212b42faa6fb961e139e6849
        Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0:1.0.0
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0:1.0.0
        [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED          SIZE
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   41 minutes ago   342MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago    72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago      844kB
      
    • 这里测试使用的是个人版服务,可以免费使用。如果是企业使用,可以付费购买企业版。

镜像发布到私有库

  • 阿里云毕竟是第三方公司,将自己公司的东西放到阿里云还是不够安全的。因此一般来说,公司都会在内部搭建私有镜像仓库,提供给公司内部人员使用。

  • 搭建私有镜像仓库

  • 下载镜像 Docker Registry : docker pull registry

    •   [root@localhost lingp]# docker pull registry
        Using default tag: latest
        latest: Pulling from library/registry
        79e9f2f55bf5: Pull complete 
        0d96da54f60b: Pull complete 
        5b27040df4a2: Pull complete 
        e2ead8259a04: Pull complete 
        3790aef225b9: Pull complete 
        Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
        Status: Downloaded newer image for registry:latest
        docker.io/library/registry:latest
        [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED          SIZE
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   56 minutes ago   342MB
        registry                                                     latest    b8604a3fe854   20 months ago    26.2MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago    72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago      844kB
      
  • 运行私有库镜像Registry

    •   [root@localhost lingp]# docker run -d -p 5000:5000 --privileged=true registry
        ccbe13e502cd4e9f85d08086aebbe0c5a4afff7eefc730209ac6f5004580fa60
        [root@localhost lingp]# docker ps
        CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
        ccbe13e502cd   registry   "/entrypoint.sh /etc…"   7 seconds ago   Up 6 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   condescending_sammet
      
  • 查看私有库中的镜像

    •   [root@localhost lingp]# curl -XGET http://192.168.206.136:5000/v2/_catalog
        {"repositories":[]}
      
  • 修改tag

    • 修改下tag,符合私有仓库规范
    • docker tag 镜像名:TAG ip:port/镜像名:TAG
    •   [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED          SIZE
        grayubuntu2                                                  2.0.0     bcc9dba161d0   52 minutes ago   185MB
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   2 hours ago      342MB
        registry                                                     latest    b8604a3fe854   20 months ago    26.2MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago    72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago      844kB
        [root@localhost lingp]# docker tag grayubuntu2:2.0.0 192.168.206.136:5000/grayubuntu2:2.0.0
        [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED          SIZE
        192.168.206.136:5000/grayubuntu2                             2.0.0     bcc9dba161d0   52 minutes ago   185MB
        grayubuntu2                                                  2.0.0     bcc9dba161d0   52 minutes ago   185MB
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   2 hours ago      342MB
        registry                                                     latest    b8604a3fe854   20 months ago    26.2MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago    72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago      844kB
      
      
  • 修改配置使之支持http

    • 默认不支持http推送,可以修改下配置让其支持
    • vim /etc/docker/daemon.json
    •   {
        	  "registry-mirrors": ["https://ssfzdz4k.mirror.aliyuncs.com"],
        	  "insecure-registries":["192.168.206.136:5000"]
        }
      
    • 修改完后重启docker
    •   systemctl restart docker
      
    • 启动下私服仓库
    •   docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry --privileged=true registry
      
  • 推送本地镜像到私有仓库

    • docker push 镜像名:TAG
    •   [root@localhost lingp]# docker push 192.168.206.136:5000/grayubuntu2:2.0.0
        The push refers to repository [192.168.206.136:5000/grayubuntu2]
        07c695add28a: Pushed 
        9f54eef41275: Pushed 
        2.0.0: digest: sha256:39ace23746821bff7798f32bbce0544789019485c231ea08aca15384cc0afe68 size: 741
        [root@localhost lingp]# curl -XGET http://192.168.206.136:5000/v2/_catalog
        {"repositories":["grayubuntu2"]}
      
  • 拉取私有仓库镜像到本地

    • docker pull 镜像名:TAG
    •   [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED         SIZE
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   2 hours ago     342MB
        registry                                                     latest    b8604a3fe854   20 months ago   26.2MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago   72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago     844kB
        [root@localhost lingp]# git pull 192.168.206.136:5000/grayubuntu2:2.0.0
        bash: git: command not found...
        [root@localhost lingp]# docker pull 192.168.206.136:5000/grayubuntu2:2.0.0
        2.0.0: Pulling from grayubuntu2
        7b1a6ab2e44d: Already exists 
        0cdd9d7ee9f3: Pull complete 
        Digest: sha256:39ace23746821bff7798f32bbce0544789019485c231ea08aca15384cc0afe68
        Status: Downloaded newer image for 192.168.206.136:5000/grayubuntu2:2.0.0
        192.168.206.136:5000/grayubuntu2:2.0.0
        [root@localhost lingp]# docker images
        REPOSITORY                                                   TAG       IMAGE ID       CREATED             SIZE
        192.168.206.136:5000/grayubuntu2                             2.0.0     bcc9dba161d0   About an hour ago   185MB
        registry.cn-hangzhou.aliyuncs.com/littlegraywolf/ubuntu1.0   1.0.0     56df3dc1d8b1   2 hours ago         342MB
        registry                                                     latest    b8604a3fe854   20 months ago       26.2MB
        ubuntu                                                       latest    ba6acccedd29   21 months ago       72.8MB
        chenlicn163/hello-word                                       latest    3ed90589c0b6   4 years ago         844kB
      
    • 至此,运维就可以拉取开发上传到私有库的镜像,去在其他机器上跑我们的程序了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于linux下的高并发服务器开发(第二章)- 2.18 内存映射(2)

1.如果对mmap的返回值(ptr)做操作(ptr), munmap是否能够成功? void * ptr mmap(...);ptr; 可以对其进行操作munmap(ptr, len); // 错误,要保存地址 2.如果open时O_RDONLY, mmap时prot参数指定PROT_READ | PROT_WRITE会怎样? 错误,返回MAP_FAILEDopen()函数中的…

cpolar+calibre搭建自己的kindle书库

cpolarcalibre搭建自己的kindle书库 在我们身边众多的便携电子设备中,Kindle无疑是最为矛盾的设备之一,很多人在买它时都想读书破万卷,可是到最后Kindle的归宿都是盖泡面。尽管如此,当亚马逊不讲武德,打算将Kindle真正…

FPGA中RAM的结构理解

FPGA中RAM的结构理解 看代码的过程中对RAM的结构不是很理解,搞脑子一片浆糊,反复推算,好不容易理清了思路,记录下来,防止忘记。开辟的RAM总容量为128bytes,数据的位宽为32位(即一个单元有32bit…

CodeForces:Madoka and Underground Competitions

经过观察&#xff0c;发现只要延小区域 右上-左下 的对角线填满X即可&#xff0c;那么就是可以总结为满足(i j) % k (r c) % k #include <bits/stdc.h> using namespace std; int t; void solve(){int n, k, r, c;cin >> n >> k >> r >> c…

团队如何选择合适的Git分支策略?

现代软件开发过程中要实现高效的团队协作&#xff0c;需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具&#xff0c;包括CVS&#xff0c;SVN&#xff0c;Git&#xff0c;Mercurial等。 相比CVS和SVN的集中管理&#xff0c;Git具有非常…

【stable diffusion】保姆级入门课程03-Stable diffusion(SD)图生图-涂鸦(绘图)的用法

目录 0.本章素材 1.涂鸦有什么用 2.涂鸦的使用场景是什么 3.操作面板 4.提示词与涂鸦 5.涂鸦与重绘幅度 6.涂鸦的其他用法(自由创作) 7.课后训练 0.本章素材 Realistic Vision V3.0模型(真实系模型)百度网盘链接&#xff1a;https://pan.baidu.com/s/1HkSKW2t4L6wMg…

openlayers系列:加载arcgis和geoserver在线离线切片

https://www.freesion.com/article/1751396517/ 1.背景 有个项目需要使用openlayer加载各种服务上发布的数据&#xff0c;坐标系也不同&#xff0c;我们都知道openalyer默认可以加载EPAG:3857,要加载4490的坐标系的数据需要重新定义一下&#xff0c;之后再加载。一想起要重新…

[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询

[SQL系列] 从头开始学PostgreSQL 索引 修改 视图_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131818865 事务 事务是一系列逻辑相关的数据库操作&#xff0c;可以作为一个整体进行操作或者回滚。事务通常会包含一个序列的读或者写操作&#xf…

No4: Python脚本的交互式运用

No4: Python脚本的交互式运用 1、 先安装了Python和环境变量设置 2、编写Pthon脚本 3、在脚本所在目录位置下&#xff0c;Python 脚本&#xff1b;

Nginx系列之 一 负载均衡

目录 一、Nginx概述 1.1 负载均衡概述 1.2 负载均衡的作用 1.3 四/七层负载均衡 1.3.1 网络模型简介 1.3.2 四层和七层负载均衡对比 1.3.3 Nginx七层负载均衡实现 1.4 Nginx负载均衡配置 1.5 Nginx负载均衡状态 1.6 Nginx负载均衡策略 二、负载均衡实战 2.1 测试服…

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises 1. 文章简介2. 文章概括3 文章重点技术3.1 大模型面对FPQs的表现3.2 False QAs数据集3.3 训练和评估 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Won’t Get Fooled Again: Answerin…

LLMs之LLaMA2:LLaMA2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略

LLMs之LLaMA2&#xff1a;LLaMA2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略 导读&#xff1a;2023年7月18日&#xff0c;Meta重磅发布Llama 2&#xff01;这是一组预训练和微调的大型语言模型&#xff08;LLM&#xff09;&#xff0c;规模从70亿…

(三)springboot实战——web新特性之函数式实现

前言 本节内容我们主要介绍一下web访问的另一种形式&#xff0c;通过函数式web实现一个restful风格的http请求案例。函数式web是spring5.2之后的一个新特性&#xff0c;可以通过函数去定义web请求的处理流程&#xff0c;使得代码更为简洁&#xff0c;耦合性也降低了。 正文 …

在vue3中配置ByteMD掘金同款markdown编辑器

最近因为想要一个富文本编辑器集合到项目中&#xff0c;在查找网上很多资料后&#xff0c;选择了ByteMD 编辑器&#xff0c;ByteMD 编辑器是字节跳动的掘金团队所开源的一个编辑器组件&#xff0c;还挺好用的&#xff0c;那如果要在vue3项目中配置ByteMD编辑器要如何配置呢&…

【YOLO】关闭控制台推理日志

问题 每次推理时&#xff0c;控制台都会打一条日志 消除方法 外部库里找到\site-packages\ultralytics\engine\predictor.py 将代码的282、283、292、293&#xff0c;这四行注释掉&#xff08;v5和v8一样&#xff09; 也可以搜关键词# Print time (inference-only)可以定位代…

基于PHP+ vue2 + element +mysql自主研发的医院不良事件上报系统

医院不良事件上报管理系统源码 不良事件上报是为了响应卫生部下发的等级医院评审细则中第三章第9条规定&#xff1a;医院要有主动报告医疗安全&#xff08;不良&#xff09;事件的制度与工作流程。由医疗机构医院或医疗机构报告医疗安全不良事件信息&#xff0c;利用报告进行研…

WEB安全测试通常要考虑的测试点

1、问题&#xff1a;没有被验证的输入 测试方法&#xff1a; 数据类型&#xff08;字符串&#xff0c;整型&#xff0c;实数&#xff0c;等&#xff09; 允许的字符集 最小和最大的长度 是否允许空输入 参数是否是必须的 重复是否允许 数值范围 特定的值&#xff08;枚举型&a…

基于UDP的可靠传输,文件+目录(C++,Qt)

一、基础知识 UDP&#xff08;UserDatagramProtocol&#xff09;是一个简单的面向消息的传输层协议&#xff0c;尽管UDP提供标头和有效负载的完整性验证&#xff08;通过校验和&#xff09;&#xff0c;但它不保证向上层协议提供消息传递&#xff0c;并且UDP层在发送后不会保留…

【Tomcat】无法将位于-的资源添加到Web应用程序-的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

1、问题 org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [xxx] to the cache for web application [/xxx] because there was insufficient free space available after evicting expired cache entries - consider increasing the maxim…

为Android构建现代应用——设计原则

为Android构建现代应用——设计原则 - 掘金 state”是声明性观点的核心 在通过Compose或SwiftUI等框架设计声明性视图时&#xff0c;我们必须明确的第一个范式是State(状态)。UI组件结合了它的图形表示(View)和它的State(状态)。UI组件中发生变化的任何属性或数据都可以…