Docker 镜像、容器、仓库的概念及应用详解_docker

Docker 镜像、容器、仓库的概念

Docker镜像

Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。

例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。

镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。

Docker容器

Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。

镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。

Docker仓库

Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。

有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。

根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,只需将其从仓库pull下来就可以了。

下面一篇文章介绍了有关上述概念的基本命令

Docker关于镜像、容器、仓库的基本命令

镜像

1.获取镜像

$ docker pull dl.dockerpool.com:5000/ubuntu:14.04

dl.dockerpool.com为注册服务器,5000为端口号,ubuntu为仓库名称,14.04是镜像也是版本号

2.查看镜像信息

列出本地主机已有的所有镜像

$ docker images 

更改变迁信息

$ docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

000为镜像ID,显示这个镜像的详细信息

$ docker inspect 000

3.搜寻镜像

$ docker search mysql (输出信息包括镜像名字、描述、星级、是否为官方创建、是否自动创建)

4.删除镜像

$ docker rmi dl.dockerpool.com:5000/ubuntu:latest

注:当有该镜像创建的容器存在时,镜像文件默认是无法删除的,所以删除镜像前最好是删除所有依赖该镜像的容器,请不要用强制删除。

5.创建镜像

有三种方法:

基于已有镜像的容器创建

$ docker commit -m “add new image”-a "" 000(容器ID) test(新建image name)

基于本地模板导入

$ cat ubuntu-14.04-x86_64-minimal.tar.gz | Docker import - ubuntu:14.04

基于dockerfile创建

6.存出镜像

$ docker save -o ubuntu_14.04.tar ubuntu:14.04

7.载入镜像

$ docker load --input ubuntu_14.04.tar

或者

docker load < ubuntu_14.04.tar

8.上传镜像

$ docker push user/test:latest

user用户需要在dockerHub网站注册

容器

容器是镜像的一个运行实例,但它带有额外的可写层

1.创建容器

$ docker create -it ubuntu:12.04

2.创建并启动容器

$ docker run -it ubuntu:12.04 /bin/bash

3.守护态运行

$ docker run -d ubuntu:12.04

4.查看容器信息

$ docker ps [-a -q] 

查看终止状态

5.获取容器的输出信息

$ docker logs cet 

cet是容器ID前三个字符

6.终止容器

$ docker stop cet

7.启动容器

$ docker start cet

8.重启容器

$ docker restart cet

9.进入容器

attach命令

$ docker attach nostalgic(nostalgic是docker的name)

缺点:所有窗口同步显示

exec命令

- docker exec -it 243... /bin/bash (243...为docker ID)

nsenter命令

1.找PID

$ PID=$(docker-pid 243..)

2.通过PID链接容器

$ nsenter --target $PID --mount --uts --ipc --net --pid

10.删除容器

$ docker rm [-f -l -v] cet

-f 强行终止并删除

-l 删除容器的链接,保留容器

-v 删除挂载的数据卷

$ docker export cet >test.tar

12.导入容器(将容器快照导入到本地镜像库)

$ cat test.tar | docker import - test/ubuntu:v1.0

重新指定标签为ubuntu的镜像名称,v1.0的版本号

docker load 也可以导入镜像存储文件到本地镜像库,他比import方式的好处是:import导入镜像快照文件将丢失所有的历史记录和元数据信息。

注:通过导出容器和导入容器可以实现容器迁移(拷贝文件)

仓库

仓库是集中存放镜像的地方,一个注册服务器上有很多仓库,一个仓库中有很多镜像。

1. 登录

$ docker login

2. 基本操作

查找、上传、下载

3. 自动创建

4. 查看镜像

http://www.dockerpool.com/downloads

5. 更新镜像标签

$ docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04

将前面的镜像更改为ubuntu:12.04

6. 创建私有仓库

$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry

自动下载并启动registry容器,创建本地的私有仓库服务,默认仓库船舰的容器在/tmp/registry,可以通过-v参数来存放到指定路径上

7.管理私有仓库镜像

假设私有仓库地址为10.0.2.2,端口为5000,

$ docker tag ubuntu:14.04 10.0.2.2:5000/test

更改标签名

$ docker push 10.0.2.2:5000/test

push镜像,会自动push到10.0.2.2地址的机器上

$ curl http://10.0.2.2:5000/v1/search

查看仓库10.0.2.2:5000中是否含有test镜像

docker pull 10.0.2.2:5000/test

在任何一台能访问到10.0.2.2地址的机器上下载镜像

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索docker
docker镜像 容器 仓库、docker 国内镜像仓库、docker 镜像仓库、docker 阿里镜像仓库、阿里云docker镜像仓库,以便于您获取更多的相关知识。

时间: 2025-01-02 20:15:37

Docker 镜像、容器、仓库的概念及应用详解_docker的相关文章

docker 动态映射运行的container端口实例详解_docker

docker动态映射运行的container端口,最近做项目,对于docker动态映射运行的container端口的资料有必要记录下,以便以后在用到, Docker自带了EXPOSE命令,可以通过编写dockerfile加-p参数方便的映射Container内部端口,但是对于已经运行的container,如果你想对外开放一个新的端口,只能编辑dockerfile然后重新build,有点不太方便. 其实docker本身使用了iptables来做端口映射的,所以我们可以通过一些简单的操作来实现动态映

JavaScript中的ajax功能的概念和示例详解_javascript技巧

AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML). 个人理解:ajax就是无刷新提交,然后得到返回内容. 对应的不使用ajax时的传统网页如果需要更新内容(或用php做处理时),必须重载整个网页页面. 示例: html代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>

Docker 镜像和容器的区别详解_docker

 最近学习Docker,被Docker 的镜像和容器搞的晕头转向,索性上网查找相关资料并整理下彻底的理解这块内容,有需要的小伙伴可以看下,少走点弯路. Docker的镜像和容器的区别         一.Docker镜像 要理解Docker镜像和Docker容器之间的区别,确实不容易. 假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的.这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态. 一个Docker镜像可以构建于另一个Docke

Docker 私有仓库恢复实例详解_docker

Docker 私有仓库恢复 之前openstack平台由于停电等影响,导致之前制作的registry 私有仓库的主机挂掉,还好数据挂载在nfs中,然后现在尝试重新启动恢复. 虚机安装nfs服务 apt-get install -y nfs-common 编辑 /etc/fstab 写入远程挂载地址 10.50.8.12:/export/DockerRepo   /var/lib/docker/registry      nfs    defaults        0 0 然后进行挂载: mou

Docker创建镜像两种方法详解_docker

 Docker创建镜像             最近学习Docker 的知识,偶然在网上看到关于Docker 创建对象的两种方法很好,这里记录下,也许可以帮助到你.  我们都知道Docker中我们是基于镜像来运行的容器,那如何创建镜像呢?创建镜像有两种方法,一是使用docker commit命令,二是使用docker build命令和Dockerfile文件.这里我们说的创建镜像是指基于一个已有的基础镜像比如ubuntu等,而不是从零创建一个全新的镜像.         下面分别简单介绍一下两种

docker容器如何优雅的终止详解_docker

前言 在Docker大行其道的今天,我们能够非常方便的使用容器打包我们的应用程序,并且将它在我们的服务器上部署并运行起来.但是,谈论到如何停掉运行中的docker容器并正确的终止其中的程序,这就成为一个非常值得讨论的话题了. 事实上,在我们日常的项目当中,这是我们经常需要面对和处理的问题:      场景A:假如我们打包在容器中的程序,提供HTTP方式的服务,负责处理各种HTTP requests并返回结果,我们必然希望在容器被停掉的时候,能够让程序有时间把已经在处理中的请求继续处理完毕,并返回

Docker 手动配置容器网络实例详解_docker

Docker 手动配置容器网络   docker容器的网络是net命名空间与虚拟设备的结合,容器在启动时会创建一对虚拟接口veth pair,这一对接口分别放到本地和容器中,在本地的veth会被分配类似vethxxxx的名称并被桥接到指定网桥的上(默认为docker0),可以通过brctl show命令查看网桥上挂载的接口,在容器中的veth会从网桥获取一个未使用地址,该veth的名称会被更改为eth0并配置默认路由到vethxxxx,docker允许在启动容器的时候通过--net参数指定不同的

Docker快速入门以及环境配置详解_docker

前言 数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术.本文中我们就要介绍的这种技术名叫Docker.Docker能让开发者简单.快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索. 简介 Docker 最初 dotCloud 公司内部的一个业余项目

Docker基础命令详解_docker

docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker