二、Docker镜像

本文介绍了Docker的基础使用,包括通过`dockerversion`和`dockerinfo`查看Docker信息,使用`dockerhelp`获取命令帮助,以及如何管理镜像,如`dockerpull`下载镜像,`dockerimages`列出镜像,`dockerrun`运行容器,`dockercommit`创建新镜像,还有镜像的删除和基于Dockerfile构建镜像等。
摘要由CSDN通过智能技术生成

关于docker的自身的一些信息
docker version/ docker info 两者都可以查看到一些信息,可以根据自身需要使用。

[root@k8s-m1 ~]# docker version 
Client: Docker Engine - Community
 Version:           20.10.15
 API version:       1.40
 Go version:        go1.17.9
 Git commit:        fd82621
 Built:             Thu May  5 13:16:58 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          19.03.15
.......
[root@k8s-m1 ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 31
......

docker命令帮助信息

在初学使用docker命令时,由于还不够熟练,可能对相关命令的使用还不够熟悉,因此,我们要多学会使用帮助信息。

[root@k8s-m1 ~]# docker --help

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit
  ......
  Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
 ......
  Run 'docker COMMAND --help' for more information on a command.

相关命令可以进一步使用帮助信息:

[root@k8s-m1 ~]# docker images -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

搜索镜像

docker search

[root@k8s-m1 ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        18515     [OK]       
linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   201                  
bitnami/nginx                                     Bitnami nginx Docker Image                      163                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   91                   
privatebin/nginx-fpm-alpine                       PrivateBin running on an Nginx, php-fpm & Al…   72                   [OK]
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   25                   [OK]
rapidfort/nginx                                   RapidFort optimized, hardened image for NGINX   14                   
rancher/nginx-ingress-controller            

解释:
name:代表该镜像的名称
description:关于该镜像的描述
stars:点赞、喜欢的意思
official:是否为官方提供

下载镜像

docker pull (默认是从docker hub上下载最新版本)

[root@k8s-m1 ~]# docker pull nginx 
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest

可以看到默认下载的镜像版本为latest最新版本,使用的镜像仓库为官方镜像仓库docker.io。

查看镜像

查看本地主机上的镜像
docker images /docker image ls

[root@k8s-m1 ~]# docker images
REPOSITORY                                                        TAG        IMAGE ID       CREATED         SIZE
nginx                                                             1.22.1     0f8498f13f3a   7 weeks ago     142MB
bitnami/sealed-secrets-controller                                 v0.18.0    eb1f20da92b7   11 months ago   48.8MB
busybox                                                           latest     beae173ccac6   16 months ago   1.24MB
nginx                                                             latest     605c77e624dd   16 months ago   141MB
nginx                                                             1.20.2     50fe74b50e0d   17 months ago   141MB

解释:
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小
同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 的镜像,如果你不定义镜像的标签版本,默认将使用标签为lastest的镜像。更多选项请用docker images -h
悬挂镜像请参考:https://blog.csdn.net/margu_168/article/details/130739590?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130739590%22%2C%22source%22%3A%22margu_168%22%7D

查看镜像的详细信息

[root@k8s-m1 ~]# docker image inspect centos:latest 

中间层镜像
为了加速镜像构建、重复利用资源,Docker会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。
docker image ls -a

以特定格式显示
默认情况下,docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls 把所有的虚悬镜像的 ID 列出来,然后才可以交给 docker image rm 命令作为参数来删除指定的这些镜像,这个时候就用到了 -q 参数。
docker image ls -q
更多命令参数请参靠docker image -h

运行镜像

[root@k8s-m1 ~]# docker run -i --rm -p 80:80 nginx 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
......

docker run 就是运行容器的命令,我们这里简单说明一下上面用到的参数,后续详细分享。
-i:交互式操作,可以看到nginx运行产生的一些日志。
–rm:这个参数是说容器退出后随之将其删除。默认情况下,不会添加此参数,因为启动的服务总是要一直使用的,退出的容器并不会立即删除,需要手动 docker rm。我们这里只是演示效果,使用后立即删除避免浪费空间。
-p:端口映射,前面是宿主机的端口,后面是容器内服务的端口。注意需要与"-P"区分。
nginx :这是指用运行nginx:latest 这个镜像来启动容器。
最后我们通过 exit 退出了这个容器。

删除镜像

docker rmi -f 镜像id # 通过id删除,多个的话直接把id加在最后面
docker rmi -f 镜像名:tag # 通过镜像名+标签删除,多个也是直接加在最后面
docker rmi -f $(docker images -qa) # 删除全部

制作镜像

创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile文件创建。
基于已有镜像的容器创建
docker commit 提交容器副本使之成为一个新的镜像
语法:
docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]
-p 提交时暂停运行容器
示例:

[root@k8s-m1 ~]# docker run -d -p 80:80 nginx   #根据官方提供的镜像运行一个nginx服务容器
4f8b29ea16941d57095c0328dd5cf53e4dbd1b5c21cb999064bb6e080b92f4b0
[root@k8s-m1 ~]# docker exec -it 4f /bin/bash
root@4f8b29ea1694:/# cd /etc/nginx/conf.d/ 
root@4f8b29ea1694:/etc/nginx/conf.d# ls
default.conf
root@4f8b29ea1694:/etc/nginx/conf.d# grep root /etc/nginx/conf.d/default.conf       #查看nginx存放文件的root目录
        root   /usr/share/nginx/html;
        root   /usr/share/nginx/html;
    #    root           html;
    # deny access to .htaccess files, if Apache's document root
root@4f8b29ea1694:/etc/nginx/conf.d# echo "hello nginx" > /usr/share/nginx/html/index.html  #修改默认网页内容

访问测试:
在这里插入图片描述
根据修改默认网页内容的容器创建镜像:

[root@k8s-m1 ~]# docker commit -m "first commit"  -a  "margu_168"  4f  nginx:test  #通过commit生产新的镜像
sha256:24726336ab6697b927c8d509131f27b28fa34409ae5c30b9c9a1eef8a09c32a0
[root@k8s-m1 ~]# docker rm -f 4f  #删除原来的nginx容器
4f
[root@k8s-m1 ~]# docker run -d -p 80:80 nginx:test   #根据新镜像生产容器
b7e2554996e35528f7ae93732c6c910fa9e563941d0a3ee61ab41ed3e9eda265

访问测试,效果如上图

基于本地模板导入

docker image save centos:latest > centos_test.tar.gz
docker import centos_test.tar.gz centos:latest
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交
Docker 镜像的导入和导出 docker save 和 docker load
用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
docker save和docker export的区别:
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

基于dockerfile文件创建(重点常用)

[root@k8s-m1 ~]# vim Dockerfile 
FROM    centos
MAINTAINER     "margu_168"
RUN     /bin/echo 'root:margu_168' |chpasswd
RUN     useradd test
RUN     /bin/echo 'test:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
[root@k8s-m1 ~]# docker build -t harbor.margu.com/centos:test .    #注意这个点号,代表Dockerfile文件位于当前目录下
Sending build context to Docker daemon  8.556GB
Step 1/9 : FROM    centos
latest: Pulling from library/centos
......

以上就是使用dockerfile文件创建镜像的过程,重点就是Dockerfile文件的编写,后续将详细讲解编写Dockerfile的语法。

设置镜像标签(可以理解为重命名)

docker tag ,设置新标签后本地会有两个id一样的镜像,只是名字不一样。系统中其实是只存在着一份镜像文件,底层镜像会重用。设置镜像标签常用在将公有云的镜像打标签后推到自己的私有镜像库。

[root@k8s-m1 ~]# docker tag centos:latest harbor.margu.com/centos:test

上传镜像
docker push

docker push harbor.margu.com/centos:test
#将镜像推至自己的私有仓,私有仓库的搭建后续分享

借用一张图片总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

margu_168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值