docker入门——容器

2023-11-03 22:15:01 浏览数 (1)

1、docker对于容器的操作命令

以下是Docker对于容器的一些常用操作命令:

代码语言:javascript复制
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容器之间的通信方式:

  1. 使用容器IP访问:每个Docker容器都有一个唯一的IP地址,如果两个容器在同一台主机上运行,那么它们可以直接通过对方的IP地址进行通信。但需要注意的是,一旦容器重启,其IP地址可能会发生变化。
  2. 宿主机IP:端口访问:另一种方式是通过宿主机的IP地址和端口号来访问容器。具体来说,可以在运行容器时使用-p参数来映射宿主机的端口到容器内部的端口,从而实现容器之间或者容器与宿主机之间的通信。
  3. 自定义网络:除了上述两种方式外,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。

代码语言:javascript复制
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的卷,我们可以运行以下命令:

代码语言:javascript复制
docker volume create my-vol

执行上述命令后,Docker会在后台创建一个名为my-vol的卷。如果需要查看已创建的卷列表,可以使用 docker volume ls命令。

创建了名为my-vol的卷之后,我们可以将其挂载到容器中,以便容器可以访问其中的数据。

要将卷挂载到容器中,可以使用 docker run 命令的 -v参数来指定要挂载的卷和容器内的目录。例如,如果我们想将卷挂载到容器的 /app 目录下,可以运行以下命令:

代码语言:javascript复制
docker run -itd --name my-container -v my-vol:/app my-image

上述命令会创建一个名为 my-container的新容器,并将 my-vol卷挂载到该容器的 /app 目录下。在容器内部,可以通过 /app 目录访问卷中的数据。

如果需要在多个容器之间共享同一个卷,可以将一个容器设置为另一个容器的父容器,并使用 --volumes-from参数来继承父容器中的卷。例如,如果我们有一个名为 parent-container 的父容器,并且已经将卷挂载到了该容器中,我们可以使用以下命令来创建一个新的子容器,并将其连接到父容器的卷上:

代码语言:javascript复制
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参数可以将宿主机的某目录作为数据卷挂载到容器中,使该容器与宿主机共享此目录。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞