当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
学习目标:
1、管理和使用本地 Docker 主机镜像
2、创建镜像
一、列出镜像列表
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerfile latest ea0ac9dccdb8 16 hours ago 65.8MB
redis <none> caaeda72bf8f 5 days ago 27.8MB
postgres 9.4 ccd088148f5d 13 days ago 233MB
ubuntu latest 113a43faa138 2 weeks ago 81.2MB
nginx latest cd5239a0906a 2 weeks ago 109MB
r-base latest 3cb19d246267
各项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一个仓库中可以有多个TAG,代表这个仓库源的不同版本,用TAG来定义不同的镜像
如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i ubuntu:15.10 /bin/bash
root@d482d4e4d741:/#
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
获取一个新的镜像:
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
a3ed95caeb02: Pull complete
0d8710fc57fd: Pull complete
5037c5cd623d: Pull complete
83b53423b49f: Pull complete
e9e8bd3b94ab: Pull complete
7db00e6b6e5e: Pull complete
Digest: sha256:403105e61e2d540187da20d837b6a6e92efc3eb4337da9c04c191fb5e28c44dc
Status: Downloaded newer image for ubuntu:13.10
查看镜像:
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 1777 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 41
centos/httpd 18 [OK]
NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布
拖取镜像
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
3d77ce4481b1: Pull complete
73674f4d9403: Pull complete
d266646f40bd: Pull complete
ce7b0dda0c9f: Pull complete
01729050d692: Pull complete
014246127c67: Pull complete
7cd2e04cf570: Pull complete
Digest: sha256:d36c131842eca97725c73146009ad0e29e99a9069eec742f079b6f0298950dcf
Status: Downloaded newer image for httpd:latest
下载完成后,使用这个镜像:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run httpd
创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
root@fc95226b1483:/#apt-get update
此时ID为fc95226b1483的容器,是按我们需求更改的容器。我们可以通过命令docker commit来提交容器副本
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker commit -m "has update" -a="leiyuxing" fc95226b1483 leiyuxing/ubuntu:v2
sha256:b1375bd9d36449320dba9912127a4c6040b2be81354e6d7c6bb895d79af51097
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名
我们可以使用 docker images 命令来查看我们的新镜像 leiyuxing/ubuntu:v2:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/ubuntu v2 b1375bd9d364
使用我们的新镜像leiyuxing/ubuntu来启动一个容器
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i leiyuxing/ubuntu:v2 /bin/bash
root@3e077615e849:/#
构建镜像
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ vim Dockerfile
# our base image
FROM alpine:3.5
# Install python and pip
RUN apk add --update py2-pip
# upgrade pip
RUN pip install --upgrade pip
# install Python modules needed by the Python app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt
# copy files required for the app to run
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/
# tell the port number the container should expose
EXPOSE 5000
CMD ["python", "/usr/src/app/app.py"]
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker build -t leiyuxing/alpine:3.5 .
Sending build context to Docker daemon 15.36kB
Step 1/9 : FROM alpine:3.5
---> 6c6084ed97e5
Step 2/9 : RUN apk add --update py2-pip
---> Using cache
---> bbc79f3d4f60
Step 3/9 : RUN pip install --upgrade pip
---> Using cache
---> 82a3c366b985
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为ea0ac9dccdb8
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/alpine 3.5 ea0ac9dccdb8 17 hours ago 65.8MB
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker run -p 8888:5000 --name alpine leiyuxing/alpine:3.5
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [22/Jun/2018 03:33:55] "GET / HTTP/1.1" 200 -
前往http://localhost:8888,你的应用程序应该是活的。
设置镜像标签
我们可以使用 docker tag 命令,为镜像添加一个新的标签。
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker tag ea0ac9dccdb8 leiyuxing/alpine:picture
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/alpine 3.5 ea0ac9dccdb8 18 hours ago 65.8MB
leiyuxing/alpine picture ea0ac9dccdb8 18 hours ago