Docker随记

247 阅读3分钟

docker两个重要概念

镜像

镜像可以当做一个模板,是用来创建容器的。一个镜像包含一个程序所要启动的最小环境,可以看成是一个只含有一个程序的虚拟机。

容器

容器是由镜像运行而来,是有状态的。一个容器才是一个真实运行的实例。

基本命令

基本命令文档

镜像原理

概念

基于联合文件系统(UnionFS)

镜像是由一层一层的文件组成的,共用内核文件(bootFS)一个操作系统最基本的文件。

在这之上,可以根据不同的需要,再搭建不同的文件(rootFS),相同的文件可以复用。

这样一个镜像的组成就是一个最基本的内核文件,加上多个不同的文件,像是搭积木一样。(一个搭建好的镜像是不可以再修改的)

镜像到容器,容器到镜像

镜像运行就是一个容器。

运行好的容器是可以配置修改的,这修改的内容可以当成一层新的文件加在镜像之上,这样又可以生成一个新的镜像。像一个越搭越高的楼。

容器数据卷

容器和宿主机之间可以通过挂载进行数据同步。

运行容器时指定挂载目录

# 会将容器内目录与指定的宿主机目录进行挂载,双向数据同步
-v /宿主机目录:/容器内目录

# 匿名挂载,容器内目录会被挂载到宿主机/var/lib/docker/volumes目录下的一个随机名文件夹中
-v /容器内目录

# 具名挂载,容器内目录会被挂载到宿主机/var/lib/docker/volumes目录下的一个指定名称文件夹中
-v 具体名称:/容器内目录

# 容器之间数据挂载 
--volumes-from 容器名

Dockerfile指定挂载目录

# 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
VOLUME ["<路径1>", "<路径2>"...]

Dockerfile

注意:Dockerfile中一行代码,表示一层文件

命令文件

docker网络

概念

docker在服务器中是有个网卡的docker0,容器和容器之间连接是使用vech-pair技术的。每一个容器启动会生成一对网卡,在docker0和容器之间进行连接通信。

容器和容器之间用容器名进行连接

命令--link

通过修改容器内hosts文件进行映射。

自定义网络

docker network

docker容器启动时,默认用的网络名字是bridge,对应docker0网卡

可以自己创建网络,并在运行容器时指定网络。自定义的网络可以通过容器名进行连接,原理未知????

网络连通

不同网络之间连通,可以通过该命令docker network connect进行配置。不同网络指的是不同网段。不同容器之间用的网络可能会是不同的,要想进行连接,需要上面这个命令。