今天我们开始分享docker的学习使用:
Docker
简介
Docker
是一个开源项目,诞生于
2013
年初,最初是
dotCloud
公司内部的一个业余 项目。它基于 Google
公司推出的
Go
语言实现。 项目后来加入了
Linux
基金会,遵从了
Apache 2.0
协议,项目代码在
GitHub
上进行维护。 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker
的基础是
Linux 容器(LXC
)等技术。 (背景),云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker 趁势而兴。
为什么用
Docker
容器的启动可以在秒级实现,比传统的虚拟机方式要快得多 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker
容器 docker 的出现,让开发
/
测试
/
线上的环境部署,成为便利一条龙。
更快速的交付和部署
对开发和运维(
devop
)人员来说,最希望的就是一次创建或配置,可以在任意地方正 常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直 接使用这个容器来部署代码。 Docker
可以快速创建容器,快速迭代应用程序,并让整个过 程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker
容器 很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
Docker
容器的运行不需要额外的
hypervisor
支持,它是内核级的虚拟化,因此可以实 现更高的性能和效率。
更轻松的迁移和扩展
Docker
容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、 个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外 一个。
更简单的管理
使用
Docker
,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以 增量的方式被分发和更新,从而实现自动化并且高效的管。
对比传统虚拟机总结
Docker
基本概念
Docker
架构
host ---
主机载体
== docker
安装的地方
继承类比:
Class2
extents
Class1
---------------------- Object o = new Class2
--------------------------------------
此时,
o
对象的结构中,有
Class1
的成员结构
image2 extents
image1
----------------------Container c = new image2
-------------------------------------
此时,
c
容器中,有
image1
的文件
Docker
镜像
Docker
镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的
ubuntu
操作系统环境,里面仅安装了
Apache
或 用户需要的其它应用程序。 镜像可以用来创建 Docker
容器。
Docker
提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接 从其他人那里下载一个已经做好的镜像来直接使用。
Docker
容器
Docker
利用容器来运行应用。 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互 隔离的、保证安全的平台。
可以把容器看做是一个简易版的
Linux
环境(包括
root
用户权限、进程空间、用户空 间和网络空间等)和运行在其中的应用程序。
Docker
仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(
Registry
)混为 一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含 了多个镜像,每个镜像有不同的标签(tag
)。 仓库分为公开仓库(Public
)和私有仓库(
Private
)两种形式。 最大的公开仓库是 Docker Hub
,存放了数量庞大的镜像供用户下载。 当然,用户也可以在本地网络内创建一个私有仓库。 当用户创建了自己的镜像之后就可以使用 push
命令将它上传到公有或者私有仓库,这 样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull
下来就可以了。
容器、镜像的运行关系
安装
Docker
CentOS7
CentOS7
系统
CentOS-Extras
库中已带
Docker
,可以直接安装:
查看
docker
版本
docker version
docker info
启动
docker
sudo service docker start
设置随系统启动
sudo chkconfig docker on
Docker
基本操作
容器操作
docker [run|start|stop|restart|kill|rm|pause|unpause]
run/create[
镜像名
]
:
创建一个新的容器并运行一个命令
start/stop/restart
[
容器名
]
:启动
/
停止
/
重启一个容器
kill
[
容器名
]
: 直接杀掉容器,不给进程响应时间
rm
[
容器名
]
:删除已经停止的容器
pause/unpause
[
容器名
]
:暂停
/
恢复容器中的进程
docker [ps|inspect|exec|logs|export|import]
ps
:查看容器列表(默认查看正在运行的容器,
-a
查看所有容器)
inspect
[
容器名
]
:查看容器配置元数据
exec -it [
容器名
] /bin/bash
:进入容器环境中交互操作
logs --since="2019-02-01" -f --tail=10 [
容器名
]:
查看容器日志
cp
path1
[
容器名
]
:path
容器与主机之间的数据拷贝
export -o test.tar
[
容器名
]
/ docker export
[
容器名
]
>test.tar :
文件系统作为一个
tar
归档文件
import test.tar [
镜像名
:
版本号
]:
导入归档文件,成为一个镜像
镜像操作
docker images|rmi|tag|build|history|save|load]
images
:列出本地镜像列表
rmi
[
镜像名:版本
]
:删除镜像
tag [
镜像名:版本
] [
仓库
]/[
镜像名:版本
]
:
标记本地镜像,将其归入某一仓库
build
-t
[
镜像名:版本
] [path]
:
Dockerfile
创建镜像
history [
镜像名:版本
]
:
查看指定镜像的创建历史
save -o xxx.tar
[
镜像名:版本
]
/ save
[
镜像名:版本
]
>xxx.tar
:
将镜像保存成
tar
归档文件
load --input xx.tar / docker load<xxx.tar :
从归档文件加载镜像
容器创建详解
交互式创建容器并进入:
docker run -it --name centos centos /bin/bash
(前台进程)
------------------------exit
退出也关闭容器
; Ctrl+P+Q
退出不关闭容器
后台启动容器:
docker run -d --name nginx nginx
进入已运行的容器:
docker exec -it nginx /bin/bash
查看容器的元数据:
docker inspect nginx
绑定容器端口到主机:
docker run -d -p 8080:80 --name nginx nginx:latest
挂载主机文件目录到容器内:
docker run -dit -v /root/peter_dir/:/pdir --name cent centos
复制主机文件到容器内:
docker cp anaconda-ks.cfg cent:/var