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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文目标:引导初学者入门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或其他镜像仓库拉取镜像,也可以自己创建。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
4
4
0
260
分享
相关文章
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
198 18
【赵渝强老师】数据库不适合Docker容器化部署的原因
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
79 12
获取Docker基础使用方法:让容器化变得轻松。
对于Docker的初学者来说,了解这些基础知识点就足够了。实践是最好的老师,越是动手操作,对Docker的理解会越深。祝阅读这篇文章的开发者们一切顺利,愿你在Docker的海洋中航行顺利!
105 17
|
16天前
|
每天百万访问也不怕,Redis帮你搞定UV统计
本文介绍了使用Redis实现高性能UV统计系统的方法。Redis凭借其内存数据库特性,支持毫秒级响应和自动去重,非常适合高并发场景下的访客统计。核心思路是利用Redis的Set数据结构作为"每日签到墙",通过记录用户访问ID实现自动去重,并设置24小时过期时间。文章提供了Python代码示例,展示如何记录用户访问和获取当日UV统计数据,还可扩展实现多页面UV统计。相比传统数据库方案,Redis方案更加轻量高效,是中小型网站实现流量统计的理想选择。
64 0
Docker——阿里云服务器利用docker搭建redis集群
本文详细记录了使用Docker搭建Redis集群的过程,包括检查Docker和Docker Compose的安装、创建Redis配置文件、编写`docker-compose.yml`文件、启动Redis节点、创建Redis集群的具体步骤,以及最终的验证方法。文章还提供了在多服务器环境下搭建Redis集群的注意事项,帮助读者全面了解 Redis 集群的部署流程。
467 70
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
151 27
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
256 10
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问