Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。
安装 Docker-CE(centos 7)
Docker CE 安装官方文档参考:
注意:docker 要求 centos 系统必须是 centos 7 版本以上,windows 系统必须是 win10 专业版、企业版或教育版。
卸载旧的 docker
如果系统中存在老版本的 docker ,可以使用下面命令卸载旧的 docker:
1 | sudo yum remove docker \ |
安装 docker
yum 阿里云镜像设置:https://developer.aliyun.com/mirror/centos
步骤1:安装 docker 软件依赖的工具
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
步骤2:设置 docker 安装源,使用阿里云镜像安装源:
1 | yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
步骤3:设置 yum 使用最快的安装源
1 | yum makecache fast |
步骤4:执行下面命令,安装 docker-ce
1 | yum install -y docker-ce |
安装成功之后,控制台提示类似如下信息:
docker 服务相关命令
1 | systemctl start docker.service # 启动docker服务 |
设置阿里云容器镜像代理
访问:https://cr.console.aliyun.com/
注意的是,上述地址需要注册阿里云账号,并开通:容器镜像服务。
按照阿里云文档选择对应的操作系统脚本执行,即可设置阿里云镜像加速服务:
拉取 docker 镜像并运行:
1 | docker pull hello-world |
运行效果界面如下:
Docker 的基本概念
Docker
中包括三个基本的概念:
Image
(镜像)Container
(容器)Repository
(仓库)
镜像是 Docker
运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker
的核心。
Image (镜像)
docker 官网镜像地址:https://hub.docker.com/
Docker
镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像(Image)
就是一堆只读层(read-only layer)
的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义。
从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker
内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统 (union file system)
技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。
Container (容器)
容器 (container)
的定义和镜像 (image)
几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。
Repository (仓库)
Docker
仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry
(仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository)
和仓库注册服务器 (Registry)
混为一谈,并不严格区分。Docker
仓库的概念跟 Git
类似,注册服务器可以理解为 GitHub
这样的托管服务。实际上,一个 Docker Registry
中可以包含多个仓库 (Repository)
,每个仓库可以包含多个标签 (Tag)
,每个标签对应着一个镜像。所以说,镜像仓库是 Docker
用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>
的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest
作为默认标签.。
仓库又可以分为两种形式:
public
(公有仓库)private
(私有仓库)
Docker Registry
公有仓库是开放给用户使用、允许用户管理镜像的 Registry
服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry
。Docker
官方提供了 Docker Registry
镜像,可以直接使用做为私有 Registry
服务。当用户创建了自己的镜像之后就可以使用 push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull
下来就可以了。
我们主要把 Docker
的一些常见概念如 Image
, Container
, Repository
做了详细的阐述,也从传统虚拟化方式的角度阐述了 docker
的优势,我们从下图可以直观地看到 Docker
的架构:
Docker
使用 C/S
结构,即客户端/服务器体系结构。 Docker
客户端与 Docker
服务器进行交互,Docker服务端负责构建、运行和分发 Docker
镜像。 Docker
客户端和服务端可以运行在一台机器上,也可以通过 RESTful
、 stock
或网络接口与远程 Docker
服务端进行通信。
这张图展示了 Docker
客户端、服务端和 Docker
仓库(即 Docker Hub
和 Docker Cloud
),默认情况下Docker
会在 Docker
中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git
,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。
常用命令
Docker容器信息
1 | docker version # 查看docker容器版本 |
镜像操作
提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。
镜像查看
1 | docker images # 列出本地images |
镜像搜索
1 | docker search mysql # 搜索仓库MySQL镜像 |
镜像下载
1 | docker pull redis # 下载Redis官方最新镜像,相当于:docker pull redis:latest |
镜像删除
1 | docker rmi redis # 单个镜像删除,相当于:docker rmi redis:latest |
镜像操作
提示:对于容器的操作可使用CONTAINER ID 或 NAMES。
容器启动
1 | docker run -i -t --name mycentos # 新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--name 为容器指定一个名称 |
查看容器
1 | docker ps # 查看正在运行的容器 |
容器的停止与删除
1 | docker stop redis # 停止一个运行中的容器 |
# ##查看docker容器信息 docker info ##查看docker容器帮助 docker –help