Docer的镜像是一个只读的文件系统,除了提供容器(进程)运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建以后也不会改变。nginx
Docker Hub上有大量的高质量的镜像能够用,从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为git
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
镜像名称的格式为:web
Docker 镜像仓库地址:地址的格式通常是 <域名 ip> [:端口号] 。默认地址是 Docker
Hub。
docker
仓库名:如以前所说,这里的仓库名是两段式名称,即 <用户名> / <软件名> 。对于 Docker
Hub,若是不给出用户名,则默认为 library ,也就是官方镜像。
ubuntu
有了镜像以后,咱们就能够以这个镜像为基础启动一个容器来运行。以上面的 ubuntu:16.04 为
例,若是咱们打算启动里面的 bash 而且进行交互式操做的话,能够执行下面的命令。bash
docker run -it --rm \ ubuntu:16.04 \ bash
这里咱们是手动的根据镜像启动容器,咱们接下来看下docker run的各类参数的详解。
Docker run后的参数不少,Docker会在隔离的容器中运行进程,当运行docker run 命令时,Docker回启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,可是用户能够经过docker run命令从新的定义,就是说,docker run能够控制一个容器运行时的行为,好比监听的端口号,它能够覆盖docker build在构建镜像时的一些默认配置。网络
正常的命令行为学习
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]ui
这里咱们先来讲下OPTIONS命令行
Detached(-d) 容器运行在后台模式?后台模式和前台模式的区别待详细。 Name(--name) 指定运行的容器名称 Network settings(--net 或 --mac-address) 默认状况下全部容器都是开启了网络接口,可使用--net none来关闭网络接口,也可使用 --mac-address 12:34这种方式来设置容器的MAC地址。 Clean up(--rm) 设置该命令时,每一个容器在退出时,它的文件系统并不会保存下来。而且--rm和-d是不可同时使用的。 暴露端口(-p) 使用-p来使容器和主机的对应端口进行绑定,能够手动指定,也能够走默认的。 环境变量(-e) 使用-e来给容器中进程设定环境变量,甚至能够覆盖已经存在的环境变量,好比 -e "deep=purple"
COMMAND也就是CMD是能够用来覆盖默认的执行命令的。
run指令参考文章 http://dockone.io/article/152,文中还有许多其余许多参数的解释。
想要列出已经下载了的镜像,可使用docker image ls命令。
在镜像下载和上传的过程当中镜像是保持着压缩状态的,因此这里列表出来的镜像的大小会比较大。
docker system df 命令用来查看镜像、容器、数据卷所占用的控件、
因为新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被成为虚悬镜像。
docker image ls -f dangling=true 用来查看虚悬镜像
首先,若是有在使用该镜像的容器正在运行,则须要首先中止该容器并删除该容器
//中止运行中的容器 docker stop [容器id] //删除容器 docker rm [容器id] //删除镜像 docker rmi [镜像id]
Docker会利用中间层镜像,因此在使用了一段时间以后,可能会看到一些依赖的中间层镜像。
docker image -a 列出包括着中间层镜像在内的全部镜像
//根据仓库名列出镜像 docker image ls ubuntu //列出特定的某个镜像 docker image ls ubuntu:16.04 //列出全部镜像的id docker image ls -q
docker inspect [镜像ID]
docker commit命令除了学习以外,还有一些特殊的应用场合,好比被入侵后保存现场等。可是,定制镜像最好仍是使用Dockerfile来完成。
镜像是容器的基础,每次执行docker run的时候都会指定哪一个镜像做为容器运行的基础。以前咱们常用docker hub上的镜像,可是当这些镜像没法直接知足需求时,咱们就须要定制这些镜像。
咱们以前有学,镜像是多层存储的,每一层是在前一层的基础上进行的修改;而容器一样也是多层存储,是在以镜像为基础
docker run --name blackwebserver -d -p 80:80 nginx
使用NGINX镜像启动一个容器,命名为blackwebserver,而且映射了80端口,
进入容器的命令:
docker exec -it blackwebserver
将修改了的容器保存为新的镜像
docker commit blackwebserver nginx/blackwebserver
docker commit命令虽然能够比较直观的帮助理解镜像分层存储的概念,可是实际环境中并不会这样使用。
这里的commit就有点相似于git commit了,将修改好的程序commit生成咱们的静态文件(项目)。而后能够将镜像push到镜像仓库中(docker push 指令)。
这里简单的介绍了下镜像的各类操做指令,固然镜像的实现原理仍是须要去深究一会儿的。下文再叙!