容器从镜像(images)中来,可以想象成:images是光碟,用光碟给机器装系统、装软件,装好的app就是容器(container)
--------------------------------------------------------------------------
docker run 创建并启动容器,后台会进行以下操作:
1、检查本地是否有image,没有的话会自动去下载,内网的机器就只能从harbor里下载好;
2、利用image创建一个容器,并启动该容器;
3、分配一个文件系统给容器,并在只读的镜像层外挂载一层可读写层,相当于mount一个目录给容器,所以docker的存储要设计好,否则很容易就存储爆掉;
4、从宿主机配置的网桥接口中桥接一个虚拟接口给容器;
5、从网桥的地址池中分配一个IP给容器,大部分是172开头;
6、执行用户指定的应用程序;
7、执行完毕后容器自动终止。
------------------------------------------------------------------------------
容器的命令都以docker container开头,也可以简写,比如docker container ps -a = docker ps -a,但是更清楚一些,新手更明白一些,写脚本也建议这么写。同理,image的命令都以docker image 开头。。。。
从安全的角度出发,带container更安全一些,建议写脚本的时候带上,更直观的指导这些命令用于操作容器。
docker container ps -a 可以看到所有运行、停止的容器
docker container start 容器ID 启动一个已经存在容器
docker container stop 容器ID 停止一个正在运行的容器,停不掉就用kill
docker container rm 容器ID 删除一个已经停止的容器
docker container logs 容器ID 看容器的输出,但只输出一次,用起来不是很方便
docker container run 镜像名或镜像ID
docker container run -it 镜像名或镜像ID /bin/bash -t让docker分配一个未终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开;/bin/bash用的是镜像里的/bin/bash作为bash命令,这个在image里面必须要有。这个命令可以运行容器了以后,自动就进入容器内部,是进入容器的一种方法。exit出来以后,容器就停止了,处于exited状态。
docker container run -d 镜像名或镜像ID 以守护模式(daemon,或者说,在后台运行)运行容器
像centos ubuntu之类的OS baseimage,启动的时候: docker container -it -d 镜像名或镜像ID 这样才能把OS启动起来,并且一直运行不exit。但容器的理念是:一个容器,一个服务。OS baseimage更多的是用来做新镜像用,不需要长时间运行,一般是进去baseimage,做变更,然后commit一个新image。
-------------------------------------------------------------------
docker container exec -it 容器ID /bin/bash 进入一个正在运行中的容器,-it保持标准输入并分配伪终端,/bin/bash和上面的意思一样,是进入容器的推荐方式。
-------------------------------------------------------------------
导出容器,运行、不运行状态的容器都可以导出,便于迁移。导出的是容器快照。
docker container export -o xxx.tar 容器ID
导入容器,其实是导入容器相关的镜像。将导出的tar文件传到另一个环境,先导成image,再从image启动容器。
docker image import xxx.tar 镜像名:tag
docker image import导入容器快照,和docker image load导入镜像存储文件,效果差不多,但是容器快照文件会少历史记录和元数据信息,体积小,另一个信息更全一些,体积也更大。