什么是容器?
• 容器技术已经成为应用程序封装和交付的核心技术
• 容器技术的核心有以下几个内核技术组成:
– CGroups(Control Groups)-资源管理
– NameSpace-进程隔离
– SELinux安全
• 由于是在物理机上实施隔离,启动一个容器,可以像
启动一个进程一样快速
什么是Docker?
• Docker是完整的一套容器管理系统
• Docker提供了一组命令,让用户更加方便直接地使
用容器技术,而不需要过多关心底层内核技术
Docker优点
• 相比于传统的虚拟化技术,容器更加简洁高效
• 传统虚拟机需要给每个VM安装操作系统
• 容器使用的共享公共库和程序
Docker的缺点
• 容器的隔离性没有虚拟化强
• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭
• 监控容器和容器排错是挑战
环境准备:
Docker1:内存4G 要求能上网
Docker2 :内存4G 要求能上网
一、部署
环境准备:
1.安装前准备
• 需要64位操作系统
• 至少RHEL6.5以上的版本,强烈推荐RHEL7
• 关闭防火墙(不是必须)
2.安装Docker
• 软件包列表:
– docker-engine
– docker-engine-selinux
[root@docker02 ~]# yum -y install docker-engine
3.启动docker服务
service docker restart
4.查看服务
[root@docker01 ~]# docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built:
OS/Arch: linux/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built:
OS/Arch: linux/amd64
二、Docker的使用1. docker 镜像操作
docker version //查看版本
docker images //查看镜像
docker search 关键字 //搜索镜像
docker pull 镜像的名字 //下载镜像
docker help 命令 // 查看命令帮助
docker push 镜像名字 //上传镜像
docker save busybox:latest >busybox.tar // 导出镜像
docker load < busybox.tar // 导入镜像
2. 镜像的启动
-i 交互式
-t 终端
-d 后台进程
2.1如果是可以交互的
格式:docker run -it 镜像的名字:标签 镜像里面的命令
[root@docker02 ~]# docker run -it centos /bin/bash //镜像的标签和镜像里的命令都可以省略不写
2.2 如果是服务类的镜像例如Ngixn
[root@docker01 ~]# docker run -d nginx
3.镜像常用命令
– docker history 镜像名字 //查看镜像制作历史
[root@docker01 ~]# docker history centos
– docker inspect 镜像名字 //查看镜像底层信息
[root@docker01 ~]# docker inspect centos
– docker rmi 镜像名字 //删除本地镜像
[root@docker02 ~]# docker rmi busybox
[root@docker02 ~]# docker rmi -f busybox //强制删除镜像 (当此镜像有对应的容器在运行时是不能直接删除镜像的;需要先停掉相关的容器。但此时也还是不能删除;因为相应记录还在 docker -a 可以查看; 所以这里加 -f 可以强制删除;不需要先删除容器)
— docker tag 原来的镜像名字:标签 新镜像名字:标签 // 修改镜像名称和标签
[root@docker02 ~]# docker tag centos:latest ooo:xxx //这里类似与Linux中的硬连接;如果想彻底改名把原先的镜像删除即可
4. 容器常用命令
– docker run //运行容器
[root@docker02 ~]# docker run -it centos
[root@docker02 ~]# docker run -d nginx
[root@docker02 ~]# docker run -itd centos
– docker ps //查看容器列表
[root@docker02 ~]# docker ps //查看正在运行的容器
[root@docker02 ~]# docker ps -a //参看所用的容器信息包括没有运行的
[root@docker02 ~]# docker ps -aq //输出所有容器的ID号
2df019c9f0d4
199d5b54a373
a8fc30bdde68
c9fd618aa436
– docker stop 容器的ID号 //关闭容器
[root@docker02 ~]# docker stop a8fc30bdde68 //这里的ID可以通过ps查看
– docker start 容器的ID号 //启动容器
[root@docker02 ~]# docker start a8fc30bdde68
– docker restart 容器的ID号 //重启容器
[root@docker02 ~]# docker restart a8fc30bdde68
– docker attach|exec 容器的ID号 //进入容器
[root@docker02 ~]# docker exec -it a8fc30bdde68 /bin/bash //这里类似ssh它是单独开了一个进程对原来的进程没有影响可以直exit退出
[root@docker02 ~]# docker attach a8fc30bdde68 //不建议使用这种方式进入进程;连接一个已经运行容器的 pid为1 的进程;这种方式当你直接exit退出的时候整个容器的进程都会死掉;跟run进了一个容器进程直接exit是一样的。如果不想结束需要把容器放入后台(ctrl + pq)
– docker inspect 容器的ID号 //查看容器底层信息
[root@docker02 ~]# docker inspect a8fc30bdde68
[root@docker02 ~]# docker inspect -f "{{.NetworkSettings.IPAddress}}" a8fc30bdde68 //可以过滤出ip
172.17.0.2
– docker top 容器的ID号 //查看容器进程列表
root@docker02 ~]# docker top a8fc30bdde68
– docker rm 容器的ID号 //删除容器
[root@docker02 ~]# docker rm c9fd618aa436 //在运行的情况下是不可以删除的
c9fd618aa436
5.如何修改一个已经运行的nginx的容器的index.html文件
5.1 进入这个容器进程
[root@docker01 ~]# docker exec -it 4795f4d27ea9 bash // 这里徐加一个bash进程不然是进不去的
5.2 找到inxex.html 文件
root@4795f4d27ea9:/# find / -name index.html //由于我们也不知道他的index.html文件放在那里所以采用find查找的方式
/usr/share/nginx/html/index.html
root@4795f4d27ea9:/#nginx -t //也可以找到index.html
/usr/share/nginx/html/index.html
5.3 找到index.html 文件我们就可以愉快的修改它了
root@4795f4d27ea9:/# echo mlgb > index.html
root@4795f4d27ea9:/# ip a //查看ip
5.4.访问
root@4795f4d27ea9:/# exit //由于是exec进去的可以直接退出
[root@docker01 ~]# curl 172.17.0.2 //访问我们查到的ip就可以看到我们修改的内容了
mlgb