一.概念解释
1.镜像的分层结构
- 共享宿主机的kerne
- base镜像提供的是最小的Linux发行版
- 同一docker主机支持运行多种Linux发行版
- 采用分层结构的最大好处是:共享资源
2.Copy-on-Write可写容器层
- 容器层以下所有镜像层都是只读的
- docker从上往下依次查找文件
- 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
- 一个镜像最多127层
3.镜像的构建
docker commit 构建新镜像三部曲:
- 运行容器 docker run -it --name test busybox
- 修改容器(以下命令在容器内运行) echo helloworld > testfile
- 将容器保存为新的镜像 docker commit test test:v1
使用docker commit构建镜像的缺点:
- 效率低、可重复性弱、容易出错
- 使用者无法对镜像进行审计,存在安全隐患
4.ubuntu系统简介
centos与ubuntu的用法区别:
centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。 在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码)
在线安装软件中,centos使用的是yum命令,而ubuntu中使用的是apt-get命令。除此之外yum中还有一个从软件源中搜索摸个软件的方法:yum search + 软件名
centos是来自于redhat,所以centos支持rpm格式的安装,而ubuntu显然是不支持的
有某条命令,只有centos支持,Ubuntu不支持,在转移的过程当中运维就得想办法解决这样的问题,这时候要是有docker我们就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
二.利用docker使ubuntu在centos上的应用
1.导入ubuntu镜像
[root@server1 ~]# docker load -i ubuntu.tar
56abdd66ba31: Loading layer 196.8MB/196.8MB
9468150a390c: Loading layer 208.9kB/208.9kB
11083b444c90: Loading layer 4.608kB/4.608kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
Loaded image: ubuntu:latest
2.为ubuntu创建容器,可以看到与系统共用一个内核,并且通过桥接docker0和内核建立通信.
3.在退出之后查看出现docker0桥接,如果不显示桥接命令可以安装桥接相应的软件
查看brctl命令所需安装包并且安装:
[root@server1 ~]# yum install -y bridge-utils.x86_64
[root@server1 ~]# ip a
4.建立文件并且按ctrl+d强制退出,查看时显示该容器不可用,但是查看所有容器时可以看到刚刚强制退出的容器
ctrl +qp可以再次进入,ctrl+d推出后就进不了了
三.容器的恢复
1.连接vm1(此处不需要开启docker),在容器ubuntu中创建5个文件
[root@server1 ~]# docker attach vm1
root@59ba3c5e1616:/#
root@59ba3c5e1616:/# ls
root@59ba3c5e1616:/# touch file{1..5}
root@59ba3c5e1616:/# ls
#使用exit关闭docker
root@59ba3c5e1616:/# exit
2.退出容器后使用查看docker的进程,发现此时没有ubuntu,说明已经关闭
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server1 ~]# docker ps -a #使用参数-a可以发现ubuntu,因为其既可以显示正在运行的容器,也可以显示关闭了的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a56aaa003df ubuntu "/bin/bash" 39 seconds ago Exited (0) 13 seconds ago vm1
3.开启容器vm1并连接,此时发现容器内的内容没有变化
[root@server1 ~]# docker start vm1
vm1
[root@server1 ~]# docker attach vm1
root@1a56aaa003df:/#
root@1a56aaa003df:/# ls
bin etc file3 home media proc sbin tmp
boot file1 file4 lib mnt root srv usr
dev file2 file5 lib64 opt run sys var
root@1a56aaa003df:/# exit
在容器中写内容(保存)
1.在原来镜像的基础上新建一个读写层
[root@server1 ~]# docker images
-m表示说明,ubuntu:v2中的v1表示以v3的方式
[root@server1 ~]# docker commit -m "add files" vm1 ubuntu:v2
[root@server1 ~]# docker images
2.查看新建的ubuntu分层结构
3.删除容器vm2,再次运行新建的读写层时,发现此时内容没有丢失
[root@server1 ~]# docker rm vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu:v2
root@c5c71f83f7db:/#
root@c5c71f83f7db:/# ls
#为了使环境干净,删除掉10个文件后并退出
root@c5c71f83f7db:/# rm -f file*
root@c5c71f83f7db:/# ls
root@c5c71f83f7db:/# exit