docker容器简介
Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,并使用了一种分层的联合文件系统技术管理镜像,能极大简化环境运维过程。Docker是容器运行的引擎(容器系统)负责启动容器镜像、运行容器应用和管理容器实例,并且支持在多种主流平台(PaaS)和本地部署。
Docker 的核心组件包括:
- Docker 客户端:Client
- Docker 服务器:Docker daemon
- Docker 镜像:Image
- Registry:镜像仓库
- Docker 容器:Container
Docker 架构如图所示
docker客户端:Docker客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。最常用的Docker客户端是docker命令。
Docker服务器:Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。注:Docker Host(主机)是一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker镜像:Docker 镜像是用于创建Docker容器的模板。可将Docker镜像看成只读模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。通过它可以创建Docker容器。
构建镜像:
Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。
docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤
• 运行容器。
• 修改容器。
• 将容器保存为新的镜像。
举个例子:在centos base镜像中安装vim并保存为新镜像。
第一步:运行容器。
-it 参数的作用是以交互模式进入容器,并打开终端。9f937c7b4534 是容器的内部 ID。
第二步:修改容器,安装vim
第三步:保存为新镜像
执行docker commit命令将容器保存为镜像。
以上演示了如何用 docker commit 创建新镜像。这是一种手工创建镜像的方式,Docker 并不建议用户通过这种方式构建镜像。 下面来学习下通过Dockerfile(推荐方法)构建镜像,Dockerfile底层是由 docker commit 一层一层的构建新镜像。
Dockerfile是一个文本文件,记录了镜像构建的所有步骤。
运行 docker build 命令构建镜像
在Dockerfile存放目录中运行:docker build -t ubuntu-with-vim-dockerfile
镜像构建成功后,通过 docker images 查看镜像信息。
Docker容器:
Docker容器就是Docker镜像的运行实例,容器是独立运行的一个或一组应用。容器可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。可以把容器看做是一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
用户可以通过CLI(Docker)或是API启动、停止、移动或删除容器。可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。
启动容器:docker run 容器名
执行 docker ps 或 docker container ls 可以查看 Docker host 中当前运行的容器
因为容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器也就不会退出。我们就可以通过执行一个长期运行的命令在后台运行来保持容器的运行状态
两种进入容器的方法:
docker attach
docker exec
attach 与 exec 主要区别如下:
attach 直接进入容器启动命令的终端,不会启动新的进程。
exec 则是在容器中打开新的终端,并且可以启动新的进程。
如果想直接在终端中查看启动命令的输出,用attach;其他情况使用exec。
stop/start/restart 容器
通过 docker stop 可以停止运行的容器。
docker start 会保留容器的第一次启动时的所有参数。
docker restart 可以重启容器,其作用就是依次执行 docker stop 和docker start。
pause/unpause 容器
docker pause:暂时让容器暂停工作
docker unpause 恢复运行
导出容器
docker export [容器 id] > [导出文件]
这样将导出容器快照到本地文件
导入容器
可以使用docker import 从容器快照文件中再导入为镜像
docker rm 删除容器
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送SIGKILL信号给容器
顺便说一句:docker rm 是删除容器,而 docker rmi 是删除镜像。
用docker inspect查看容器的信息,命令格式:docker inspect 容器ID或容器名
Registry镜像仓库:
Registry是存放Docker镜像的仓库,Registry分私有和公有两种。
Docker Hub (https://hub.docker.com/)是默认的Registry,由Docker公司维护,上面有数以万计的镜像,用户可以自由下载和使用。出于对速度或安全的考虑,用户也可以创建自己的私有Registry。
docker pull命令可以从Registry下载镜像。
docke run命令则是先下载镜像(如果本地没有),然后再启动容器。