Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。
Docker 支持三种不同的镜像层次存储的 drivers:aufs、devicemapper、btrfs ;
Aufs:
AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚
拟 文 件 系 统 下 (unite several directories into a single virtual filesystem) 的 文 件 系 统 。 Aufsdriver 是 docker 最早支持的 driver,但是 aufs 只是 linux 内核的一个补丁集而且不太可以会被合并加入到 linux 内核中。但是由于 aufs 是唯一一个storage driver 可以实现容器间共享可执行及可共享的运行库, 所以当你跑成千上百个拥有相同程序代码或者运行库时时候,aufs是个相当不错的选择。
Device Mapper:
Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略 ( 详
见:http://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html) 。Device mapper driver 会创建一个 100G 的简单文件包含你的镜像和容器。每一个容器被限制 在 10G 大 小 的 卷 内 。 ( 如 果 想 要 调 整 , 参考 :http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/ 。 中 文 译 文 :http://zhumeng8337797.blog.163.com/blog/static/100768914201452405120107/ )你可以在启动 docker daemon 时用参数-s 指定 driver:docker -d -s devicemapper ;
Btrfs:
Btufs driver 在 docker build 可以很高效。但是跟 devicemapper 一样不支持设备间共享存
储(文档里是 does not share executable memory between devices)。
在 没 有 aufs 支 持 的 linux 发 行 版 本 上 (CentOS,opensuse 等 ) 安 装 docker 可 能 就 使 用 了devicemapper driver。
################################开始实验
系统版本为rhat7.3
server1为172.25.16.1
- ######################1.在server1下安装docker
安装docker
安装包下载提取码ggc9
安装所有软件
yum install -y *
开启服务
systemctl start docker
在安装好docker后,linux系统会为docker容器分配一个ip
查看版本
docker version
docker宿主机的信息
docker info
- ##################2.在server1上docker上运行一个容器进程
我们可以尝试加载一个可以从浏览器打开的小游戏,见识一下docker的威力
一些封装好的docker镜像,提取码:e4yf
进入下载好的目录,这里我命名为images
cd images
导入小游戏镜像
docker load -i game2048.tar
在后台运行一个名为game,镜像名为game2048,端口映射在8080的docker进程
docker run -d --name game -p 8080:80 game2048
查看目前所有的docker进程
docker ps -a
如果打错了,先停止进程再删除进程
docker stop 5f576b18a058
docker rm 5f576b18a058
在真机浏览器连接
172.25.16.1:8080
可以开始玩了
- #########################3.docker的基础命令
- docker load -i ubuntu.tar 导入镜像
- docker run -it --name vm1 ubuntu 创建容器(以ubuntu镜像为模板)
- docker ps 查看容器状态
- docker ps -a 查看容器状态(包括不活跃的容器)
- docker attach vm1 连接容器
- docker top vm1 查看容器进程
- docker logs vm1 查看容器指令输出 -f 参数可以实时查看
- docker inspect vm1 查看容器详情
- docker stats vm1 查看容器资源使用率
- docker diff vm1 查看容器修改
- docker stop vm1 停止容器
- docker start vm1 启动容器
- docker kill vm1 强制干掉容器
- docker restart vm1 重启容器
- docker pause/unpause vm1 暂停/恢复容器
- docker rm vm1 删除容器
- docker ps -a 查看所有的容器
- docker ps 查看所有的正在运行的容器
- docker images 查看已经导入的镜像
- docker pull nginx 从公有库下载nginx
- docker run -d --name game -p 8080:80 game2048 运行指定的镜像
-d 后台运行
-p 8800:80 是指定对外暴露的端口 容器内部用80 对应外部的8800 代理一样
--name指定容器的名字 最后的nginx 代码要运行的镜像名字
有tag的加上tag 如 game2048:xxx
默认为latest 然后访问宿主主机地址+8800端口
- docker run -it --name vm1 ubuntu
-i:交互
-t:终端
- docker run -it --name vm1 nginx bash 加一个bash可以调出shell
- docker container exec -it vm1 bash 后台开启时调动shell的方法
- docker export vm1 > vm1.tar 导出镜像
- docker import vm1.tar image 导入镜像
- ####################4.快速搭建nginx镜像
导入镜像
docker load -i nginx.tar
在后台运行一个名为vm1的nginx镜像,并且映射到8081端口
docker run -d --name vm1 -p 8081:80 nginx
真机浏览器连接172.25.16.1:8081
server1里写发布页
mkdir /docker
cd /docker/
vim index.html
复制到容器里
docker cp index.html vm1:/usr/share/nginx/html
真机浏览器连接172.25.16.1:8081
我们也可以在创建进程的时候就添加这个发布页文件
先删除刚才的进程
docker stop f331d35476cd
docker rm f331d35476cd
修改一下发布页,把他和上面的区别开
vim index.html
docker命令里加上-v可以在创建的时候就添加某个文件
docker run -d --name vm1 -v /docker/:/usr/share/nginx/html -p 8081:80 nginx
真机浏览器连接172.25.16.1:8081
- #####################5.docker创建一个交互式容器
导入镜像
docker load -i ubuntu.tar
创建一个vm2的镜像,-it表示打开交互式docker界面(ubuntu自带,rhel镜像需要在it后面再加bash)
docker run -it --name vm2 ubuntu
如何退出
ctrl+pq 不停止容器,后台运行
ctrl+d 直接结束容器,释放内存