容器:
是一个独立的空间,与虚拟化类似。但是虚拟化可以虚拟OS,使用容器不能虚拟OS。主要包括以下三部分:cgroups资源管理,namespace进程隔离,selinux安全。
namespace隔离:用户命名空间hostname隔离,网络命名空间隔离,文件系统命名空间隔离,进程命名空间隔离,信号量命名空间隔离。
Docker:
容器技术的一个应用,是是实现容器功能的软件,目前可以使用的容器技术有很多,docker只是其中之一。使用共享的公共库和程序(内核)。
容器的底层必须相同,例如:linux的容器只能是linux,不能是unix
容器的隔离性不如虚拟化
对于linux容器而言各个容器之间共享linux内核,安全有缺陷
selinux难以使用
监控和排错比较麻烦
一、安装部署Docker:
1、配置yum源:
使用 rhel7-extras.iso这个镜像
2、安装软件包:
yum -y install docker
systemctl start docker
systemctl enable docker
启动容器之后会多出一个名为docker0的交换机(虚拟交换机),本机上所有的容器通过这个容器交换机进行通信。
二、Docker镜像:
容器是基于镜像启动的,镜像存储在仓库当中
镜像相当于后端盘,使用cow技术,容器相当于前端盘(一层一层覆盖)
对前端盘的修改不会影响到后端盘。
三、Docker命令:
1、docker images #查看可以使用的镜像
2、docker search nginx #在仓库中搜索nginx相关镜像
3、docker pull docker.io/nginx #下载镜像,docker.io/nginx是搜索到的镜像名字
4、docker save docker.io/nginx:latest -o mynginx.tar #备份
# 容器名:标签名-->docker.io/nginx:latest 是一个镜像的唯一标识符
# -o 表示输出,容器的备份实质上是将容器打成一个tar包
5、docker load -i mynginx.tar #恢复备份的镜像
6、docker ps [-a] [-qa] #查看系统中正在运行的容器,a全部,qa只显示容器id
7、docker run -it docker.io/nginx:latest /bin/sh #根据镜像创建容器,并运行
# 根据镜像docker.io/nginx:latest创建了一个容器并运行,每次使用这个命令创建的都是一个全新的镜像
# /bin/sh 指定了容器运行时候的解释器
# docker run 的参数:
# -t:表示再tty终端运行
# -i:交互式运行的
# -d:在后台运行
# 一般使用 -it 或者 -itd
8、docker history docker.io/nginx:latest #查看镜像制作历史,封装了多少层
9、docker inspect docker.io/nginx:latest #查看镜像的详细信息
# Env:表示环境变量
# Cmd:容器启动时执行的命令
10、docker rm 容器id #删除容器,通过docker ps -a查看容器id,运行中的容器不能删除
11、docker rmi docker.io/nginx:latest #删除镜像,在此之前应该删除容器。
12、docker start | stop | restart 容器id #启动 | 关闭 | 重启容器
13、docker top 容器id #查看容器的进程信息
# 在容器中启动一个服务,实际上就是在主机上开启一个进程,主机可以查看这个进程
# 在虚拟机中启动一个进程,在主机上是看不到的(完全隔离)
14、docker attach 容器id #进入容器,执行exit后关闭容器,通常用于调试和查看报错信息
# ctrl + p + q #先按p在按q,容器退出不关闭容器
15、docker exec [-it | -itd] #进入容器,执行exit后容器在后台运行,不关闭
在centos的docker中,只有pid=1的用户在运行系统
systemctl start xxx 这个命令是由用户systemctl启动的,但是在docker中没有这个用户,因此需要使用服务本身的启动命令来启动服务,systemctl这个用户只是对这个服务本身的启动命令进行了统一的管理。
找/usr/lib/systemd/system/xxx.service
写总结的第七十三天!!!