Docker - 镜像,容器,仓库基本介绍

我不是女神ヾ 2022-05-31 03:13 372阅读 0赞

本文参考了Docker从入门到实践

Docker镜像

Docker镜像就是一个只读的模板,例如一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装Apache或用户需要的其他应用程序。

Docker容器

Docker利用容器来运行应用,容器是从镜像创建的运行实例。可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。

Docker仓库

仓库是集中存放镜像文件的场所。有时候会被仓库和仓库注册服务器混为一谈,不严格区分。仓库注册服务器上往往存放着多个仓库,每个仓库中有包含了多个镜像,每个镜像有不同的标签。

仓库分为公开仓库和私有仓库两种形式。

Linux安装Docker:

yum install docker

安装之后启动Docker服务,并让它随系统启动自动加载

service docker start

chkconfig docer on

Docker镜像

Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会从镜像仓库下载。

可以使用docker pull命令从仓库获取所需要的镜像。

docker pullregistry.hub.docker.com/Ubuntu:12.04 从注册服务器registry.hub.docker.com的ubuntu仓库下载标记为12.04的镜像。

docker run –t –I Ubuntu:12.04 /bin/bash 创建一个容器,让其运行bash应用。

docker images 显示本地已有的镜像

docker commit 提交更新后的副本

docker build 生成镜像

dokcer tag 修改镜像标签

docker push 将自己创建的镜像上传到仓库

docker save 导出镜像到本地文件

docker load 从导出的本地文件中再导入到本地镜像库

dokcer rmi 移除本地镜像 删除本地镜像需要先用docker rm删除依赖这个镜像的所有容器

Docker镜像是怎么实现增量的修改和维护的?每个镜像都由很多层次构成,Docker使用UnionFS 将这些不同的层结合到一个镜像中去。

union文件系统(unionFS)是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下

union文件系统是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具有应用镜像

另外,不同docker容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率

Docker中使用的AUFS 就是一种union FS。 AUFS支持为每一个成员目录(类似git的分支)设定 只读,读写,写出 权限,同时AUFS里有一个类似分层的概念,对只读权限的分支可以逻辑上进行增量的修改(不影响只读部分)

Docker目前支持的union文件系统种类包括AUFS,btrfs,vfs和DeviceMapper。

Docker容器

容器是Docker又一核心概念。容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。

dokcer run新建并重启

docker run –t –iubuntu:14.04 /bin/bash :-t让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。

当docker run 来创建容器时,docker在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载

利用镜像创建并启动一个容器

分配一个文件系统,并在只读的镜像层外面挂载一层可读写层

从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

从地址池配置一个ip地址给容器

执行用户指定的应用程序

执行完毕后容器被终止

docker start 启动运行一个已经终止的容器

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的,除此之外,并没有其他的资源,可以在伪终端中利用ps或top来查看进程信息。

更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。

docker run -d ubuntu:14.04 /bin/sh -c”while true; do echo hello world; sleep 1; done”

docker stop 终止一个运行中的容器

当docker容器中指定的应用终结时,容器也自动终止,比如对之前只启动一个终端的容器,通过exit或ctrl + d来退出终端时,创建的容器立刻终止。

可以使用 docker ps –a 来看到终止状态的容器。

可以使用docker start来重新启动处于终止状态的容器。

也可以使用docker restart来重启一个运行态的容器。

有时候我们需要进入容器进行操作

docker attach是docker自带的命令,但有时候使用attach命令并不方便,多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示。某个窗口因命令阻塞时,其他窗口也无法执行操作了。

我们也可以使用nsenter命令,在这个时候,需要知道容器的PID:

PID= $(docker inspect —format”{ {.State.Pid }}“ )

通过这个PID,可以连接到这个容器

nsenter —target $(PID) —mount —uts —ipc—net –pid

docker export 导出本地某个容器。 dockerexport >xxx.tar 将导出容器快照到本地文件。

docker import 将容器快照文件导入为镜像。 Cat xxx.tar | docker import –test/xxx:v1.0

docker rm删除一个处于终止状态的容器。

docker rm –f 删除一个运行中的容器。Docker会发送SIGKILL信号给容器。

仓库

仓库(Repository)是集中存放镜像的地方。

这里需要区分的是注册服务器(Registry)。注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。仓库可以被认为一个具体的项目或目录。比如dl.dockerpool.com/ubuntu,dl.dickerpool.com是注册服务器地址,ubuntu是仓库名。

目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括超过15000的镜像。

docker login:输入用户名,密码和邮箱来完成注册和登录。以后用户的认证信息就保存在本地用户目录的.dockercfg中。

docker search可以进行搜索仓库中的镜像。

docker pull将镜像下载到本地。

docker push将镜像推送到docker hub。

自动创建允许用户通过Docker hub指定跟踪一个目标网站上的项目,一旦项目发生新的提交,则自动执行创建。当然,我们也可以手动更新镜像。。。。。

配置自动镜像:

  1. 创建并登陆Docker hub,以及目标网站

  2. 在目标网站中连接账户到Docker hub

  3. 在Docker hub中配置一个自动创建。

  4. 选取一个目标网站中的项目(需要含Dockerfile)和分支

  5. 指定Dockerfile的位置,并提交创建。

我们有时候可能需要创建一个本地仓库给私人使用。

docker-registry是官方提供的高工具,可以用于构建私有的镜像仓库。

SouthEast

我们也可以本地安装docker-registry来安装存储仓库。

docker tag:标记镜像

Docker 的 Registry利用配置文件提供了一些仓库的模板,用户可以直接使用它们来进行开发或生产部署。

在config-sample.yml中,可以看到一些现成的模板段:

SouthEast 1

发表评论

表情:
评论列表 (有 0 条评论,372人围观)

还没有评论,来说两句吧...

相关阅读