欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker 镜像的使用

程序员文章站 2024-03-12 19:48:56
...

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

下面我们进行学习:

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

 列出镜像列表:

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

[[email protected] ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

 各选项说明:

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

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

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

获取一个新的镜像:

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

[[email protected] ~]# 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

运行一个镜像:

[[email protected] ~]# docker run -t -i centos:7 /bin/bash
[[email protected] /]#

参数说明:

  • -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来寻找适合我们的镜像。

[[email protected] ~]# 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镜像:

[[email protected] ~]# docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: [email protected]:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2
Deleted: sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff
Deleted: sha256:a70daca533d02f0886624703e70526b9ce8969b8cb87ff1eac163441fe071aa3

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

创建镜像:

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

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

更新镜像:

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

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

[[email protected] /]#

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

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

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

[[email protected] ~]# docker commit 3a843fba828c centos:v2
sha256:bdeaf28fc199013d8007938a8f4c9d02b5314a582e84b60b5e4b3e44a8145232

参数说明:

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

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

[[email protected] ~]# 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 命令来构建一个镜像。

[[email protected] ~]# 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 "[email protected]"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a

参数说明:

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

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

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

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

设置镜像标签:

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

[[email protected] ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       latest    c29284518f49   34 hours ago   72.8MB
ubuntu       14.04     13b66b487594   3 months ago   196MB
[[email protected] ~]# docker tag c29284518f49 ubuntu:v1
[[email protected] ~]# 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