1. Docker简介
- Docker
Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotCloud公司。说到docker就得提到 LXC(linux容器技术)和虚拟机(KVM,XEN等)- Linux容器技术
Docker引擎的基础是Linux容器(LinuxContainers,LXC)技术。IBM DeveloperWorks上给出了关于容器技术的准确描述:
容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟, 也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和 系统调用替换中的复杂性。- 在LXC的基础上,Docker进一步优化了容器的使用体验。Docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以简单明了地管理和使用容器。用户操作Docker容器就像操作一个轻量级的虚拟机那样简单。
- docker与传统虚拟化的区别:
![]()
传统虚拟化
![]()
docker
上面两张图,是docker官方网站的简单区分- 传统虚拟化,依靠于虚拟机 的应用,运行不仅仅需要其自身,还有要依赖于虚拟化的操作系统,以及函数库等,这会造成系统资源的短缺
- docker 容器引擎只需应用和其依赖所需的空间,他作为一个隔离的进程,运行在用户空间和宿主机器的操作系统上,和其他容器共享内核。容器向享受隔离的资源于】及分配,与虚拟机相比,更加的便捷高效
2. 进行docker的安装
docker-engine.x86_64 0:17.03.1.ce-1.el7.centos
依赖性:
docker-engine-selinux.noarch
安装后启动docker
进行查看版本
3. Docker的基本概念
- Docker 包括三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期。- Docker 镜像
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。- Docker 容器
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:
镜像是只读的,容器在启动的时候创建一层可写层作为最上层。- Docker 仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub (https://hub.docker.com) ,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool (http://www.dockerpool.com) 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
注:
Docker仓库的概念跟Git(http://git-scm.com)类似,注册服务器可以理解为GitHu这样的托管服务。
4. docker常用命令
1. 新建容器
通過docker laod -i 加鏡像名稱來進行鏡像導入
[root@foundation25 images]# docker load -i ubuntu.tar
# 将镜像导入docker
[root@foundation25 images]# docker images
# 查看docker中已有的镜像
導入後
进行容器的建立
[root@foundation25 images]# docker run -d --name test ubuntu
c585fe434265bd2f22c980c41a0b0b59d0f257b87257fc094a0f94acfa318a06
# 回显的是容器ID
# -d: 后台运行容器并回显容器ID
# -name: 添加容器名,否则会随机生成
# ubuntu: 选定的镜像
[root@foundation25 images]# docker inspect test
[
{
"Id": "c585fe434265bd2f22c980c41a0b0b59d0f257b87257fc094a0f94acfa318a06",
"Created": "2018-08-20T14:15:09.943950268Z",
"Path": "/bin/bash",
"Args": [],
"State": {
..........省略..........
# inspect: Docker对象的最基本信息
3. 查看容器状态
[root@foundation25 images]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation25 images]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c585fe434265 ubuntu "/bin/bash" 10 minutes ago Exited (0) 33 seconds ago test
e29d85249562 ubuntu "/bin/bash" 3 hours ago Exited (0) 3 hours ago test2
# docker ps 查看正在运行的容器
# docker ps -a 查看所有容器
2. 停止容器
可以利用 docker start 命令,直接将一个已经终止的容器启动运行
[root@foundation25 images]# docker stop test
test
通过 docekr stop 可以直接停止容器
相反的 docker start 可以启动一个已经终止的容器
3 docker container 容器管理命令
对容器详细的命令可通过docker cintainer 来进行操作
[root@foundation25 images]# docker container
attach cp diff export kill ls port rename
rm start stop unpause wait
commit create exec inspect logs pause prune restart
run stats top update
具体解释如下:
docker container
命令 | 详解 |
---|---|
attach | 进入一个正在运行中的容器 |
commit | 从容器的更改中创建一个新映像 |
cp | 从宿主主机中拷贝文件到容器中 |
create | 创建一个新容器,但不运行 |
diff | 检查对容器文件系统上的文件或目录的更改 |
exec | 在一个正在运行的容器中执行命令 |
export | 将容器导出到宿主主机中,以tar包的形式 |
inspect | 显示一个或多个容器的详细信息 |
kill | 强制关闭正在运行的容器 |
logs | 获取容器的日志 |
ls | 显示所有容器(默认显示正在运行的容器) |
pause | 暂停一个或多个容器中的所有进程 |
port | 列出容器所有的端口映射 |
prune | 删除所有已停止的容器 |
rename | 重命名容器 |
restart | 重启容器 |
rm | 删除容器,默认只能删除已停止的容器,可添加参数来进行强制删除 |
run | 在新容器中运行命令,与docker run 类似 |
start | 启动容器 |
stats | 显示容器资源使用 |
stop | 停止正在运行的容器 |
top | 显示容器运行的进程 |
unpause | 与paus相对应 |
update | 更新一个或多个容器的配置 |