自己整理的docker常用目录和知识(持续更新完善)

梦想的初衷 提交于 2020-02-26 16:30:45

目录

1.docker简介

2.docker安装

3.docker常用命令

4.docker镜像

5.docker容器数据卷

6.dockerFile


 

 

 

1.docker简介

2.docker安装

3.docker常用命令

1.帮助命令

查看版本信息:docker version

显示 docker 系统信息,包括镜像和容器数:docker info

帮助:docker [选项] --help

2.镜像命令

docker images:查看本地镜像

docker search [功能] 镜像名称:搜索镜像

docker pull 镜像名称[:Tag] :下载某个镜像,tag表示版本号,如docker pull tomcat:7.0

docker rmi [选项] 镜像ID/镜像名:tag:删除某个镜像,可以同时删除多个镜像

docker rmi -f $(docker images -qa):-f表示全部删除,-q表示显示镜像id,-a表示显示全部

和git一样,docker也有commit和push

docker commit -a="作者名" -m = ”附加信息“ 容器id  新建的镜像名/版本 

3.容器命令

docker run [功能选项] 镜像:新建并启动容器   

    --name:为容器指定一个名字,不指定则分配一个默认名字
    -d:后台运行,以守护式运行
    -it:以交互模式运行容器
    -p:指定端口映射,-P表示随机分配端口映射

端口映射:

 

docker ps:列出当前运行的容器,和linux ps命令类似

退出容器:exit(容器停止退出)、ctrl+p+q(容器不停止退出)

启动容器:docker start 容器id/容器名称

停止容器:docker stop 容器id/容器名称

重启容器:docker restart 容器id/容器名称

强制退出容器:docker kill 容器id/容器名称

删除已经停止的容器:docker rm 容器id/容器名称

 

守护式容器:

1.docker run -d 容器名:docker容器在后台执行时,必须有一个前台进程,如:

2.查看系统日志

-t是时间戳;   -f 跟随系统最新日志显示;   --tail  数字 显示多少条  

3.查看容器内运行的进程:docker top 容器id

4.查看容器内部细节:docker inspect 容器id

5.进入正在运行的容器并以命令行交互

(1)docker attach 容器id:直接进入容器终端,不会启动新的进场

(2)docker exec -it 容器id bashShell:在容器中打开新的终端,并且可以启动新的进程

6.从容器中拷贝文件到主机:docker cp 容器id:文件路径 主机路径

 

4.docker镜像

镜像可以看做是多个镜像层叠加起来的文件系统通过union实现

Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

采用分层结构的最大好处是共享资源,多个镜像是基于相同的base构建的,那么宿主机上只需保存一份base。

镜像都是可读的,当一个容器加载时,一个可写层被加载到镜像层的最顶部,这一层被称为”容器层“,而容器层下面的被称为“镜像层"

 

5.docker容器数据卷

1.介绍

目的:

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,

那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。卷设计的目的是数据持久化,完全独立于容器的生命周期,卷不属于联合文件系统。

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

2.数据卷

直接命令添加:docker run -it -v 宿主机绝对路径:容器内路径 镜像名

dockerFile添加:VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明:出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

Dockerfile文件内容

#volume test
FROM centos
VOLUME ["/test/dir1","/test/dir2"]
CMD echo "success"
CMD /bin/bash

编译dockerFile:

docker build -f dockfile -t 新的镜像 .

查看容器卷挂载在宿主机的目录:docker inspect 容器id

如图可以看到对应的source目录

遇坑:

1.末尾的小数点

2.编译dockerfile时直接使用类似于docker build +路径(/mydocket/Dockerfile) 来进行编译,这样会导致递归编译整个目录(包括与mydocket同级目录),开始编译达到了10多个g,正确做法是进入到最底层目录,直接编译文件,而不是文件的绝对路径docker build -f  /mydocket/Dockerfile进行编译

3.数据卷容器

定义:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

容器间的传递共享

docker run -it --name 子容器名 --volumes-from 父容器名 镜像名

所有子容器数据与父容器以及父容器的其它子容器同步

6.dockerFile

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!