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

目录

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常用目录和知识(持续更新完善)_第1张图片

 

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.查看系统日志

自己整理的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目录

自己整理的docker常用目录和知识(持续更新完善)_第3张图片

遇坑:

1.末尾的小数点

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

自己整理的docker常用目录和知识(持续更新完善)_第4张图片

3.数据卷容器

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

容器间的传递共享

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

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

6.dockerFile

1.介绍

定义:dockerfile是docker镜像的构建文件,由一系列命令和参数构成的脚本。

dockerFile、docker镜像、docker容器三者的关系:

dockerFile面向开发,是docker镜像的原材料;docker镜像是软件的交付品;容器设计部署和运维,是软件的交付态。

 

基础知识:

1.每个保留字必须为大写字母且后面至少跟随一个参数

2.指令从上到下执行

3.每条指令创建一个新的镜像层,并对镜像进行提交

 

执行过程:

1.从基础镜像运行一个容器

2.执行一条指令并对镜像层进行修改

3.提交一个新的镜像层

4.基于刚提交的镜像创建一个新的容器

5.继续执行下一条指令

 

2.dockerFile的体系结构

1.FROM : 基础镜像
2.MANTAINER:镜像维护作者名和邮箱
3.RUN:容器构建需要的命令
4.EXPOSE:暴露端口
5.WORKDIR:登录后默认的工作目录
6.ENV:构建镜像过程中设置的环境变量
7.ADD:将宿主机目录下的文件拷贝进镜像并且会自动处理url和解压tar压缩包
8.COPY:将从构建上下文目录中(源路径)的文件/目录复制到新的一层的镜像内的(目标路径)位置
9.VOLUME:容器数据卷
10.CMD:指定容器启动时需要运行的命令,dockerFile中可以有多个cmd指令,但只有最后一个生效,cmd会被docker run之后的参数替换
11.ENTRYPOINT:指定一个容器启动时要运行的命令,可以有多条,都会生效
12.ONBUILD:当构建一个被继承的dockerFile时的运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(docker,docker)