镜像(Image
)和容器(Container
)的关系,就像是面向对象程序设计中的 类
和 实例
一样,镜像是静态的定义,容器是镜像运行时的实体。
容器的生命周期,包括以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在host宿主执行的进程不同,他有独立的root
文件系统、自网络配置、用户啊等等。他和宿主一般是隔离的,基本就像一台独立的系统差不多。
容器运行时,其实是在它的基础镜像上创建了一个容器的存储层,这个存储层呢,就是比如说你在这个新的虚拟机上还会做很多操作,你所做的事情,都需要记录在这个容器存储层中,要么你想想你停下了一个容器再重新启动,就会丢失了这些你的操作。
容器被remove时,容器存储层也会消失。
然而对文件写入操作,都应该使用数据卷(Volume).remove了容器之后呢,这个卷轴是不会被删除的,所以你想要清空,需要你自己再去把他的这个在宿主上的volume删除。
关于容器的删除呢这里举个例子,可以举一个httpd的例子。
1.搜索有apache的docker image:
docker search httpd
docker search httpd
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/httpd The Apache HTTP Server Project 2856 [OK]
docker.io docker.io/centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or b... 30
docker.io docker.io/centos/httpd 28 [OK]
docker.io docker.io/salim1983hoop/httpd24 Dockerfile running apache config 2 [OK]
2.拉取這個image:默認tag應該是httpd
docker pull docker.io/httpd
3.查看拉去的鏡像:docker images httpd
[root@dw3370 ~]# docker images httpd
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/httpd latest c562eeace183 10 days ago 165 MB
4.運行鏡像,docker run
鏡像運行了后就可以有一個runtime的容器啓動了,就是說你的這個虛擬機啓動了。
sudo docker run -itd
--name test_web_server
-p 8085:80
-v /home/user/website/:/usr/local/apache2/htdocs/
docker.io/httpd:latest
-p 8085:80,意思是端口號的映射,<host_port>:<容器内apache的port>
-v /home/user/website/:/usr/local/apache2/htdocs/, 這是docker重要的volume的概念。<host_路徑>:<容器内的路徑>。
5.之后就可以docker ps,列出所有启动状态的容器。
6.容器的启动日志
docker logs <container_id>
6.进入容器内部的bash进行修改和查看。
docker exec -it <container_id> /bin/sh
退出 exit
7.容器的停止,删除
docker stop
docker remove
8.卷轴的删除,才算清理干净,就是把
-v /home/user/website/:/usr/local/apache2/htdocs/
/home/user/website/这个删除
9.提交镜像
docker commit -m="has update" -a="runoob" <容器_id> image_name/ubuntu:v2