Docker学习日志

Docker学习笔记整理

Posted by JC on August 5, 2019

Docker

镜像:静态 类似于文件

容器:动态 有生命周期 类似于运行中的程序

物理网卡是工作在链路层能封装物理报文,在各网络设备之间实现报文转发的组件,而这个功能完全可以在linux之上利用内核当中对二层虚拟设备的支持创建虚拟网卡接口的

Inspect命令查看所有docker对象的详细信息

Docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶添加一个读写层 写时复制(COW):读写层加载的是底层的副本,删除只是对读写层不可见

6种名称空间:UTS User Mount IPC Pid Net

四种网络模型

Close:

Bridge:(Net Bridge,非物理桥,Default网络),通过容器接口连接到docker bridge,获取172.17网段

Open:Host:让容器使用宿主机的网络名称空间(UTS,Net,IPC)

Joined: 两个容器间共享网络名称空间(UTS,Net,IPC)

Volume

Docker-managed Volume

Docker run -it -name bbox1 -v /data busybox

Bind-mount Volume:

Docker run -it -v HOSTDIR:VOLUMEDIR –name bbox2 busybox

Sharing Volumes(复制已存在的卷)

Docker run -it –name bbox13 –volumes-from bbox1 busybox

通过sharing volumes可以建立一个专门用于提供服务的底层支撑架构容器

Dockerfile

Copy:

COPY  <src>…<dest>

COPY  [“<src>”…”<dest>”]

1.Src目录支持通配符,且必须是build上下文中的路径,不能是其父目录中的文件

2.如果<src>是目录,则其内部文件或子目录会被递归复制,但src自身不会复制

3.如果指定了多个src或使用了通配符,dest必须是一个目录且以/结尾,建议Dest使用绝对路径,路径中由空白符时使用第二种格式

ADD: ADD类似于COPY但是支持URL和TAR

如果src是本地的tar文件,他将被展开成目录

url到的tar文件不会被展开

WORKDIR:

WORKDIR /usr/local

ADD nginx-1.15.2.tar.gz ./src

看到相对路径,逆序去上面找WORKDIR

EXPOSE: EXPOSE

只能指定暴露的容器内端口号,因为宿主机的ip和端口是不确定的,写在文件中的端口不会主动暴露,通过run命令中指定-P

暴露所有要暴露的端口。扔可-p暴露未指定的端口

ENV:

<Key><Value>		定义一个

<Key>=<Value>…		可定义多个	

定义环境变量,可被其后的其他指令调用

RUN

用于指定docker build过程中运行的程序

RUN <commend>或
	
RUN [“<executable>”,”<param1>”,”<param2>”]

第一种格式,<commend>通常是一个shell命令,会把你的命令当做shell的子进程来运行,默认先启动shell再传给shell当参数,意味着此进程的PID不为1,不能接受unix信号,docker stop后收不到sigterm信号

第二种格式中的参数是一个JSON数组,其中<executable>为要运行的命令,后面的parmaN为传给命令的选项或参数,然而不会以shell来发起,直接由内核创建,因为不支持所有的shell操作符,

CMD

同RUN命令,二者运行时间点不同,RUN运行于构建镜像文件的过程中,CMD运行于Dockerfile构建出的新镜像启动一个容器时,CMD指令的首要目的在于为启动的容器指定默认要运行的程序,运行结束后容器也将终止,不过CMD可以被Docker,run的命令行选项所覆盖,在dockerfile中可以存在多个CMD命令,但只有最后一个会生效

除了RUN的两种语法格式,还有第三种CMD

[“<param1>”,”<param2>”]

第三种则用于为ENTRYPOINT指令提供默认参数

ENTRYPOINT

跟CMD类似,只是他不会被docker run的命令行选项覆盖

CMD和ENTRYPOINT同时存在时候,CMD会作为参数传递给ENTRYPOINT,就是CMD的第三种方法