什么是容器
- 容器技术已经成为应用程序封装和交付的核心技术
- 容器技术的核心有以下几个内核技术组成:
- Cgroups( Control Groups)-资源管理
- NameSpace-进程隔离
- SELinux安全
- 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
什么是Docker
- Docker是完整的一套容器管理系统
- Docker提供了一组命令,让用户更加方便直接地使 用容器技术,而不需要过多关心底层内核技术
Docker特性
1)Docker优点
- 相比于传统的虚拟化技术,容器更加简洁高效
- 传统虚拟机需要给每个VM安装操作系统
- 容器使用的共享公共库和程序
2)Docker缺点
- 容器的隔离性没有虚拟化强
- 共用Linux内核,安全性有先天缺陷
- SELinux难以驾驭
- 监控容器和容器排错是挑战
部署Docker
1)环境准备
- 需要64位操作系统
- 至少RHEL65以上的版本,强烈推荐RHEL7
- 卸载firewalld
2)安装Docker
-
docker虚拟机配置
2核,1G内存,4台,能访问外网
192.168.1.100repo(yum服务器)
192.168.1.30 registry(容器仓库)
192.168.1.31 docker1(容器主机1)
192.168.1.32 docker2(容器主机2) -
配置yum源
docker软件包位于光盘Rhl7 -extras-.iso中
mkdir /var/www/html/extras
mount -t iso9660 -o ro,loop RHEL7OSP-extras.iso /var/www/html/extras
- 安装Docker(Docker1 and Docker2)
配置yum源
yum -y install docker
systemctl start docker
systemctl enable docker
docker version #查看docker版本信息
ifconfig #如果有docker0网络设备,证明安装成功
Docker镜像
1)什么是镜像
- 在Docker中容器是基于镜像启动的
- 镜像是启动容器的核心
- 镜像采用分层设计
- 使用快照的COW技术,确保底层数据不丢失
- 可以多个容器同时使用
2)Docker Hub镜像仓库
- https://hub.docker.com
- Docker官方提供的公共镜像的仓库(Registry)
] docker search IMAGE_NAME #搜索镜像
NAME #镜像名
OFFICIAL #状态为[OK],代表该镜像为官方镜像,非官方镜像会有安全风险
] docker search busybox
3)镜像操作
] docker help pull
] docker pull 镜像名 #从仓库下载镜像
] docker pull docker.io/busybox
] docker images #查看已有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest 6d5fcfe5ff17 7 weeks ago 1.22 MB
#镜像名 标签 镜像ID 创建时间 大小
] docker help push
] docker push docker.io/busybox #上传镜像到仓库
] docker save docker.io/busybox:latest -o busybox.tar #将镜像导出为tar文件,镜像的名称:标签=唯一标识
] docker load -i busybix.tar #从tar文件导入镜像
] docker history docker.io/centos:lastest #查看镜像制作历史(可以查看镜像层数,启动命令等)
] docker inspect docker.io/centos:lastest #查看镜像底层信息(详细信息)
] docker rmi docker.io/busybox #删除镜像(镜像已启动容器时需要先删除容器)
] docker tag docker.io/busybox:lastest NAME:LABEL #为镜像添加名称和标签
4)容器常用命令
所有针对容器的命令,指定容器的ID来对容器做操作
docker run #运行容器
docker ps #查看容器列表
docker stop #关闭容器
docker start #启动容器
docker restart #重启容器
docker attach|exec #进入容器
docker inspect #查看容器底层信息
docker top #查看容器进程列表
docker rm #删除容器
例:
docker run -i交互式 -t终端 -d后台 #需要区别要启动的容器服务的种类来确定是否将容器放置后台
docker run 参数 镜像名称:标签 启动命令
run = 创建 + 运行 + 连接
docker run -it docker.io/centos:latest /bin/bash
docker run -it docker.io/centos:latest #不写启动命令时,以默认命令启动
docker inspect 镜像名 #查看默认启动命令
docker run -itd docker.io/nginx:latest #如果启动命令为后台运行的服务时,加-d
docker ps
docker ps -a #显示所有容器(包括已停止的)
docker ps -q #只显示容器ID
docker top 容器ID #查看容器正在执行的进程,相当于ps
docker rm 容器ID #删除容器,需要容器已关闭
docker rm $(docker stop 容器ID) #执行stop会返回容器ID,通过$()将返回值传递给rm
docker rm $(docker stop $(docker ps -aq))
docker exec -it 容器ID 启动命令 #以新进程连接
docker attach -it 容器ID 启动命令 #以容器上帝进程的身份连接
使用attach
连接容器,exit退出后,容器将会停止,因为退出时相当于退出了上帝进程,使用快捷键Ctrl+p+q
保持容器运行并退出。使用exec
连接,退出后容器继续运行。