docker入门与应用系列镜像管理

Bigberg Bigberg     2022-10-17     630

关键词:

1.1 什么是镜像

  简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。

1.2 镜像从哪里来

  Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。

https://hub.docker.com/explore

  默认是国外的源,下载会慢,可以国内的源提供下载速度:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io

1.3 镜像工作的原理  

  当我们启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/容器ID为目录下,我们可以使用chroot进入此目录。如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。

1.4 镜像文件存储结构

docker相关文件存放在:/var/lib/docker目录下

/var/lib/docker/aufs/diff # 每层与其父层之间的文件差异

/var/lib/docker/aufs/layers/ # 每层一个文件,记录其父层一直到根层之间的ID

/var/lib/docker/aufs/mnt  # 联合挂载点,从只读层复制到最上层可读写层的文件系统数据

在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层;所以一个镜像会有若干个层组成。

每次commit提交就会对产生一个ID,就相当于在上一层有加了一层,可以通过这个ID对镜像回滚

1.5 查看镜像

  docker images

[[email protected] ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              f2a91732366c        3 months ago        1.85kB

选项说明:
REPOSTITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSTITORY:TAG 来定义不同的镜像。

1.6 搜索镜像

语法:

docker search [OPTIONS] TERM

选项说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。

[[email protected] ~]$ docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   4051                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              105                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_…   91                                      [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   45                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              38                                      [OK]
tutum/centos                       Simple CentOS docker image with SSH access      36                                      
gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glust…   22                                      [OK]
centos/python-35-centos7           Platform for building and running Python 3.5…   18                                      
openshift/base-centos7             A Centos7 derived base image for Source-To-I…   17                                      
kinogmt/centos-ssh                 CentOS with SSH                                 17                                      [OK]
openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use w…   10                                      
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   7                                       
openshift/mysql-55-centos7         DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   3                                       
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x ima…   3                                       
openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for use …   3                                       
pivotaldata/centos                 Base centos, freshened up a little with a Do…   1                                       
miko2u/centos6                     CentOS6 日本語環境                                   1                                       [OK]
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   1                                       
openshift/php-55-centos7           DEPRECATED: A Centos7 based PHP v5.5 image f…   1                                       
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                                       [OK]
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   0                                       
smartentry/centos                  centos with smartentry                          0                                       [OK]

1.7 下载镜像

1.7.1 解决镜像下载慢的问题

  我们可以使用 Docker 镜像加速器来解决这个问题,加速器就是镜像、代理的概念。国内有不少机构提供了免费的加速器以方便大家使用,这里列出一些常用的加速器服务:

  Ubuntu 16.04 和 CentOS 7 这类系统都已经开始使用 systemd 进行系统初始化管理了,对于使用 systemd 的系统,应该通过编辑服务配置文件 docker.service 来进行加速器的配置。 

sudo vim /etc/systemd/system/multi-user.target.wants/docker.service

#在文件中找到 ExecStart= 这一行,并且在其行尾添加上所需的配置。假设我们的加速器地址为 https://registry.docker-cn.com,那么可以这样配置

ExecStart=/usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com

sudo systemctl daemon-reload
sudo systemctl restart docker

# 确认配置
sudo ps -ef | grep dockerd
[[email protected] ~]$ ps -ef | grep docker
root       4273      1  1 10:04 ?        00:00:08 /usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com

1.7.2 获取镜像

[[email protected] ~]$ docker pull centos:7
7: Pulling from library/centos
af4b0a2388c6: Pull complete 
Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
Status: Downloaded newer image for centos:7

  

1.8 查看镜像

[[email protected] ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e548f1a579cf        3 days ago          109MB
centos              7                   ff426288ea90        6 weeks ago         207MB
hello-world         latest              f2a91732366c        3 months ago        1.85kB

1.9 导出镜像

[[email protected] ~]$ docker save -o centos.tar.gz centos

[[email protected] ~]$ docker save  nginx > nginx.tar.gz

[[email protected] ~]$ docker image save hello-world > hello.tar.gz



[[email protected] ~]$ ll
total 320480
-rw------- 1 bigberg bigberg 215760384 Feb 24 10:38 centos.tar.gz
-rw-rw-r-- 1 bigberg bigberg     12800 Feb 24 10:40 hello.tar.gz
-rw-rw-r-- 1 bigberg bigberg 112393728 Feb 24 10:39 nginx.tar.gz

 

1.10 导入镜像

[[email protected] ~]#docker load --input centos.tar.gz
#使用input导入
[[email protected] ~]# docker load < nginx.tar.gz #使用重定向导入
[[email protected] ~]# docker load < /opt/centos.tar.gz #导入本地镜像到docker镜像库

  

1.11 删除镜像

# docker rmi TMAGE ID

[[email protected] ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e548f1a579cf        3 days ago          109MB
centos              7                   ff426288ea90        6 weeks ago         207MB
hello-world         latest              f2a91732366c        3 months ago        1.85kB
[[email protected] ~]$ docker rmi f2a91732366c
Untagged: hello-world:latest
Untagged: [email protected]:66ef312bbac49c39a89aa9bcc3cb4f3c9e7de3788c944158df3ee0176d32b751
Deleted: sha256:f2a91732366c0332ccd7afd2a5c4ff2b9af81f549370f7a19acd460f87686bc7
Deleted: sha256:f999ae22f308fea973e5a25b57699b5daf6b0f1150ac2a5c2ea9d7fecee50fdf
[[email protected] ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e548f1a579cf        3 days ago          109MB
centos              7                   ff426288ea90        6 weeks ago         207MB

  

1.12 显示某个镜像的历史

可以看到镜像的每一次

-H :以可读的格式打印镜像大小和日期,默认为true;

--no-trunc :显示完整的提交记录;

-q :仅列出提交记录ID。

[[email protected]alhost ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e548f1a579cf        3 days ago          109MB
centos              7                   ff426288ea90        6 weeks ago         207MB
[[email protected] ~]$ docker -H nginx
^C
[[email protected] ~]$ docker history nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
e548f1a579cf        3 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  EXPOSE 80/tcp                0B                  
<missing>           3 days ago          /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B                 
<missing>           3 days ago          /bin/sh -c set -x  && apt-get update  && apt…   53.4MB              
<missing>           3 days ago          /bin/sh -c #(nop)  ENV NJS_VERSION=1.13.9.0.…   0B                  
<missing>           3 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.13.9-…   0B                  
<missing>           6 days ago          /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B                  
<missing>           9 days ago          /bin/sh -c #(nop)  CMD ["bash"]                 0B                  
<missing>           9 days ago          /bin/sh -c #(nop) ADD file:27ffb1ef53bfa3b9f…   55.3MB

  

docker入门与应用系列容器管理

...是将终止状态的容器重新启动。1.1新建并启动主要命令为dockerrun下面的命令输出一个”Hello,world!”,之后终止容器[[email protected]~]$dockerruncentos:7/bin/echo"hello,world"hello,world  启动一个ba 查看详情

docker入门与应用系列docker私有与公共镜像仓库

1.搭建私有镜像仓库DockerHub作为Docker默认官方公共镜像;如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单1.1.1下载registry镜像并启动dockerpullregistrydockerrun-d-v/opt/registry:/var/lib/registry-p5000:5000--restart=al... 查看详情

docker入门与应用系列docker图形界面管理之shipyard

Shipyard基于DockerAPI实现的容器图形管理系统,支持container、images、engine、cluster等功能,可满足我们基本的容器部署需求可堆栈的Docker管理基于DockerSwarm,Shipyard可让您管理Docker资源,包括容器,图像,私人注册表等等。Shipyard与其... 查看详情

docker入门与应用系列网络管理

一、Docker的五种网络模式  在使用dockerrun创建docker容器时,可以用--net选项指定容器的网络模式,Docker有以下5种网络模式:   1.bridge模式   使用dockerrun--net=bridge指定,bridge模式是Docker默认的网络设置,此模式会为... 查看详情

docker入门与应用系列dockerfile

Dockerfile是为快速构建dockerimage而设计的,当你使用dockerbuild命令的时候,docker会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行里面的指令构建出一个dockerimage。Dockerfile由一行行命令语句组成,并且支持以#开头... 查看详情

docker入门与应用系列网络管理

Docker支持五种网络模式 bridge默认网络,docker启动后创建一个dockr0网桥,默认创建的容器也是添加到这个网桥中;IP地址段是172.17.0.1/16 host容器不会获得一个独立的networknamespace,而是与宿主机共用一个 none获取独立的networknamespace... 查看详情

docker系列:入门篇-安装docker(代码片段)

Docker提供了两个版本:社区版(CE)和企业版(EE)。Docker社区版(CE)是开发人员和小型团队开始使用Docker并尝试使用基于容器的应用的理想之选,所以这里我们来说一下Docker社区版的安装操作系统要求64位CentOS这里只说明centos上的安装方... 查看详情

docker入门-对镜像的操作

Docker系列参考自书籍<Docker技术入门与实战>,本博客以笔记为主.如果转载请注明出处.-博客园:玲珑骰子安红豆 本章目录: 1.获取镜像 2.查看镜像信息 3.搜寻镜像 4.删除镜像 5.创建镜像 6.导出和载入镜像 ... 查看详情

docker入门-对镜像的操作

Docker系列参考自书籍<Docker技术入门与实战>,本博客以笔记为主.如果转载请注明出处,谢谢各位大哥了. 本章目录: 1.获取镜像 2.查看镜像信息 3.搜寻镜像 4.删除镜像 5.创建镜像 6.导出和载入镜像 7.上传镜... 查看详情

docker入门与应用系列介绍和部署

Docker介绍    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口... 查看详情

docker基础知识和命令使用入门(代码片段)

本文介绍了Docker相关的基础知识和命令的简单使用。基础知识部分包括Docker的用途和意义,Docker的镜像、容器、仓库、Dockerfile和DockerCompose的理解,以及Docker图形管理工具Portainer的基础功能。Docker命令的使用包括镜像使用、容器... 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker容器-入门级(代码片段)

1.1 容器简介1.1.1 什么是 Linux 容器Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再... 查看详情

docker系列镜像管理

2.1查看镜像[[email protected]~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEdocker.io/hello-worldlatest05a3bd381fc25weeksago1.84kB选项说明:REPOSTITORY:表示镜像的仓库源TAG:镜像的标签IMAGEID:镜像IDCREATED:镜像创建时间SIZE:镜像大小同 查看详情

docker快速入门-情况介绍和安装(代码片段)

很高兴您想学习Docker。这个页面包含了如何开始使用Docker的循序渐进的说明。Docker快速入门培训模块教你如何:设置Docker环境(在本页)构建并运行您的镜像在DockerHub上共享镜像Docker概念Docker是一个供开发人员和系统管理员构建... 查看详情

docker镜像与容器管理(代码片段)

title:Docker镜像与容器管理(2)date:2018-12-1417:04:05tags:Dockercategories:Dockercopyright:true---Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以... 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi... 查看详情