docker入门——容器
1、docker对于容器的操作命令
以下是Docker对于容器的一些常用操作命令:
1. 查看容器列表:docker ps
-a或--all:显示所有容器,包括未运行的(docker ps默认只显示运行的容器)。
-f或--filter:根据条件过滤显示的内容。
--format:指定返回值的模板文件。
-l或--latest:显示最近创建的容器。
-n:列出最近创建的n个容器。
--no-trunc:不截断输出。
-q或--quiet:静默模式,只显示容器编号。
-s或--size:显示总的文件大小。
2. 查看单个容器详细信息:docker inspect <容器ID或名称>
3. 创建并运行容器:docker run <镜像名称>
-i或--interactive:以交互模式运行容器,通常与-t一起使用。
-t或--tty:为容器分配一个伪终端。
-d或--detach:让容器在后台运行并返回容器ID。
--name:为容器指定一个名称。
-p或--publish:指定端口映射,格式为主机(宿主)端口:容器端口。
-v或--volume:将宿主机目录或文件挂载到容器中,格式为宿主机目录:容器目录。
--network或--net:为容器指定一个网络。
--add-host:添加自定义主机到IP的映射(host:ip)。
4. 停止容器:docker stop <容器ID或名称>
5. 启动已停止的容器:docker start <容器ID或名称>
6. 重启容器:docker restart <容器ID或名称>
7. 删除容器:docker rm <容器ID或名称>
-f: 强制删除正在运行的容器
8. 进入正在运行的容器:docker exec -it <容器ID或名称> /bin/bash
9. 将宿主机目录挂载到容器中:docker run <镜像名> -v <宿主机目录:容器目录>
10. 将容器添加到一个自定义网络中:docker network connect <网络名称> <容器ID或名称>
11. 查看所有网络:docker network ls
12. 删除自定义网络:docker network rm <网络名称>
1.2详解图
2、docker容器之间的网络通信
2.1、Docker容器之间的通信方式:
- 使用容器IP访问:每个Docker容器都有一个唯一的IP地址,如果两个容器在同一台主机上运行,那么它们可以直接通过对方的IP地址进行通信。但需要注意的是,一旦容器重启,其IP地址可能会发生变化。
- 宿主机IP:端口访问:另一种方式是通过宿主机的IP地址和端口号来访问容器。具体来说,可以在运行容器时使用
-p
参数来映射宿主机的端口到容器内部的端口,从而实现容器之间或者容器与宿主机之间的通信。 - 自定义网络:除了上述两种方式外,Docker还提供了自定义网络的功能,允许用户创建自己的虚拟网络并将容器添加到该网络中。在自定义网络中,容器之间可以通过各自的IP地址进行通信。此外,Docker还提供了一种名为“Container Networking Mode”的网络模式,在这种模式下,新创建的容器将不会创建自己的网卡和配置自己的IP地址,而是会和一个指定的容器共享IP、端口范围等,这样两个容器之间可以使用localhost进行高效快速的通信。
2.2、docker网络模式的用途和优缺点。
1.首先,bridge网络是Docker默认的网络模式。在这种模式下,每个容器都会分配一个独立的IP地址, 并且可以通过容器名或者IP地址进行访问。bridge网络还支持端口映射,可以将主机上的端口映射到容 器内部的端口上,从而实现容器与外部的通信。
2.其次,host网络模式可以让容器共享主机的网络栈,也就是说容器可以直接使用主机的网络接口进行 通信。这种模式下,容器之间可以通过localhost进行通信,但是不支持端口映射。
3.最后,overlay网络模式是一种比较复杂的网络模式,它可以实现跨主机的容器之间的通信。在这种 模式下,需要有一个额外的组件来负责容器之间的网络连接和通信。目前最常用的overlay网络实现是 Flannel和Weave。
overlay网络的配置方法:
docker03上:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
docker01、02上:
vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.55:8500",
"cluster-advertise": "10.0.0.56:2376",
"insecure-registries": ["10.0.0.56:5000"]
}
2)创建overlay网络
docker network create -d overlay over_test
3)启动容器测试
docker run -it --network over_test --name test1 busybox:latest /bin/sh
你可以使用以下命令查看当前已经创建的所有Docker网络:docker network ls
如果你想要删除一个已经存在的overlay网络,可以使用以下命令进行删除:docker network rm over_test
除了上述三种网络模式外,Docker还提供了其他一些网络相关的功能,例如自定义网络、容器链接等。这些功能可以帮助用户更好地管理和配置Docker容器之间的通信。
3、docker数据持久化
Docker容器数据持久化是一个重要的概念,它让容器内的数据在Docker容器停止、删除或者重新创建之后依然存在。为实现这样的需求,Docker提供了两种主要的方式来实现数据的持久化:一是在运行的容器中直接创建volume:
docker volume create命令用于在Docker中创建一个新的卷。这个卷可以被一个或多个容器使用,提供了一种独立于容器生命周期的数据存储方式。也就是说,即使容器被删除,卷中的数据仍然会保留,可以在新的容器中重新挂载并使用。
该命令的基本语法格式为:docker volume create [OPTIONS] [VOLUME]。其中,OPTIONS参数是可选的,用于指定一些特殊的设置或者参数;而VOLUME则是必选的,用于指定要创建的卷的名称。
例如,如果我们想创建一个名为my-vol的卷,我们可以运行以下命令:
docker volume create my-vol
执行上述命令后,Docker会在后台创建一个名为my-vol的卷。如果需要查看已创建的卷列表,可以使用 docker volume ls命令。
创建了名为my-vol的卷之后,我们可以将其挂载到容器中,以便容器可以访问其中的数据。
要将卷挂载到容器中,可以使用 docker run 命令的 -v参数来指定要挂载的卷和容器内的目录。例如,如果我们想将卷挂载到容器的 /app 目录下,可以运行以下命令:
docker run -itd --name my-container -v my-vol:/app my-image
上述命令会创建一个名为 my-container的新容器,并将 my-vol卷挂载到该容器的 /app 目录下。在容器内部,可以通过 /app 目录访问卷中的数据。
如果需要在多个容器之间共享同一个卷,可以将一个容器设置为另一个容器的父容器,并使用 --volumes-from参数来继承父容器中的卷。例如,如果我们有一个名为 parent-container 的父容器,并且已经将卷挂载到了该容器中,我们可以使用以下命令来创建一个新的子容器,并将其连接到父容器的卷上:
docker run -itd --name child-container --volumes-from parent-container my-image
上述命令会创建一个名为 child-container的新容器,并将其连接到父容器 parent-container中的卷上。在子容器内部,也可以通过相同的路径访问卷中的数据。
二是创建一个存储内外部映射关系的路径,然后其他容器使用–volumes-from进行引用,这种情况主要用于多个容器共享一组数据的情况。
器,并将其连接到父容器 parent-container中的卷上。在子容器内部,也可以通过相同的路径访问卷中的数据。
二是创建一个存储内外部映射关系的路径,然后其他容器使用–volumes-from进行引用,这种情况主要用于多个容器共享一组数据的情况。
此外,Docker容器还可以通过挂载宿主机文件系统或内存的方式来实现数据存储。具体操作可以通过如下命令启动一个容器并指定要挂载的数据卷:docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]。其中,通过-v参数可以将宿主机的某目录作为数据卷挂载到容器中,使该容器与宿主机共享此目录。