Docker的通俗理解和通过宿主机端口访问Redis容器的实例

简介: 本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。关键点:- Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。- `docker pull` 拉取镜像,如 `redis:3.0`。- `docker run -d --name` 后台运行容器,如 `my-redis`。- `-p` 参数做端口映射,如 `6379:6379`。- `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。

本文解决的问题:

  • 入门 docker
  • 理解镜像与容器、宿主机的概念
  • 理解 Docker 的常用指令
  • 创建 redis 容器,并通过宿主机端口访问

默认读者的知识背景:

  • 使用过 git
  • 初次使用 Docker

本文不会对 Docker 的定义作出解释,不会涉及 Docker 的实现原理,旨在帮助读者快速入门 docker,理解一些常用命令,能够创建并使用容器。

关键概念

如果想要更好地使用 Docker,就需要理解 “镜像“、”容器”和“宿主机”的概念,以及它们之间的关系。

镜像与容器|image & container

镜像与容器的关系,就像类与实例的关系。类是用来创建对象的蓝图,镜像说明如何创建一个容器。

如果使用过云服务器,你可能还记得在创建云服务器时,需要选择系统镜像。与之类似,Docker 在创建容器时也需要选择镜像。

宿主机|Host Machine

宿主机 ,指运行 Docker 的物理机器或虚拟服务器。例如,我在mac上使用docker,mac就是宿主机;在另一台云服务器上运行docker,云服务器就是宿主机。

容器与宿主机

容器是宿主机上的隔离环境。

每个容器看起来都像是一个独立的系统[1]。可以将 Docker 类比为一个本地的“腾讯云”,我们可以通过它在本地创建多台“云服务器”的实例——也就是一个个容器。

如果在不讨论实现原理情况下,单从表现上来看,容器和宿主机可以看作是相互独立的系统。

通过宿主机端口访问 redis 容器的操作实例

接下来,在每一步开始前,会先介绍需要的主要 Docker 命令。通过引用官方解释,帮着读者更好地理解 Docker 命令。

1. 从Docker Hub上拉取镜像

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Download an image from a registry

使用 docker pull --help查看具体用法。

我们创建容器需要镜像[2],通常直接拉取镜像(默认从Docker Hub上拉取)。

拉取 redis 3.0 版本的镜像:docker pull redis:3.0

如果不加:tag,则默认 pull 最新版本。

如果要检查是否下载成功,使用docker images,会列出本地的镜像列表。

2. 创建并运行容器

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Create and run a new container from an image

使用 docker run --help查看具体用法。

现在我们有了tag3.0redis镜像,接下来以此来创建并运行容器。

docker run --name my-redis redis:3.0 : 创建并运行一个名字是my-redis,源自redis:3.0镜像的容器。

但是这个命令会让进程保持在终端运行,我们通常还有其他的任务,所以需要让容器在后台运行。

这时就需要加一个-d参数,即docker run --name my-redis -d redis:3.0

官方解释

-d, --detach     Run container in background and print container ID

前文提到了宿主机与容器的关系,从表面上看,是相互独立的。

因此,如果不配置端口映射,便无法通过宿主机的端口直接访问容器的端口。

这也导致新手常遇到的问题,例如,在docker上创建好的mysql数据库,运行项目时却连接不上。不过,在理解原理之后,这些问题也迎刃而解。

“容器端口映射”指的是,将宿主机的某个端口(例如80)映射到容器的某个端口上(例如8080),

docker run -d -p 80:8080 my_web_app

-p : 配置端口映射,宿主机端口->容器端口

现在,放上最终的创建并运行 redis 的命令,

docker run -d --name my-redis -p 6379:6379 redis

3. 连接容器内终端

我们的最终目的是操作容器中的目标程序。本质上是让容器执行相关命令。

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Execute a command in a running container

使用 docker exec --help查看具体用法。

这个命令可以理解为“向容器发送一个指令”。例如,下面的代码让容器列出当前工作目录

% docker exec my-redis pwd
/data

通常,我们需要交互式地执行命令,

% docker exec -it my-redis bash
Options:
  -i, --interactive          Keep STDIN open even if not attached
  -t, --tty                  Allocate a pseudo-TTY

两个参数可以写在一起,即-it。表示进行交互式会话,并分配一个终端。

这条指令可以实现访问容器内的终端。

4. 访问 redis 命令行工具

在容器的终端内,输入 redis-cli 即可访问 redis 命令行工具。详细用法在此过多解释。


  1. 容器是一个轻量级的进程隔离环境,依赖主机操作系统的内核来运行。容器更像是被隔离的进程,包含应用程序及其所有依赖项,但没有完整的操作系统实例。每个容器看起来像是一个独立的系统,但实际上它只是主机操作系统上的一个隔离环境。这里不做过多解释,有兴趣可自行了解。 ↩︎
  2. 从Docker Hub或其他镜像仓库拉取镜像,也可以自己创建。
相关文章
|
9月前
|
NoSQL Linux Redis
每天百万访问也不怕,Redis帮你搞定UV统计
本文介绍了使用Redis实现高性能UV统计系统的方法。Redis凭借其内存数据库特性,支持毫秒级响应和自动去重,非常适合高并发场景下的访客统计。核心思路是利用Redis的Set数据结构作为"每日签到墙",通过记录用户访问ID实现自动去重,并设置24小时过期时间。文章提供了Python代码示例,展示如何记录用户访问和获取当日UV统计数据,还可扩展实现多页面UV统计。相比传统数据库方案,Redis方案更加轻量高效,是中小型网站实现流量统计的理想选择。
703 0
|
Docker 容器
docker中端口映射
【10月更文挑战第7天】
1592 65
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
202 23
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
340 25
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
388 22
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
2532 3
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
1187 3
|
Docker 容器
一个docker容器暴露多个端口
一个docker容器暴露多个端口
292 3
|
定位技术 文件存储 网络架构
Docker部署PhotoPrism、Immich图片管理应用,无需公网IP远程访问教程
除了Synology、QNAP、TerraMaster等品牌的NAS设备内置图库功能,市面上还有多种备受欢迎的第三方应用,如PhotoPrism、Immich、LibrePhotos、Piwigo、Photoview等。这些应用不仅提供强大的图片管理能力,还可通过Docker轻松部署。借助贝锐花生壳服务,即使没有公网IP也能实现远程访问,突破地理限制,提升数据可访问性和安全性,让用户随时随地管理私人图库。
2170 1
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
251 0