zoukankan      html  css  js  c++  java
  • Docker的镜像使用-Window

    镜像加速

    镜像默认是通过 DockerHub 拉取的,国内可能有些困难,会报以下错误:

    net/http: TLS handshake timeout

    所以,需要配置国内的加速服务地址(不能用的多加两个):

    官方地址:https://registry.docker-cn.com

    网易:https://hub-mirror.c.163.com/

    阿里云:https://<你的ID>.mirror.aliyuncs.com

    七牛云加速器:https://reg-mirror.qiniu.com

    中科大:https://docker.mirrors.ustc.edu.cn

    window通过docker desktop的设置可以添加保存(保存后会自动重启docker服务),如下:

     查找镜像

    我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

    我们也可以使用 docker search 命令来搜索镜像,比如我们一个centos的镜像,那我们可以在 powershell (后文也统一使用powershell)用以下命令:

    PS C:> docker search centos
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    centos                             The official build of CentOS.                   6318                [OK]
    ansible/centos7-ansible            Ansible on Centos7                              132                                     [OK]
    consol/centos-xfce-vnc             Centos container with "headless" VNC session…   123                                     [OK]
    jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   116                                     [OK]
    .......

    NAME: 镜像仓库源的名称

    DESCRIPTION: 镜像的描述

    OFFICIAL: 是否 docker 官方发布

    STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。

    OFFICIAL:是否为官方镜像。

    AUTOMATED: 自动构建。

    通过上面例子看到 docker search 命令查询有一个小缺点,没有 tag 这样不好获取指定 tag 的镜像,通过 Docker Hub 网站查找信息很全面,没有这些问题。

    获取镜像

    当我们的本地主机使用一个不存在的镜像时,会自动下载后使用。如果我们要先获取镜像,可以使用 docker pull 命令,如下:

    PS C:> docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    7a0437f04f83: Pull complete    
    Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image
    for centos:latest docker.io/library/centos:latest

    可以看到如果不指定镜像的 Tag ,那么默认 Tag 为 latest。可以通过在镜像名后增加:Tag 来指定(也可以通过 Digest 摘要)

    PS C:> docker pull centos:centos8.3.2011

    如果需要获取镜像的全部标签

    PS C:> docker pull --all-tags centos

    同一个标签的镜像反复获取,只会存在一个。

    查询本地镜像

    通过 docker images 命令来列出本地主机上的镜像。

    PS C:> docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              300e315adb2f        31 hours ago        209MB
    hello-world         latest              bf756fb1ae65        11 months ago       13.3kB

    各列说明:

    REPOSITORY:表示镜像的仓库源

    TAG:镜像的标签

    IMAGE ID:镜像ID

    CREATED:镜像创建时间

    SIZE:镜像大小

    同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 centos 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

    删除镜像

    镜像删除通过 docker rmi 命令执行,可以同时删除多个镜像,如下删除了镜像 hello-world 和 centos

    PS C:> docker rmi hello-world centos

    镜像名称也可增加 Tag 标签来删除指定镜像的指定标签。

    创建镜像

    当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

    1、从已经创建的容器中修改镜像,并且提交这个镜像

    2、使用 Dockerfile 指令来创建一个新的镜像

    编辑镜像

     先通过镜像 centos 来创建一个容器

    PS D:> docker run -t -i centos /bin/bash

    运行后会构建一个 centos 的容器,并进入到容器中的 cnetos 操作系统中,我们这里进行一个安装 redis 的操作,让我们新的 centos 镜像有 redis (官方的原始 centos 镜像是纯净的)。依次执行下面的语句:

    [root@fda2c65d7e02 /]# yum -y install wget                                          //注释:安装wget,用来执行wget命令                                
    [root@fda2c65d7e02 /]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz    //注释:下载redis压缩包
    [root@fda2c65d7e02]# tar -zxvf redis-4.0.6.tar.gz                      //注释:解压redis压缩包
    [root@fda2c65d7e02 /]# yum install gcc                            //注释:yunm安装gcc依赖
    [root@fda2c65d7e02 /]# cd redis-4.0.6                             //注释:跳转到redis解压目录下
    [root@fda2c65d7e02 redis-4.0.6]# yum -y install gcc automake autoconf libtool make  //注释:安装make,用来执行make命令
    [root@fda2c65d7e02 redis-4.0.6]# make MALLOC=libc                      //注释:编译安装redis
    [root@fda2c65d7e02 redis-4.0.6]# cd src && make install                             //注释:切换到redis src目录下,将/usr/local/redis-4.0.6/src目录下的文件加到/usr/local/bin目
    [root@fda2c65d7e02 src]# ./redis-server                           //注释:运行redis,可以看到成功运行了

    之后我们输入 exit 命令退出容器,使用 commit 命令提交容器副本,在本机创建新镜像(可以通过 push 命令推送到 docker hub 上)

    PS D:> docker commit -m="add redis" -a="xu" fda2c65d7e02  xu/centos:v1.0.1

    各个参数说明:

    -m: 提交的描述信息

    -a: 指定镜像作者

    fda2c65d7e02:容器 ID,可以通过 docker ps -a 命令查看

    xu/cnetos:v1.0.1: 指定要创建的目标镜像名和标签 tag

    查询镜像

    PS D:> docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xu/centos           v1.0.1              0827da229df3        9 seconds ago       445MB
    centos              latest              300e315adb2f        2 days ago          209MB

    可以试下,通过我们自己修改后的镜像来创建的容器自带 redis

    创建镜像

    我们使用 build 命令, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。我们创建一个txt文件,重命名为Dockerfile(删除后缀),内容如下:

    FROM centos
    RUN yum -y install wget
    RUN yum -y install gcc automake autoconf libtool make
    RUN wget http://download.redis.io/releases/redis-4.0.6.tar.gz
    RUN tar -zxvf redis-4.0.6.tar.gz
    WORKDIR /redis-4.0.6
    RUN make MALLOC=libc
    WORKDIR src
    RUN make install
    CMD ["/bin/bash"]

    指令说明

    FROM:指明基础的镜像,可以用:指明tag

    RUN:在镜像容器中执行命令

    WORKDIR:跳转目录,为后续的RUN、CMD或者ENTRYPOINT指定工作目录

    CMD:构建容器后调用,也就是在容器启动时才进行调用

    Dockerfile文件创建完成后,打开 PowerShell 运行 build 命令等待创建完成即可.

    PS D:xwcmyDockerfile> docker build -t xu/centos:1.0.2 .

    参数说明:

    -t :指定要创建的目标镜像名,可以添加 :tag 指定标签,否则默认 latest

    . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径(我这里直接在文件所在路径打开 powershell 所以不指定,默认改文件夹下)

    镜像标签

    可以通过 tag 命令修改镜像的名称和标签

    PS D:> docker tag bf756fb1ae65 xu/hello-world:666

    上面的命令是将镜像 id 为 bf756fb1ae65 的镜像复制一份用户/镜像名为 xu/hello-world 标签为 666,查看镜像可以看到它们的镜像 id 都是相同的

    PS D:> docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        11 months ago       13.3kB
    xu/hello-world      666                 bf756fb1ae65        11 months ago       13.3kB
  • 相关阅读:
    Linux下hook指定库
    一行一行往上爬
    高可用数据同步方案-SqlServer迁移Mysql实战
    Hystrix核心基础
    Fastjson解析多级泛型的几种方式—使用class文件来解析多级泛型
    面试大全之JVM篇
    云原生下的CICD
    学习Raft算法的笔记
    Go语言下的线程模型
    分布式事务解决方案以及 .Net Core 下的实现(上)
  • 原文地址:https://www.cnblogs.com/xwc1996/p/14094399.html
Copyright © 2011-2022 走看看