docker commit方式创建镜像
1.导入镜像
2.镜像创建容器并进入查看信息
[root@server1 ~]# docker run -it --name vm2 ubuntu
查看内核版本
查看真机内核
可以看到容器与真机共享内核
3.在容器创建文件后按‘ctrl+d’退出后查看该容器
4.删除rm2然后再次运行运行查看发现文件丢失
- 文件的恢复
1.创建文件退出并在ubuntu的镜像上建立ubuntu:v2镜像,新建立的镜像是在ubuntu的镜像上进行叠加的,可以查看到。
2.删除vm2后以新建的ubuntu:v2镜像运行vm2容器,查看数据是已经恢复了的
当然,如果以ubuntu的镜像上建立的ubuntu:v2镜像中也没有file文件,那么这些文件是不会恢复的。
这种方式建立的镜像无法显示对其进行的操作,所以往往很不安全,我们一般采用dockerfile的方式创建
dockerfile方式创建apache
- 构建纯净的环境,去除其余镜像的影响
[root@server1 ~]# docker rmi ubuntu:v1
[root@server1 ~]# docker rmi ubuntu:v2
[root@server1 ~]# docker rm v1
[root@server1 ~]# docker rm v2
[root@server1 ~]# docker rmi game2048:latest
- 将rhel7镜像导入本地导入
[root@server1 ~]# ls
game2048.tar rhel7.tar ubuntu.tar
[root@server1 ~]# docker load -i rhel7.tar
e1f5733f050b: Loading layer 147.1MB/147.1MB
- 以该镜像建立容器(需要指定shell),并进行相关配置
添加yum源并安装httpd
若无法安装,则执行下列命令后在安装
bash-4.2# rpmdb --rebuilddb
- 使用docker构建httpd
-构建docker目录,配置yum源并建立Dockerfile文件
[root@server1 ~]# mkdir docker
[root@server1 ~]# cd docker
[root@server1 docker]# vim Dockerfile
[root@server1 docker]# cat dvd.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.32.250/cn
gpgcheck=0
[root@server1 docker]# cat Dockerfile
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd
CMD ["/usr/sbin/httpd","-D",“FOREGROUND”]
- 构建httpd镜像
[root@server1 docker]# docker build -t rhel7:v2 .
- 以镜像为容器添加映射端口
[root@server1 docker]# docker run -d --name vv -p 80:80 rhel7:v1
c1a4c8e5421d4a20e66be86f674e7ff04d9391992f2bee4ba8b54941db72c76d
- 给配置文件中加入发布文件后测试
[root@server1 docker]# vi Dockerfile
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd
COPY index.html /var/www/html/index.html
CMD ["/usr/sbin/httpd","-D",“FOREGROUND”] - 重新构建
[root@server1 docker]# docker build -t rhel7:v3 .
[root@server1 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1a4c8e5421d rhel7:v1 “/usr/sbin/httpd -D …” 24 minutes ago Up 24 minutes 0.0.0.0:80->80/tcp vv
[root@server1 docker]# docker rm -f c1a4c8e5421d
c1a4c8e5421d
杀死连接端口的进程
[root@server1 docker]# docker run -d --name vv1 -p 80:80 rhel7:v1
f981ea76ac05f05ad42a27b6e96f112eca35e9ac6ad15f589fd9cd2d891efd00
[root@server1 docker]# cat index.html
aini1wannian
在网页中查看