Docker的核心概念和安装

Docker三大核心概念

  • 镜像(image)
  • 容器(container)
  • 仓库(repository)

    Docker 镜像

    docker镜像类似于虚拟机镜像,可以理解为一个面向docker引擎的只读模板,包含系统文件

镜像是创建容器的基础,通过版本管理和增量文件的文件系统,docker提供了一套十分简单的机制来创建和更新现有的 镜像,可以从网上下载镜像,并通过简单的命令就可以直接使用。

Docker容器

类似一个轻量级的沙盒,Docker利用容器来运行和隔离应用

容器是镜像的实例,可以将其启动 开始 停止 相互隔离 互不可见

镜像是一个只读文件。容器的启动相当于在镜像上创建一个可读写层,镜像本身不会改变。

Docker仓库

DOcker仓库类似代码仓库,是Docker集中存放镜像文件的场所

注册服务器是存放仓库的地方,注册服务器上有多个仓库,每个仓库中放一类镜像,包括多个镜像文件,通过不同的标签(tag)区分。
这里写图片描述

  • 私有仓库(不公开)
  • 公开仓库

    国内一般使用阿里云或者:

https://www.daocloud.io/

用户创建了自己的镜像之后就可以push到指定的共有或者私有仓库。下一次在另一台机器上使用该镜像时,pull即可。

ps:Dokcer利用仓库管理镜像的设计理念和Git非常相似

Docker引擎

docker引擎是一个客户端-服务器应用。构成组件:

  • 一个后台守护进程(daemon process)
  • 一个REST API指定特定的接口,程序可以使用这些接口告诉 指导守护进程做什么
  • 一个命令行端口(CLI),clinet
    ++
    CLI使用Docker的REST API来和Docker的守护进程交互,通过脚本或者直接CLI命令。
    守护进程创建和管理Docker镜像、容器、网络、数据卷等。

Docker架构

客户端-服务器的架构。docker client告诉Docker daemon建立、运行、分发你的Docker容器。Docker client和daemon可以运行在一个系统中,或者可以使用Docker client和远程Docker daemon取得联系。docker服务端和docker守护进程之间通过sockets或者REST API交互。
这里写图片描述

安装Docker

在 Linux上 安装 Docker
Docker 的 安装资源文件 存放在Amazon S3,会间歇性连接失败。所以安装Docker的时候,会比较慢。 
你可以通过执行下面的命令,高速安装Docker。

curl -sSL https://get.daocloud.io/docker | sh
适用于Ubuntu,Debian,Centos等大部分Linux,会3小时同步一次Docker官方资源

安装体验版或测试版,体验最新Docker。

curl -sSL https://get.daocloud.io/docker-experimental | sh
curl -sSL https://get.daocloud.io/docker-test | sh

启动Docker

#sudo systemctl start docker.service 

设置Docker为开机自启

systemctl enable docker.service

配置加速器

Docker默认下载镜像是通过默认仓库下载,其默认仓库是在国外的站点,在访问速度上比比较
慢,不不稳定。为了了改变这一一情况,国内一一些大大的容器器服务站点,例例如:阿里里里云,daocloud
等,提供了了访问加速器器。我们可以通过配置访问加速器器,提高高稳定性和下载速度。

Daocloud加速器
这里写图片描述

获取镜像

docker pull获取镜像

docker pull name:TAG

TAG默认为latest,例如:

docker pull centos

该命令相当于从默认注册服务器器(Registry.hub.docker.com)中的centOS仓库下载标记为latest
的镜像

docker pull registry.cn-hangzhou.aliyun.com/acs-sample/centos

下载过程:
这里写图片描述
图中可见,镜像文件是一层一层的,a3ed表示各层的id。下载过程会获取并输出镜像的各层信息。层(layer)是AUFS(高级联合文件系统)中的重要概念,是实现增量与保存的基础
运行centos镜像

docker run -ti centos /bin/bash

查看镜像的信息

docker images

这里写图片描述
列出的信息依次为:

  • 来自于那个仓库
  • 镜像标签信息TAG
  • 镜像的唯一id
  • 创建时间
  • 大小

    为了方便使用某个镜像,可以修改标签值

docker tag centos centos2

这里写图片描述
注意:将centos改为了centos2,但是,这两个是一个镜像,id相同
删除镜像

sudo rmi centos2

这里写图片描述

这里只是删除了镜像的一个标签而已,并不影响镜像文件,但是,当镜像文件只有一个标签并删除的时候,就彻底删除了

使用docker rmi +镜像id的时候,会先删除所有的标签,然后删除镜像本身

当镜像创建了容器的时候,直接删除会报错,可以强制删除

docker rmi -f centos


获取镜像的详细资料

docker inspect centos
ifeng@ifeng-PC:~$ sudo docker inspect centos
[
    {
        "Id": "sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [
            "centos@sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-04-06T21:01:51.215822656Z",
        "Container": "20e7cee1d3f15879fb54cb361e2ceb3b4cd260f90e51202feec140f1aa9d8527",
        "ContainerConfig": {
            "Hostname": "20e7cee1d3f1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:33993dd9c7556016a6f54c12969e07640d6737cdfe9b98391ad38e9a5f6c4217",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.schema-version": "= 1.0     org.label-schema.name=CentOS Base Image     org.label-schema.vendor=CentOS     org.label-schema.license=GPLv2     org.label-schema.build-date=20180402"
            }
        },
        "DockerVersion": "17.06.2-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:33993dd9c7556016a6f54c12969e07640d6737cdfe9b98391ad38e9a5f6c4217",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.schema-version": "= 1.0     org.label-schema.name=CentOS Base Image     org.label-schema.vendor=CentOS     org.label-schema.license=GPLv2     org.label-schema.build-date=20180402"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 198618695,
        "VirtualSize": 198618695,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/dad551cbdc882fe740a7359087277541e84846644f73f02ee4631952227585da/merged",
                "UpperDir": "/var/lib/docker/overlay2/dad551cbdc882fe740a7359087277541e84846644f73f02ee4631952227585da/diff",
                "WorkDir": "/var/lib/docker/overlay2/dad551cbdc882fe740a7359087277541e84846644f73f02ee4631952227585da/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:43e653f84b79ba52711b0f726ff5a7fd1162ae9df4be76ca1de8370b8bbf9bb0"
            ]
        },
        "Metadata": {
            "LastTagTime": "2018-06-19T17:36:24.900723134+08:00"
        }
    }
]
ifeng@ifeng-PC:~$ 

搜索镜像
默认搜索的是Docker Hub官方的仓库镜像

docker search centos

其实,我们还可以在阿里里里云容器器服务站点中搜索
地址如下:https://dev.aliyun.com


载入存出镜像

docker save -o centos.tar centos

换一台机器载入镜像

docker load --input centos.tar

上传镜像
默认会上传到Docker Hub

docker push name:tag

运行镜像生成一个容器

生成容器但不运行

docker create -ti centos

生成容器并运行

docker run -ti centos /bin/bash

docker run 启动容器时后台活动:

  • 检查本地是否存在指定镜像,不存在从默认仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读层外面挂一层读写层
  • 从宿主主机的网桥借口中桥接一个虚拟借口到容器中
  • 从地址池中分配一个ip地址
  • 执行用户指定的用户程序
  • 执行完毕后容器被终止

查看已经存在的容器
查看全部容器:

docker ps -a

查看正在运行的容器:

docker ps

这里写图片描述

  • container id :容器id(唯一)
  • image:依赖的镜像
  • command:执行的命令
  • status:当前容器的状态
  • ports:容器端口信息
  • names:容器别名(可自定义)

将停止的容器启动

docke start 容器id(前几位能唯一标示即可)

Dokcer基础入门+实例(1)
Dokcer基础入门+实例(2)
Dokcer基础入门+实例(3)
Dokcer基础入门+实例(4)
Dokcer基础入门+实例(5)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐