#查看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 镜像的 saveload 子命令。 用户可以使用 **

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 镜像的操作技巧。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐