Docker 镜像的使用

当我们运行容器(后面文章会讲)时,使用的镜像在本地不存在,docker会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载。

下面我们进行学习:

  1. 管理和使用本地Docker主机镜像
  2. 创建镜像

 列出镜像列表:

我们可以使用docker images来列出本机上的镜像。

[root@node6 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

 各选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像的ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

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

所以,我们要使用指定版本的镜像时,必须将镜像的TAG写对。

获取一个新的镜像:

当我们主机上使用一个不存在的镜像时docker就会自动下载这个镜像,如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

[root@node5 ~]# docker pull centos:7
Using default tag: 7
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

运行一个镜像:

[root@node5 ~]# docker run -t -i centos:7 /bin/bash
[root@3a843fba828c /]#

参数说明:

  • -t:交互式操作
  • -i:终端
  • centos:7:引用此centos:7为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式shell,因此用的是/bin/bash

 如果你不指定镜像的版本标签,例如你只用centos,docker将会默认使用centos:latest镜像。

镜像下载完成后,就可以使用镜像运行一个容器。

查找镜像:

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

我们也可以使用 docker search 命令来搜索镜像,比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索httpd来寻找适合我们的镜像。

[root@node6 ~]# docker search httpd
NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                   The Apache HTTP Server Project                  3589      [OK]       
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui…   40                   
centos/httpd                                                                            34                   [OK]
arm32v7/httpd                           The Apache HTTP Server Project                  9                    
solsson/httpd-openidc                   mod_auth_openidc on official httpd image, ve…   2                    [OK]
hypoport/httpd-cgi                      httpd-cgi                                       2                    [OK]
salim1983hoop/httpd24                   Dockerfile running apache config                2                    [OK]
dariko/httpd-rproxy-ldap                Apache httpd reverse proxy with LDAP authent…   1                    [OK]
manageiq/httpd                          Container with httpd, built on CentOS for Ma…   1                    [OK]
publici/httpd                           httpd:latest                                    1                    [OK]
lead4good/httpd-fpm                     httpd server which connects via fcgi proxy h…   1                    [OK]
dockerpinata/httpd                                                                      1                    
clearlinux/httpd                        httpd HyperText Transfer Protocol (HTTP) ser…   1                    
jonathanheilmann/httpd-alpine-rewrite   httpd:alpine with enabled mod_rewrite           1                    [OK]
inanimate/httpd-ssl                     A play container with httpd, ssl enabled, an…   1                    [OK]
centos/httpd-24-centos8                                                                 1                    
appertly/httpd                          Customized Apache HTTPD that uses a PHP-FPM …   0                    [OK]
amd64/httpd                             The Apache HTTP Server Project                  0                    
interlutions/httpd                      httpd docker image with debian-based config …   0                    [OK]
e2eteam/httpd                                                                           0                    
trollin/httpd                                                                           0                    
ysli/httpd                              Httpd for DeepWeb                               0                    [OK]
manasip/httpd                                                                           0                    
manageiq/httpd_configmap_generator      Httpd Configmap Generator                       0                    [OK]
itsziget/httpd24                        Extended HTTPD Docker image based on the off…   0                    [OK]

参数说明:

  • NAME:镜像仓库源的名称
  • DESCRIPTION:镜像的描述
  • STARS:类似Github里面的star,表示点赞、喜欢的意思。
  • OFFICIAL:是否是docker官方发布
  • AUTOMATED:自动构建

删除镜像:

镜像删除使用 docker rmi 命令,比如我们删除ubuntu镜像:

[root@node5 ~]# docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2
Deleted: sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff
Deleted: sha256:a70daca533d02f0886624703e70526b9ce8969b8cb87ff1eac163441fe071aa3

在删除镜像时注意,当你的镜像正在运行容器时,无法进行删除,会出现报错,只有在删除运行的容器之后,才可以删除镜像。

创建镜像:

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

  1. 从已经创建的容器中更新镜像,并且提交这个镜像。
  2. 使用Dockerfile指令来创建一个新的镜像。

更新镜像:

更新镜像之前,我们需要使用镜像创建一个容器。

docker run -t -i centos:latest /bin/bash

[root@3a843fba828c /]#

在运行的容器内使用 yum -y  update 命令进行更新。

在完成操作之后,输入exit命令来退出这个容器。

此时ID为  3a843fba828c 的容器,是按照我们的需求更改的容器,我们可以通过命令 docker commit来提交容器副本。

[root@node5 ~]# docker commit 3a843fba828c centos:v2
sha256:bdeaf28fc199013d8007938a8f4c9d02b5314a582e84b60b5e4b3e44a8145232

参数说明:

  • 3a843fba828c:容器ID
  • centos:v2:指定创建的镜像名称

使用docker images命令查看更新的新镜像centos:v2

[root@node5 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       v2        bdeaf28fc199   47 seconds ago   503MB
mysql        latest    5c62e459e087   3 weeks ago      556MB
centos       latest    300e315adb2f   7 months ago     209MB

这样就可以使用新镜像去启动容器了。

使用Dockerfile构建镜像:

  • 我们使用docker build,从零开始创建一个新的镜像,为此,我们需要创建一个Dockerfile文件,其中包含一组指令来告诉Docker如何构建我们需要的镜像。
  • 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  • 第一条FROM,指定使用哪个镜像源
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么。
  • 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

[root@node5 ~]# docker build -t centos:6.7 .
Sending build context to Docker daemon   2.21GB
Step 1/8 : FROM    centos:6.7
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a

参数说明:

  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

 我们可以使用新的镜像来创建容器。

设置镜像标签:

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

[root@node6 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       latest    c29284518f49   34 hours ago   72.8MB
ubuntu       14.04     13b66b487594   3 months ago   196MB
[root@node6 ~]# docker tag c29284518f49 ubuntu:v1
[root@node6 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       latest    c29284518f49   34 hours ago   72.8MB
ubuntu       v1        c29284518f49   34 hours ago   72.8MB
ubuntu       14.04     13b66b487594   3 months ago   196MB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值