Docker Image 镜像
镜像简介

  • 容器的基石
  • 层叠的制度文件系统
  • 联合加载(union mount)

Docker三大核心概念之一:镜像(更新ing)_ubuntu
查看docker信息

docker info

Docker三大核心概念之一:镜像(更新ing)_docker_02
Docker三大核心概念之一:镜像(更新ing)_nginx_03
查看镜像

docker images

Docker三大核心概念之一:镜像(更新ing)_docker_04

获取镜像

镜像是docker运行容器的前提,通过命令docker pull命令可以从网络上下载镜像。命令格式为

docker pull name[:TAG]

如下载一个最新的ubuntu操作系统的镜像:

sudo docker pull ubuntu

Docker三大核心概念之一:镜像(更新ing)_docker_05
也可以通过指定标签来下载特定版本的镜像

sudo docker pull ubuntu: 18.04

上面的两条命令实际都是相当于sudo docker pull registry.hub.docker.com/ubuntu:latest
也就是说,从docker的默认注册服务器registry.hub.docker.com中的ubuntu仓库中下载最新版本的镜像,
有默认的注册服务器,是不是就有其他更多的服务器啊?
对的,我们也可以指定从别的服务器下载,例如从DockerPool社区的镜像源dl.dockerpool.com下载最新的Ubuntu镜像。

sudo docker pull dl.dockrpool.com.com:5000/ubuntu

镜像下载后就可以使用了,例如,利用该镜像创建一个容器,在其中运行bash应用。

sudo docker run -t -i ubuntu /bin/bash

Docker三大核心概念之一:镜像(更新ing)_docker_06
使用 socker images命令可以列出本地主机已有的镜像

sudo docker images

Docker三大核心概念之一:镜像(更新ing)_Docker_07

搜寻镜像

使用docker search,默认搜索Docker Hub官方仓库中的镜像,用法:socker search TERM
参数支持:

仅显示自动创建的镜像。
--automated=false 
输出信息不截断
--no-trunc=false
制定仅显示评价为指定星级以上的镜像。
--s,--stars=0

例如,搜索mysql关键字镜像:

sudo docker search mysql

Docker三大核心概念之一:镜像(更新ing)_ubuntu_08

删除镜像

使用docker rmi 命令可以删除镜像,格式为 docker rmi IMAGE,(ps:IMAG可以为标签或者id)

  • 使用镜像的标签删除镜像

例如,删除dl.dockerpool.com:5000/ubuntu:latest镜像

sudo docker rmi dl.dockerpool.com:5000/ubuntu

此时,若是ubuntu:latest有多个标签,本地的镜像不会收到影响,只会删除镜像的标签,如果只有一个标签,本地镜像就会被删除。

  • 使用ID删除镜像
    当使用docker rmi 命令后边跟ID时,会尝试先删除镜像所有的标签,然后删除镜像本身。(ps:当镜像创建的容器存在时,默认是无法删除镜像文件的,强行删除可以用 -f参数)
    先利用ubuntu 镜像创建一个简单的容器,输出一句“hello!hiteamtech!”
# sudo docker run ubuntu echo "hello! hiteamtech!"
hello! hiteamtech!

删除所有的镜像

docker rmi $(docker images -q)

使用docker ps -a 可以看到本机存在的所有容器:
Docker三大核心概念之一:镜像(更新ing)_docker_09
试图删除ubuntu镜像时,会提示有容器正在云信,无法删除
Docker三大核心概念之一:镜像(更新ing)_docker_10
不建议使用-f强行删除镜像,会造成一下遗留问题。建议先删除依赖该镜像的所有容器,再删除镜像

创建镜像

创建镜像有三种方法:

  1. 基于已有镜像的容器创建
  2. 基于本地模块导入
  3. 基于Dockerfile创建
  • 基于已有镜像的容器创建

使用命令docker commit 命令,其命令格式为docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]],主要选项包括:

-a,--author=""作者
-m,--message=""信息
-p,--pause=true提交时暂停容器运行

sudo docker commit -m “new ubuntu” -a “hiteamtech” 2a84310dc660 tes
Docker三大核心概念之一:镜像(更新ing)_Docker_11
此时查看信息。可看到新创建的镜像:
Docker三大核心概念之一:镜像(更新ing)_docker_12

  • 存出和存入镜像

使用docker save和docker load命令

  • 上传镜像
    使用docker push,默认上传到官方仓库(需要登录)

构建镜像

构建镜像有两种方法:
1. docker commit 通过容器构建镜像
Docker三大核心概念之一:镜像(更新ing)_Docker_13
举例如下:

先运行一个ubuntu容器

docker run -it -p 80 --name commit_test ubuntu /bin/bash

在ubuntu中安装nginx

2fa65dc318fd:/# apt-get update
2fa65dc318fd:/# apt-get install -y nginx

然后输入exit退出容器
使用commit提交镜像

docker commit -a 'Sourctanghc' -m 'nginx' commit_test sourctanghc/commit_test

Docker三大核心概念之一:镜像(更新ing)_ubuntu_14
-a指定作者,-m描述docker镜像信息
2. docker build 通过Dockerfile文件构建

  1. 创建Dockerfile

新建Dockerfile

vim Dockerfile

编辑Dockerfile

#First Docker of tanghc
FROM ubuntu:18.04#指定基于ubuntu:18.04基础镜像
MAINTAINER sourctanghc "1967483667@qq.com"#维护人信息
#需要运行的命令
RUN apt-get update
RUN apt-get install -y nginx
#暴露的端口
EXPOSE 80
            

在Dockerfile所在目录运行docker build命令

docker build -t='sourctanghc/df_test1' .
  1. 使用sudo docker build 命令
    Docker三大核心概念之一:镜像(更新ing)_nginx_15

    docker build -t=‘sourctanghc/df_test1’

Docker三大核心概念之一:镜像(更新ing)_docker_16
通过docker images查看

Docker三大核心概念之一:镜像(更新ing)_ubuntu_17
第一个就是刚刚建立的镜像
运行此镜像:

 docker run -d --name nginx_web4 -p 80 sourctanghc/df_test1 nginx -g "daemon off;"

docker ps查看容器
通过curl访问
Docker三大核心概念之一:镜像(更新ing)_Docker_18

小结
本文包含了Docker镜像一系列重要操作,包括获取、查看、搜索、删除,创建等。
镜像是使用docker的前提,也是最重要的资源。平时多积累定制的镜像文件,并发扬开源精神,分享高质量的镜像