当运行容器时,使用的镜像若是在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。mysql
下面咱们来学习:web
- 一、管理和使用本地 Docker 主机镜像
- 二、建立镜像
列出镜像列表
咱们可使用 docker images
来列出存在于宿主机上的镜像。sql
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
各个选项说明:docker
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像建立时间
- SIZE:镜像大小
同一仓库源能够有多个 TAG,表明这个仓库源的不一样个版本,如ubuntu仓库源里,有16.0四、15.04等多个不一样的版本,咱们使用 REPOSITORY:TAG 来定义不一样的镜像。ubuntu
以相应的镜像启动容器
咱们若是要使用版本为16.04的ubuntu系统镜像来运行容器时,命令以下:数组
root@ubuntu:~# docker run -it ubuntu:16.04 sh
若是要使用版本为15.04的ubuntu系统镜像,则命令以下:bash
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
下载完成后,咱们能够直接使用这个镜像来运行容器。ui
查找镜像
咱们能够从 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镜像仓库中下载的镜像不能知足咱们的需求时,咱们能够经过如下两种方式对镜像进行更改。
更新镜像
更新镜像以前,咱们须要使用镜像来建立一个容器。
root@ubuntu:~# docker run -it ubuntu:16.04 sh
在运行的容器内使用 apt-get update 命令进行更新。
# apt-get update Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB] Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:9 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB] Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB] Get:11 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB] Get:12 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B] Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B] Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B] Fetched 15.8 MB in 8s (1933 kB/s) Reading package lists... Done
在完成操做以后,输入 exit命令来退出这个容器。
经过 docker ps -a
查看全部容器:
root@ubuntu:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12847d9f5071 ubuntu:16.04 "sh" 2 minutes ago Exited (0) 43 seconds ago peaceful_edison 3cec6f5e47c0 httpd "httpd-foreground" 5 minutes ago Exited (0) 5 minutes ago vigilant_heisenberg
此时ID为12847d9f5071的容器,是按咱们的需求更改的容器。咱们能够经过命令docker commit
来提交容器副本。
root@ubuntu:~# docker commit -m="has update" -a="yeqing112" 12847d9f5071 yeqing112/ubuntu:v2 sha256:5cce1167ee4c083ff9b87e61a58081805e76d015a12a4811bd152263aa013860
各个参数说明:
- -m: 提交的描述信息。
- -a: 指定镜像做者。
- 12847d9f5071: 容器ID。
- yeqing112/ubuntu:v2: 指定要建立的目标镜像名。
咱们可使用 docker images
命令来查看咱们的新镜像 yeqing112/ubuntu:v2:
root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yeqing112/ubuntu v2 5cce1167ee4c 2 minutes ago 144MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB
从上面的信息中能够看到咱们更新过的镜像,文件体积明显比以前大了一些。
构建镜像
除了上面更新镜像的方法,咱们还可使用命令 docker build
, 从零开始来构建一个新的镜像。为此,咱们须要建立一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建咱们的镜像。
root@ubuntu:~# cat Dockerfile FROM ubuntu:16.04 MAINTAINER Fisher "service@urlos.com" RUN apt-get update EXPOSE 22 EXPOSE 80 CMD /bin/bash
每个指令都会在镜像上建立一个新的层,每个指令的前缀都必须是大写的。
第一条FROM,指定使用哪一个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么
这里咱们仍是同样,执行一个 apt-get update
更新命令
而后,咱们使用 Dockerfile 文件,经过 docker build -t yeqing112/ubuntu:v3 .
命令来构建一个新镜像。
root@ubuntu:~# root@ubuntu:/home# docker build -t yeqing112/ubuntu:v3 . Sending build context to Docker daemon 422.4kB Step 1/6 : FROM ubuntu:16.04 ---> 2a697363a870 Step 2/6 : MAINTAINER Fisher "service@urlos.com" ---> Running in 92229e7a091a Removing intermediate container 92229e7a091a ---> 9a89f4debc7d Step 3/6 : RUN apt-get update ---> Running in d709ef335784 Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB] Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB] Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:9 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB] Get:10 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB] Get:11 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB] Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B] Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B] Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B] Fetched 15.8 MB in 5s (3051 kB/s) Reading package lists... Removing intermediate container d709ef335784 ---> 540751496556 Step 4/6 : EXPOSE 22 ---> Running in 9ae528bc083f Removing intermediate container 9ae528bc083f ---> cfccc621a52d Step 5/6 : EXPOSE 80 ---> Running in efd88e9349c1 Removing intermediate container efd88e9349c1 ---> 428cb5221a06 Step 6/6 : CMD /bin/bash ---> Running in 2bc08b664f97 Removing intermediate container 2bc08b664f97 ---> 9c55ea9b9ee8 Successfully built 9c55ea9b9ee8 Successfully tagged yeqing112/ubuntu:v3
参数说明:
- -t:指定要建立的目标镜像名
- .:Dockerfile 文件所在目录,能够指定Dockerfile 的绝对路径
构建成功后,使用
docker images
查看镜像:
root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yeqing112/ubuntu v3 9c55ea9b9ee8 9 seconds ago 144MB yeqing112/ubuntu v2 5cce1167ee4c 16 minutes ago 144MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB
由上面的信息看出,新的镜像v3与v2文件体积是同样的,两个镜像都只是执行了apt-get update
设置镜像标签
咱们可使用 docker tag
命令,为镜像添加一个新的标签。
root@ubuntu:/home# docker tag 9c55ea9b9ee8 yeqing112/ubuntu:v3-1
docker tag 镜像ID,这里是 9c55ea9b9ee8,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 docker images 命令能够看到,ID为9c55ea9b9ee8的镜像多了一个v3-1的标签。
root@ubuntu:/home# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yeqing112/ubuntu v3 9c55ea9b9ee8 21 minutes ago 144MB yeqing112/ubuntu v3-1 9c55ea9b9ee8 21 minutes ago 144MB yeqing112/ubuntu v2 5cce1167ee4c 38 minutes ago 144MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB