镜像默认是通过 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 defaulttag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image forcentos: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 31hours 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 9seconds ago 445MB
centos latest 300e315adb2f 2days 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.6RUN make MALLOC=libc
WORKDIR src
RUN make install
CMD ["/bin/bash"]
指令说明
**FROM:**指明基础的镜像,可以用:指明tag
**RUN:**在镜像容器中执行命令
**WORKDIR:**跳转目录,为后续的RUN、CMD或者ENTRYPOINT指定工作目录
**CMD:**构建容器后调用,也就是在容器启动时才进行调用
Dockerfile文件创建完成后,打开 PowerShell 运行 build 命令等待创建完成即可.
PS D:\xwc\myDockerfile> 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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/xwc1996/p/14094399.html
内容来源于网络,如有侵权,请联系作者删除!