Docker 基础入门+实例(2)
Docker的核心概念和安装Docker三大核心概念镜像(image)容器(container)仓库(repository)Docker 镜像docker镜像类似于虚拟机镜像,可以理解为一个面向docker引擎的只读模板,包含系统文件镜像是创建容器的基础,通过版本管理和增量文件的文件系统,docker提供了一套十分简单的机制来创建和更新现有的 镜像,可以从网上下载镜像,...
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)
更多推荐
所有评论(0)