Docker中的镜像和容器
一、镜像
1.介绍
众所周知,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含任何动态数据,其内容在构建之后也不会被改变。
2.基本使用
-
辅助命令
# 查看当前docker客户端引擎和server引擎版本信息 docker version # 查看当前docker引擎的详细信息 docker info # 查看帮助信息 docker --help
-
查看本地仓库中存在哪些镜像
# 第一种 docker image ls # 第二种(常用) docker images # 筛选目标镜像 docker iamges redis # 列举有关redis的镜像 # 只列出ID docker images -q
结果解释:
REPOSITORY(名称) TAG(版本) IMAGE ID(镜像ID) CREATED(创建时间) SIZE(大小) hello-world latest feb5d9fea6a5 19 months ago 13.3kB redis 3.2 87856cc39862 4 years ago 76MB -
下载镜像
docker pull 镜像名称:版本 # 示例 docker pull redis:3.2
-
搜索镜像
docker search 镜像名称
注:此命令只能查看目标镜像是否存在,不能查看镜像的详细信息
若需查看镜像详细信息,需要在Docker Hub中查找
Docker Hub地址:Docker
-
删除镜像
# 正常删除 docker image rm 镜像名称:版本|镜像ID #采用这种方式必须是没有运行过的镜像才能够删除 # 强制删除 docker image rm -f 镜像名称:版本|镜像ID
二、容器
1.介绍
Docker 容器叫Docker Container。
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
Docker容器与其他的容器技术都是大致类似的。但是,Docker在一个单一的容器内捆绑了关键的应用程序组件,这也就让这容器可以在不同平台和云计算之间实现便携性。其结果就是,Docker就成为了需要实现跨多个不同环境运行的应用程序的理想容器技术选择。
Docker还可以让使用微服务的应用程序得益,所谓微服务就是把应用程序分解成为专门开发的更小服务。 这些服务使用通用的RESTAPI来进行交互。使用完全封装Docker容器的开发人员可以针对采用微服务的应用程序开发出一个更为高效的分发模式。
2.基本使用
-
查看当前Docker引擎中运行的容器有哪些
# 查看已启动容器 docker ps # 查看所有容器(包括启动,关闭) docker ps -a
-
运行一个容器
docker run 镜像名称:版本|镜像ID
-
运行容器,同时设置容器与宿主机端口的映射关系
docker run -p 宿主机端口:容器端口 镜像名称|镜像ID
-
后台启动容器
docker run -p 宿主机端口:容器端口 -d 镜像名称|镜像ID
-
指定容器名称
docker run -p 宿主机端口:容器端口 -d --name 容器名称 镜像名称|镜像ID
-
停止容器
docker stop 容器ID|容器名称
-
启动、重启容器
docker start 容器ID|容器名称 docker restart 容器ID|容器名称
-
挂起、恢复容器
docker pause 容器ID|容器名称 docker unpause 容器ID|容器名称
-
杀死容器
docker kill 容器名称|容器ID
-
删除容器
# 删除已经停止的容器 docker rm 容器名称|容器ID # 强制删除容器(即使在运行的容器也可以删除) docker rm -f 容器名称|容器ID
-
查看容器内部的日志
docker logs 容器名称|容器ID 可选项: -t 加入时间戳 -f 跟随最新的日志打印 --tail 数字 显示最后多少条
3.进阶
-
进入容器内部
docker exec -it 容器名称|容器ID bash
-
退出容器
exit
-
容器与宿主机之间拷贝文件
-
将容器中指定文件或目录拷贝到宿主机
docker cp 容器名称|容器ID:容器中文件或目录 宿主机目录
-
将宿主机中指定文件或目录拷贝到容器
docker cp 宿主机文件或目录 容器名称|容器ID:容器中目录
-
-
查看容器内运行进程
docker top 容器名称|容器ID
-
查看容器内细节指令
docker inspect 容器名称|容器ID
-
容器数据卷机制
作用: 用来实现宿主机中数据和容器中数据进行映射(同步)
注意: 数据卷使用必须在容器首次启动时设置
-
使用绝对路径设置数据卷
docker run -v 宿主机绝对路径:容器内路径 ... 可选项: ro --全称为readonly,如果设置数据卷时加上ro,表示容器内路径是只读的,不能进行写操作
注:这种方式会将容器内路径的原始内容全部清空,始终以宿主机路径中的内容为主
-
使用别名方式设置数据卷
docker run -v 别名:容器内路径 ... # 如何查看创建的别名路径 find / -name 别名
注:别名代表docker数据卷中别名,这个别名如果存在于宿主机中,则docker直接使用,否则自动创建
使用别名方式会保留容器路径中原始内容,前提是别名对应路径不能存在内容
-
-
将容器打包成一个镜像
docker commit -m "描述信息" -a "作者" 容器名称|容器ID 镜像名称|镜像ID