初识docker
docker基于go语言实现的云开源项目,docker的主要目标是‘Build,Ship and Run Any App,Anywhere’,即通过对用用组件的封装(Packaging)、分发(DIstribution)、部署(Deployment)、运行(Running)等生命周期的管理,达到应用级别的‘一次封装,到处运行’。应用组件可以是Web应用,数据库服务、甚至操作系统或编译器。
docker基于linux的多项开源技术提供高效、敏捷、轻量级的容器方案。
虚拟化技术是一个通用的概念,在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存与存储等予以抽象、转换后呈现出来。打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。
docker三大核心概念:镜像、容器、仓库。
docker镜像类似于虚拟机镜像,可以理解为面向docker引擎的只读模板,包含文件系统。
docker容器类似于轻量级沙箱,利用它可以运行和隔离应用。镜像本身是只读的,容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身保持不变。
docker仓库类似于代码仓库,是docker集中存放镜像文件的场所。
镜像操作:
镜像是docker运行容器的前提,使用docker pull命令从网络上下载镜像。镜像文件一般是由若干层组成的,行首为代表各层的id。下载过程会获取并输出镜像各层信息,层是实现增量保存和更新的基础。
获取镜像:默认从获取最新。
获取指定版本镜像:
从其他注册服务器获取:
利用该镜像创建一个容器,在其中运行bash应用:
使用docker images命令列出本地主机上已有的镜像
查看镜像信息:
tag信息用于标识同一个仓库的不同镜像。为了方便后续工作,还可以使用docker tag 命令为本地镜像添加新的标签。
不同镜像的id是一致的,它们指向了同一个镜像文件,只是别名不同而已。
使用docker inspect命令可以获取该镜像的详细信息。返回的是json格式的消息。
如果只要其中一项的内容时,可以使用-f参数指定,指定镜像id的时候,可使用前几个字符代替完整的id。
搜寻镜像:
使用docker search命令,搜索远端仓库的共享镜像
删除镜像:
使用docker rmi命令可以删除镜像,当一个镜像有多个标签的时候,只是会删除该标签,并不影响镜像文件,当只有一个标签的时候会彻底删除该镜像。
使用docker rmi 镜像id命令删除镜像,会尝试先删除所有的别名,再删除镜像文件,当有该镜像创建的容器存在的时候,镜像文件无法被删除。强制删除加上-f参数(会有其他问题)正确做法是先删除所有依赖容器在使用临时的id删除镜像文件。
可以使用docker ps -a命令查看本机存在的所有容器。
创建镜像:
方法有三种:基于已有的镜像的容器创建,基于本地模板导入,基于Dockerfile创建
基于已有的镜像的容器创建
使用docker commit命令
创建一个新镜像,进行修改,如创建一个test文件
使用docker commit命令 ,提交为一个新镜像,(-a作者信息 -m提交信息 -p提交时暂停容器运行),提交时可以使用id或名称指定容器。命令返回新的镜像id信息。
此时查看本地镜像列表。
基于本地模板导入
存入和载入镜像
docker save和docker load命令
存出镜像到本地文件。
从存出的文件再导入到本地镜像库。
上传镜像
docker push命令
容器,可以理解是镜像的一个运行实例,但它带有额外的可写文件层。docker容器就是独立运行的一个或者一组应用,以及他们的必须运行环境。属于轻量级用户可以随时创建和删除容器。
创建命令:docker create命令,此时容器处在停止状态,可以使用docker start命令启动。
新建并启动命令:docker run
守护态运行
docker ps查看容器信息
docker logs获取容器输出信息
终止容器
查看处于终止状态的容器id信息
重新启动终止态的容器
重启
进入容器,包括docker attach命令,docker exec命令,以及nsenter工具等
docker attach命令,docker自带命令,有个不方便之处,当多个窗口同时attach到同一个容器的时候,所有窗口同步显示,某一个窗口命令阻塞,其他也无法执行
exec命令,可以直接在容器内运行的命令
删除容器
docker rm
导入导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此容器是否处于运行状态,使用docker export命令
可以将这些文件传输到其他的机器,在其他的机器上通过导入命令实现容器的迁移
导入容器
导出的文件又可以通过docker import 命令导入成为镜像。
仓库,是集中存放镜像的地方,分为公共仓库和私有仓库。官方维护公共仓库https://hub.docker.com。
实际上注册服务器是存放仓库的具体服务器,每个服务器有多个仓库,每个仓库有多个镜像。
使用registry镜像创建私有仓库,自动下载并启动一个registry容器,创建本地私有仓库服务。
默认会将仓库放在容器的/tem/registry目录下,也可以通过-v存放指定目录,
管理私有仓库
查看已有镜像
docker tag命令标记镜像
docker push上传标记镜像
用curl查看仓库10.0.2.2:5000