Docker容器入门操作介绍
Docker介绍
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker在操作系统层实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
Docker运行结构
Docker是一个C/S结构的项目,有Docker Client、RESTAPI、Docker Server、images、container、 volumes、network组成。
- Docker Client:Docker客户端命令工具。
- REST API:提供标准的RESTful接口。
- Docker Server::Docker daemon的主要组成部分,接收用户从Docker Client调用REST API发送过来的请求。
- images:docker镜像,是Docker run的原材料。
- container: Docker运行的内容,是独立存在的。
- data volumes: 通过数据挂载的方式,实现数据共享;
- network:用户容器与外部、容器之间的通信,常用的方法有端口映射、link等。
Docker的优点:
- 灵活:即使是复杂的应用程序也可封装。
- 轻量级:容器利用并共享主机内核。
- 便携式:您可以在本地构建,部署到云上并在任何地方运行。
- 可扩展性:您可以增加和自动分发容器副本。
- 可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。
主机虚拟化和容器的区别
一个容器中运行原生Linux和共享主机与其它容器的内核,它运行一个独立的进程,不占用任何其它可执行文件的内存,使其轻量化。相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序虚拟访问主机资源。一般来说,虚拟机提供的环境比大多数应用程序需要的资源多。
虚拟机
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真丝系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其它部分毫无影响。
虚拟机的缺点:
- 资源占用多: 虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1M,虚拟机依然需要几百MB的内容才能运行。
- 冗余步骤多: 虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
- 启动慢: 启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用陈故乡才能真正运行。
容器
由于虚拟机存在这个缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)。 Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机又很多优势。
- 启动快: 容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
- 资源占用少: 容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所以资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
- 体积小: 容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
Docker与OpenStack对比
类别 | Docker | OpenStack |
---|---|---|
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统几乎一致 | VM会占用一些资源 |
镜像体积 | 镜像是MB级别 | 虚拟机镜像GB级别 |
管理效率 | 管理简单 | 组件相互依赖,管理复杂 |
隔离性隔 | 离性高 | 彻底隔离 |
可管理性 | 单进程、不建议启动SSH | 完整的系统管理 |
网络连接 | 比较弱 | 借助Neutron可以灵活组件各类网络架构 |
Docker安装部署
1 | 环境准备 |
Docker基础命令操作
获取镜像
1 | docker search centos |
查询镜像
1 | docker images |
删除镜像
1 | docker rmi IID |
导入导出镜像
1 | docker image save nginx >/opt/nginx.tar.gz |
容器体验
1 | docker run hello-world |
守护式启动
1 | # 1.交互式启动容器+Ctrl+p+q |
容器网络访问
1 | # 指定映射(docker 会自动添加一条iptables规则来实现端口映射) |
容器的其他管理
1 | docker ps -a -q -l |
数据卷管理
1 | docker run -d -p 8083:80 --name "http8083" -v /opt/Volume/httpd:/usr/local/apache2/htdocs httpd |
数据卷容器
1 | docker run -it --name "httpd_volumes" -v /opt/Volume/httpd_volume/conf:/usr/local/apache2/conf -v /opt/Volume/httpd_volume/html:/usr/local/apache2/htdocs centos:6.9 /bin/bash |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 王先森!
评论