Docker 安装
- Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用 cgroup 实现资源限制。
- Docker 支持三种不同的镜像层次存储的 drivers: aufs、devicemapper、btrfs ;
- 安装docker和相关依赖性
- 打开docker服务
- 通过查看docker宿主机的信息来确定docker是否安装好
- 在安装好docker后,linux系统会为docker容器分配一个ip,利用ip addr中查看docker0的ip
docker的管理
# docker load -i ubuntu.tar 导入镜像
# docker run -it --name vm1 ubuntu bash 创建容器
# docker ps -a 查看容器状态
# docker attach vm1 连接容器
# docker top vm1 查看容器进程
# docker logs vm1 查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1 查看容器详情
# docker stats vm1 查看容器资源使用率
# docker diff vm1 查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done" 后台运行
# docker stop vm1 停止容器
# docker start vm1 启动容器
# docker kill vm1 强制干掉容器
# docker restart vm1 重启容器
# docker pause/unpause vm1 暂停/恢复容器
# docker rm vm1 删除容器
# docker export vm1 > vm1.tar 导出容器
# docker import vm1.tar image 导入容器为镜像 image
# docker rmi ubuntu 删除镜像
镜像管理
- 镜像的分层结构
- 共享宿主机的kernel
- base镜像提供的是最小的Linux发行版
- 同一docker主机支持运行多种Linux发行版
- 采用分层结构的最大好处是:共享资源
- Copy-on-Write 可写容器层
- 容器层以下所有镜像层都是只读的
- docker从上往下依次查找文件
- 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
- 一个镜像最多127层
- 镜像的构建
- docker commit 构建新镜像三部曲
- 运行容器
- 修改容器
- 将容器保存为新的镜像
- 镜像的缺点
- 效率低、可重复性弱、容易出错
- 使用者无法对镜像进行审计,存在安全隐患
示例
- 搭建一个网页版2048小游戏
- 导入镜像game2048.tar
- 查看镜像已经导入
- 后台运行镜像创建容器,并指定映射端口[80(容器内):80(容器外)]
- 在本机浏览器中输入容器网址ip,在网页可以看到小游戏界面
- 查看容器状态
- 利用docker创建一个交互式容器 ubuntu 并进行测试
- 在docker中安装ubuntu:
docker load -i ubuntu.tar
- 查看docke的镜像:
docker images
- 运行ubutun:
docker run -it --name vm2 ubuntu
ubuntu这是一个系统,查看其内核:uname -r 是和物理机共用一个内核的,而且ip show 会看到自己生成一个ip–>按ctrl+q+p退出
真机内核:
ubuntu内核:
- 查看ip:
ip addr show
- 此时只有进入的端口,没有出去的,所以要安装桥接:(在物理机上)查看桥接软件:
rpm -qf /sbin/brctl
- 安装:
yum install -y bridge-utils-1.5-9.el7.x86_64
- 此时再查看:
brctl show
- 查看docker状态,已经有vm2:
docker ps
- 当退出docker进程,重新进入时: docker attach vm2
–> 创建文件以做测试,–> ctrl+d关闭退出
- 此时查看vm2进程是没有的,因为是exit退出,处于非活跃状态:docker ps
- 查看非活跃状态时会发现vm2:docker ps -a
- 这时要重新进入vm2,需要先打开:
docker start vm2
- 进入:docker attach vm2
- 删除docker的vm2进程:
docker rm vm2
- 用-a查看,此时也没有了vm2进程:
docker ps -a
- 但是镜像还存在: docker images
- 重新在docker中运行加载ubuntu:
docker run -it --name vm2 ubuntu
–>此时进入后查看ls,文件没有了。
- 查看ubuntu镜像存在:docker images ubuntu
- 查看ubuntu的历史分层结构: docker history ubuntu
- 重新进入ubuntu:
docker attach vm2
–>创建文件做测试–>ctrl+d关闭退出
- 查看,此时vm2进程还存在,处于非活跃状态: docker ps -a
- 重新给ubuntu创建镜像为ubuntu:v1:
docker commit -m "add files" vm2 ubuntu:v1
- 查看创建的镜像已存在: docker images
- 删除vm2:
docker rm vm2
- 运行 ubuntu:v1:
docker run -it --name vm2 ubuntu:v1
–>ls查看,文件还存在–>删除创建的文件 -->ctrl+d关闭退出
- 重新给ubuntu创建镜像为ubuntu:v2:
docker commit vm2 ubuntu:v1
- 查看创建的镜像已存在: docker images
- 删除vm2:
docker rm vm2
- 运行 ubuntu:v2:
docker run -it --name vm2 ubuntu:v1
–>ls查看,文件不存在