什么是容器?
容器技术已成为应用程序封装和交付的核心技术。
容器技术的核心由一下几个内核技术组成:
- Cgroups (control groups) 资源管理
可以限制某个服务的CUP,内存的使用量 - Namespace 进程隔离
命名空间的原则----实施隔离 - SELinux 安全
基于文件的限制----文件及权限
由于是在物理机上实施隔离,启动一个容器,可以向启动一个进程一样快速。
什么是docker?
- Docker是完整的一套容器管理系统。
- Docker提供一组命令,让用户更加方便直接的使用容器技术,而不需要过多关心底层内核技术。
docker与虚拟机的区别
-
虚拟机是在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;
-
Docker容器是在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用,不需要启动系统。
容器使用的是共享的后端盘,且创建的容器是基于镜像启动的,镜像采用分层设计,每次创建都使用快照技术,确保底层数据不丢失。
容器的优点是更加简单高效,缺点是隔离性交虚拟化弱;
共用linux内核,安全性有缺陷;
监控容器和容器拍错较困难;
安装docker
注意环境:
- 1.需要64位操作系统
- 2.RHEL版本6.5以上,内核3.0以上
- 3.卸载防火墙
安装docker:
-
创建虚拟机
-
设置主机名和IP
-
配置包含docker的yum源
yum -y install docker systemctl restart/enable docker
容器6大命名空间:
- uts 主机名的命名空间,可以有不同的主机名hostname
- net 网络命名空间,可以隔离出独立的网络 ifconfig
- pid 进程命名空间,容器只能看见该容器内的进程 pstree
- user 用户命名空间,容器内有自己的用户名空间 /etc/passwd
- ipc 信号向量命名空间,容器里的信号只限制在容器里,但真机的信号可以穿透容器 kill
- mount 文件命名空间,可以随便删除而真机不受影响 ls
docker命令
docker官方会提供公共镜像的仓库(registry)
可以通过命令查找:
docker search 软件包名
每一个镜像文件都包含容器名称和标签
- Docker images
查看镜像列表 (查看名称,标签,ID) - Docker history 镜像名:标签
查看镜像制作历史(摞了很多层后端盘) - Docker inspect 镜像名:标签
查看镜像底层信息(可以看启动命令) - Docker pull 镜像名:标签
下载镜像 - Docker push 镜像名:标签
上传镜像 - Docker rmi 镜像名称:标签
删除本地镜像 - Docker save 镜像名 -o 文件名.tar
镜像另存为tar文件 - Docker load -i 文件名.tar
将文件导入到镜像 - Docker search 镜像名:标签
搜索镜像 - Docker tag 旧镜像名称:标签 新镜像名称:新标签
修改镜像名称
注意:此处修改名称和标签相当于创建了一个软连接,他们基于相同的后端盘而建立,所以image ID相同。 删除时必须先删除容器才能再删除镜像。
容器常用命令
-
创建一个新的容器并运行起来
Docker run -it 镜像名:标签 命令
可加选项:
-i 交互式
-t tty终端 打开一个交互式终端
-d 放后台运行
命令通常为:/bin/bash -
查看运行中的容器列表
Docker ps
CONTAINER ID IMAGE COMMAND
229203e6f739 nginx “nginx -g 'daemon off”
生成一个容器ID
可加选项:
-a 显示全部ID
-q 只显示ID
-
启动/关闭/重启
Docker start/stop/restart 镜像名:标签 -
进入容器
Docker attach|exec 容器ID
值得注意:
attach 容器ID
表示退出后直接关闭容器,(利用ctrl+p+q也可以实现退出继续运行)
exec -it 容器ID /bin/bash
退出后放在后台运行,(常选用这一项) -
查看容器底层信息
Docker inspect 容器ID -
查看容器进程列表 (相当于在容器外查看容器内的ps结果)
Docker top 容器ID -
删除容器
Docker rm 容器ID
注意:正在运行的容器不能删除