docker中基础命令和基本操作以及基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chushoutaizhong/article/details/82992418

运行镜像


docker run -it --rm  ubuntu:16.04 bash
-it  :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm。我们这里只是随便执行个命令,看看结果,
不需要排障和保留结果,因此使用--rm可以避免浪费空间。
ubuntu:16.04 :这是指用ubuntu:16.04镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是bash 。


要想列出已经下载下来的镜像,可以使用docker image ls 命令

列表包含了仓库名 、标签 、镜像ID 、创建时间以及所占用的空间 。
查看镜像、容器、数据卷所占用的空间。
docker system df

虚悬镜像


上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均
为         <none>     。:
<none>     <none>     00285df0df87 5    days ago 342    MB
这个镜像原本是有镜像名和标签的,原来为mongo:3.2,随着官方镜像维护,发布了新版本后,重新docker pull mongo:3.2 时, mongo:3.2 这个镜像名被转移到了新下载的镜像身
上,而旧的镜像上的这个名称则被取消,从而成为了 <none>  。除了 docker pull 可能导致这种情况, docker build 也同样可以导致这种现象。由于新旧镜像同名,旧镜像名称被取
消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也被称为    虚悬镜像(dangling image),可以用下面的命令专门显示这类镜像:

$docker image ls -f dangling=true

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
 docker image prune亦或docker rmi $(docker images -q -f dangling=true)

中间镜像

docker images -a 显示包括中间层镜像和顶级镜像

这样会看到很多无标签的镜像,与虚悬镜像不同,这些镜像都是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。实际上,这些镜像也没必要删除,因为相同的层只会存一遍,而这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份。只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。

根据仓库名列出镜像


docker image ls ubuntu   列出了Ubuntu仓库下的所有镜像
列出特定的某个镜像,也就是说指定仓库名和标签
docker image ls ubuntu:16.04
docker image ls 还支持强大的过滤器参数 --filter  ,或者简写 -f 。
docker image ls --format "{{.ID}}:{{.Repository}}"


删除镜像


我们需要删除所有仓库名为redis的镜像:
docker image rm $(docker image ls -q redis)
或者删除所有在 mongo:3.2 之前的镜像:
docker image rm $(docker image ls -q -f before=mongo:3.2)

Dockerfile定制镜像


Dockerfile是一个文本文件  其中包含了一条条指令  每一个指令构建一层  因此每一个指令就是描述该层应当如何
构建  比如   构建nginx  Dockerfile内容如下


FROM nginx


RUN echo '<h1>Hello,Docker!</h1>' > /usr/share/nginx/html/index.html


FROM指定基础镜像


定制镜像一定是以一个镜像为基础 在基础镜像上定制   FROM就是指定基础镜像 因此一个Dockerfile中FROM时必备
指令 并且必须时第一条指令   (可以在https://hub.docker.com或者https://store.docker.com/images/centos
上查找相关镜像和版本)

RUN执行名称


1格式 shell格式 RUN <命令> 就像直接在命令行中输入命令一样 
2格式 exec格式 RUN ["可执行文件","参数1","参数2"] 就好像函数调用 

注意  如果使用RUN 每一个命令执行完都会创建一层镜像  RUN也不列外 


开始构建


docker build [选项] <上下文路径/url/>     上下文就是Dockerfile文件和所有准备的文件所在的目录
docker build -t asd .    其中-t为当前构建个的镜像起名称  .表示当前目录为上下文

Dockerfile中的相关指令详解

COPY 赋值命令


和RUN一样存在两种格式  一种类似命令行一种类似函数调用  COPY 指令将从构建上下文目录中 <源路径>的文件/
目录复制到新的一层的镜像内的 <目标路径>位置
 <源路径> 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则,如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
 <目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用WORKDIR指令来指定)。
目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
此外,还需要注意一点,使用COPY指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。
这个特性对于镜像定制很有用。特别是构建相关文件都在使用Git进行管理的时候。


显示镜像或者容器的详细信息


docker inspect -f='{{.Id}}' myTomcat
其中-f --format 显示数据 {{.Id}}其中.表示上下文(整个元数据)
docker inspect -f='{{.}}' myTomcat 显示整个元数据信息  还可以使用该命令过滤一些容器或者镜像  可以百度一下
 

显示容器的资源使用情况


docker stats 显示所有运行的容器对于宿主机器资源的使用情况

保存镜像和导入镜像


导出镜像

docker save alpine | gzip > alpine-latest.tar.gz
docker save 镜像名 | gzip > 打包后的文件名

导入镜像

docker load -i alpine-latest.tar.gz
docker load -i 打包后文件名  
参数说明如下
-i, –input string Read from tar archive file, instead of STDIN 
从tar归档文件读取镜像,而不是标准输入流
-q, –quiet Suppress the load output 
禁止读入输出


我们结合这两个命令以及ssh甚至pv的话,利用Linux强大的管道,我们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'


容器导入导出

导出

docker export 7691a814370e > ubuntu.tar
docker export containerId > 导出后文件名

导入快照

cat ubuntu.tar | docker import - test/ubuntu:v1.0
cat 要导入的文件 | docker import - REPOSITORY仓库名称:标签
通过指定URL或者某个目录来导入,例如
$docker    import http://example.com/exampleimage.tgz example/imagerepo

清楚所有未运行的容器
docker container prune

参考 docker-从入门到实践

猜你喜欢

转载自blog.csdn.net/chushoutaizhong/article/details/82992418