当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
下面我们来学习:
1.管理和使用本地 Docker 主机镜像
2.创建镜像
列出镜像列表我们可以使用 docker images 来列出存在于宿主机上的镜像。
root@Ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest 055936d39205 3 weeks ago 5.53MB MySQL 5.7 7faa3c53e6d6 3 weeks ago 373MB ubuntu 15.04 d1b55fd07600 3 years ago 131MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有16.04、15.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
以相应的镜像启动容器我们如果要使用版本为16.04的ubuntu系统镜像来运行容器时,命令如下:
root@ubuntu:~# docker run -it ubuntu:16.04 sh如果要使用版本为15.04的ubuntu系统镜像,则命令如下:
root@ubuntu:~# docker run -it ubuntu:15.04 sh各个参数解析:
docker: Docker 的二进制执行文件。
run: 与前面的 docker 组合来运行一个容器。
-it: 其实是两个参数组成, -i 和 -t,-i:允许你对容器内的标准输入 (STDIN) 进行交互。-t:在新容器内指定一个伪终端或终端。
ubuntu:15.04指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
sh: 执行命令。
获取一个新镜像当我们在宿主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
root@ubuntu:~# docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu 6abc03819f3e: Pull complete 05731e63f211: Pull complete 0bd67c50d6be: Pull complete Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5 Status: Downloaded newer image for ubuntu:18.04下载完成后,我们可以直接使用这个镜像来运行容器。
查找镜像我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否docker官方发布
拉取httpd镜像我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
root@ubuntu:~# docker pull httpd Using default tag: latest latest: Pulling from library/httpd 743f2d6c1f65: Already exists c92eb69846a6: Pull complete 2211b052800a: Pull complete aed180197314: Pull complete 7c472a4980a7: Pull complete Digest: sha256:a35ad614c1ffc6fe931f12dc42b682edbdcc62cf78d8edc41499dd90ef0f8003 Status: Downloaded newer image for httpd:latest下载完成后,我们就可以使用这个镜像了。
创建镜像当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
更新镜像更新镜像之前,我们需要使用镜像来创建一个容器。
root@ubuntu:~# docker run -it ubuntu:16.04 sh在运行的容器内使用 apt-get update 命令进行更新。
# apt-get update Get:1 xenial InRelease [247 kB] Get:2 xenial-security InRelease [109 kB] Get:3 xenial-updates InRelease [109 kB] Get:4 xenial-backports InRelease [107 kB] Get:5 xenial/main amd64 Packages [1558 kB] Get:6 xenial-security/main amd64 Packages [844 kB] Get:7 xenial/restricted amd64 Packages [14.1 kB] Get:8 xenial/universe amd64 Packages [9827 kB] Get:9 xenial/multiverse amd64 Packages [176 kB] Get:10 xenial-updates/main amd64 Packages [1237 kB] Get:11 xenial-security/restricted amd64 Packages [12.7 kB] Get:12 xenial-security/universe amd64 Packages [556 kB] Get:13 xenial-updates/restricted amd64 Packages [13.1 kB] Get:14 xenial-updates/universe amd64 Packages [967 kB] Get:15 xenial-updates/multiverse amd64 Packages [19.1 kB] Get:16 xenial-backports/main amd64 Packages [7942 B] Get:17 xenial-backports/universe amd64 Packages [8532 B] Get:18 xenial-security/multiverse amd64 Packages [6113 B] Fetched 15.8 MB in 8s (1933 kB/s) Reading package lists... Done在完成操作之后,输入 exit命令来退出这个容器。