先温习一下 docker 的基本操作:
1. 应用镜像启动一个容器,并且容器在后盾运行
命令:
docker run -d -P [镜像名]
示例:
docker run -d -P nginx
参数阐明:
-d 是让容器在后盾运行。
-P 是随机的端口映射。命令的执行后果,会返回启动的容器的残缺 ID(64 位数字和字母组成)。示例中,会主动将宿主机的一个随机端口映射到生成的容器中的 80 端口(nginx 的默认端口是 80)。
2. 查看容器日志
命令:
docker logs [容器名或者 ID]
3. 启动容器并设置指定的映射端口
命令:
docker run -d -p [宿主机的端口]:[容器的端口] --name [给新容器指定名称] [镜像名或者 ID]
示例:
docker run -d -p 3333:80 --name nginx-demo nginx
参数阐明:
-p 用来设置指定的映射端口。 做了端口映射之后,通过拜访宿主机 IP+ 映射到宿主机的端口,就能拜访到 docker 中的服务。
4. 查看容器映射了哪些端口
命令:
docker port nginx-demo
5. 启动容器并设置指定的 IP 和映射端口
命令:
docker run -d -p [宿主机 IP]:[宿主机端口]:[容器端口]
阐明:
这个命令实用于宿主机存在多个 IP 地址的状况。
6. 启动容器并指定容器的端口,但不指定宿主机的端口
命令:
docker run -d -p [宿主机 IP]::[容器端口]
阐明:
这个命令实用于宿主机存在多个 IP 地址的状况。
7. 启动容器并指定容器应用的协定
命令:
docker run -d -p [宿主机端口]:[容器端口]:udp
阐明:
-p 默认应用的是 tcp 协定。能够指定应用 udp 协定。
接下来本篇文章要讲的核心内容来了
8. 容器的数据存储
必须晓得的常识:
容器的数据默认都存储在容器的卷外面,如果容器删除,数据也就没有了。
容器技术提供了一种形式,能够将宿主机的卷挂载到容器外面,这样就能够将容器的数据保留到宿主机上。
挂载参数是 -v,有两种应用形式:
【形式一】
-v /data
意思是:将宿主机的某目录挂载到容器的 /data 目录下。如果镜像(或者容器)中默认没有 /data 目录,挂载实现后会主动在容器中创立该目录。
登录容器,查看 /data 的磁盘挂载状况:
问题:
宿主机的哪个卷挂载到容器上了呢?
验证:
先在容器的 /data 目录创立一个文件 hehe。回到宿主机,应用 inspect 命令查看容器的详细信息,在 Mount 这段信息中找到 Source 这个局部。
进入 Source 前面的门路,能够查看到方才创立的文件 hehe。
进入宿主机的目录 /var/lib/docker/volumes/,通常能够看到该目录下有很多卷。每一个与宿主机进行了卷挂载的容器,它挂载的卷都在这个目录下。即 应用命令 docker inspect [容器名] 或 [容器 ID] | grep Source 查到的门路名称与这里的目录名称是能够匹配上的。如下图所示:
论断:
挂载宿主机的卷到容器但不指定具体是哪个卷,这个时候零碎会随机在宿主机的目录 /var/lib/docker/volumes/ 外面找一个卷挂载到容器上。
【形式二】
-v src:dst
意思是:将宿主机的目录 src 挂载到容器的 dst 目录下。这是更好的应用形式。
示例:
-> 在宿主机本地创立一个目录用于挂载给容器:
mkdir /data/docker-volume-nginx
-> 启动容器并挂载方才创立的目录到容器的目录 /data 下:
docker run -d --name nginx-test2 -v /data/docker-volume-nginx/:/data nginx
-> 进入方才创立的目录,在外面创立一个文件 mmm:
touch mmm
-> 登录容器,在 /data 目录中,看到方才在宿主机中创立的目录 mmm:
sh /data/shell/docker_in.sh nginx-test2
具体操作过程如下截图所示: