#查看docker版本
docker version
#查看docker信息
docker info
#启动docker服务
systemctl start docker
#设置开机自启
systemctl enable docker
#关闭开机自启
systemctl disable docker
#列出本机的所有image文件
docker images
或者
docker image ls
#删除image文件
docker image rm [imageName]
或者
docker rmi [imageName]
-f, -force: 强制删除镜像, 即使有容器依赖它;
-no-prune: 不要清理未带标签的父镜像。
#抓取镜像(image)
docker image pull [imageName]
#例:
docker image pull hello-world
#抓取成功后,就可以在本机看到这个image文件了
docker image ls
#运行image文件
docker container run hello-world
#注意,docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
docker container run hello-world
等同于
docker image pull hell-world
docker container run hello-world
#hello-world运行后容器会自动终止,有些不会自动终止的容器,可以用下面的命令
docker container kill [containID]
#查看contain
docker ps #查看正在运行中的容器信息
docker ps -a #查看所有的容器信息
docker ps -q #只查看正在运行中的容器id
#image文件(镜像)生成的容器(container)实例,本身也是一个文件,成为容器文件,也就是说一旦容器生成就会同时存在两个文件:image文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已
#列出正在运行的容器
docker container ls
等同于
docker ps
#列出所有容器
docker container ls --all
等同于
docker ps -a
#终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。
docker container rm [containerID]
等同于
docker rm [containerID]
#启动一个nginx容器,检查能正确获取镜像并运行
docker run -d -p 80:80 --name webserver nginx
Nginx 容器已经在 0.0.0.0:80 启动,并映射到 80 端口 。 打开浏览器访问此地址
#搜索镜像 可以搜索Docker Hub官方仓库中的镜像,语法为
#docker serach [option] keyword
-f,-filter filter:过滤输出内容
--format string:格式化输出内容
--limit int:限制输出结果个数,默认为25个
--no-trunc:不截断输出结果
#例如,搜索官方的带 nginx关键字的镜像
docker search --filter=is-official=true nginx
#搜索所有收藏数超过 4 的关键词包括 tensorflow 的镜像:
docker search --filter=stars=4 tensorflow
#注意, 当有该镜像创建的容器存在时, 镜像文件默认是无法被删除的,
#先删除依赖该镜像的所有容器, 再来删除镜像
#绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
**使用tag命令添加镜像标签 **
**为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任 意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签: **
docker tag ubuntu:latest myubuntu:latest
再次使用docker images列出本地主机上镜像信息, 可以看到多了一个myubuntu: latest标签的镜像
**用户就可以直接使用myubuntu:latest来表示这个镜像了。 **
**细心的读者可能注意到, 这些myubuntu:latest镜像的ID跟ubuntu:latest是 完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添 加的标签实际上起到了类似链接的作用。 **
使用inspect命令查看详细信息
docker inspect 镜像名
搜索镜像
docker search 镜像名
删除和清理镜像
- 使用标签删除镜像(只删除一个)
- 使用镜像ID来删除镜像(全部删除包含标签)
- 加上参数-f 强制删除,不管是否有容器依赖
- docker image prune -f
-a :删除所有无用镜像 -filter filter:只清理符合给定过滤器的镜像 -f,-force:强制删除镜像,而不进行提示确认
创建镜像
**创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基于本地模板导入、 基于 Dockerfile创建。 **
本节主要介绍 Docker的 commit、 ******import**和 build 子命令。
1.基于已有容器创建(commit)
docker commit [options] container [repository[:tag]]
#主要选项包括
-a, --author="" :作者信息
-c, --change=[] :提交的时候执行Dockerfile指令,
包括CMD | ENTRYPOINT | ENV | EXPOSE| LABEL | ONBUILD | USER| VOLUME | WORKDIR等;
-m, --message= 11 11: 提交消息;
-p, --pause式rue: 提交时暂停容器运行。
**下面将演示如何使用该命令创建一个新镜像。 **
首先, 启动一个镜像, 并在其中进行修改操作。例如, 创建一个test文件, 之后退出,
$ docker run -it ubuntu:18.04 /bin/bash
#进入容器
root@a925cb40b3f0:/# touch test
root@a925cb40b3f0:/# exit
记住容器的 ID为a925cb40b3£0。 此时该容器与原 ubuntu:18.04 镜像相比, 已经发生了改变, 可以使用
**docker [container] commit****命令来提交为一个新的镜像。提交时可以使用 ID 或名称来指定容器: **
$ docker [container] commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test:0.1
**顺利的话, 会返回新创建镜像的 ID 信息, 例如9e9c814023bcffc3e67e892a235a fe6lb02f66a947d2747f724bd317dda02f27。 **
此时查看本地镜像列表, 会发现新创建的镜像已经存在了:
$ docker images
2.基于本地模板导入**(import)**
**用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 **
docker [image] import [options] file | url | -[repository[:tag]]
**要直接导人一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像 模板来创建。 **
**OPENVZ 模板的下载地址为 http://openvz.org/Download/templates/precreated。 **
例如,下载了 ubuntu-18.04 的模板压缩包,之后使用以下命令导人即可:
$cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:lB.04
然后查看新导人的镜像,已经在本地存在了 :
$ docker images
3.基于 Dockerfile创建**(build)**
基于 Dockerfile 创建是****最常见******的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。 **
下面给出 Dockerfile 的一个简单示例,基于 debian:stretch-slim镜像安装 Python 3 环境,构成一个新的 python:3 镜像:
FROM debian:stretch-slim
LABEL version;” 1 . 。 ” maintainer=” docker user <docker_user@github>”
RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
**创建镜像的过程可以使用 **
docker [image] build
编译成功后本地将多出一 个 python : 3 镜像:
$ docker [image] build -t python:3
Successful ly built 4b10f46eacc8
Successfully tagged python:3
$ docker imageslgrep python
python 3 4b10f46eacc8 About a minute ago 95.lMB
存入和载入镜像
**本节主要介绍 Docker 镜像的 save 和 load 子命令。 用户可以使用 **
docker [image] save
docker [image] load
命令来存出和载人镜像。
存出镜像:
**如果要导出镜像到本地文件,可以使用 **
docker [image] save
**该命令支持 -o、 -output string 参数, 导出镜像到指定的文件中。 **
例如,导出本地的 ubuntu:lS.04 镜像为文件 ubuntu 18.04.tar ,如下所示 :
$ docker images
$ docker save -o ubuntu 18 04 tar ubuntu:18 .04
之后,用户就可以通过复制 ubuntu 18.04.tar 文件将该镜像分享给他人。
载入镜像
**可以使用 **
docker [image] load
将导出的 tar 文件再导人到本地镜像库。支持****-i、-input、string****选项,从指定文件中读人镜像内容。
** 例如,从文件 ubuntu 18.04.tar 导人镜像到本地镜像列表,如下所示:**
$ docker load -i ubuntu_18 04 tar
或者:
$ docker load < ubuntu_18 04 tar
这将导人镜像及其相关的元数据信息(包括标签等)。 导人成功后,可以使用
docker images
** 命令进行查看, 与原镜像一致。**
上传镜像
**本节主要介绍 Docker 镜像的 push 子命令。 可以使用 **
docker [image] push
命令上 传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)。
命令格式为
docker [image] push NAME[:TAG] | [REGISTRY_PORT[:REGISTRY_PORT]/]NAME[:TAG]
**用户在 Docker Hub 网站注册后可以上传自制的镜像。 例如,用户 user 上传本地的 test :latest 镜像,可以先添加新的标签 **
**user/test:latest , 然后用 **
docker [image] push
命令上传镜像:
$ docker tag test:latest user/test :latest
$ docker push user/test:latest
The push refers to a repository [docker.io/user/test]
Sending image list
Please login prior to push:
Username :
Password:
Email :
第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地**~/ . docker****** 目录下。
小结:
本章具体介绍了围绕 Docker 镜像的一系列重要命令操作,包括获取、查看、 搜索、 删 除、创建、存出和载入、上传等。 读者可以使用 docker image help 命令查看 Docker 支 持的镜像操作子命令。 镜像是使用 Docker 的前提,也是最基本的资源。 所以,在平时的 Docker 使用中, 要注 意积累自己定制的镜像文件,并将自己创建的高质量镜像分享到社区中。 在后续章节,笔者将通过更多案例介绍 Docker 镜像的操作技巧。