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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云服务器ECS,u1 2核4GB 1个月
简介: 本文目标:引导初学者入门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
相关文章
|
5天前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
|
2天前
|
NoSQL Redis Docker
使用 Docker Compose 接管现有容器的文档
使用 Docker Compose 接管现有容器的文档
14 2
|
4天前
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
|
2天前
|
存储 关系型数据库 MySQL
解读 MySQL 容器信息:`docker inspect` 字段详解
解读 MySQL 容器信息:`docker inspect` 字段详解
20 1
|
5天前
|
Linux Docker 容器
蓝易云 - net.ipv4.ip_forward=0导致docker容器无法与外部通信
完成以上步骤后,Docker容器应该能够正常与外部通信了。
10 2
|
5天前
|
Docker 容器
蓝易云 - Docker中容器的随机命名方式
例如,一个自动生成的容器名称可能是"happy_einstein"。这种随机命名方式既保证了容器名称的唯一性,又增加了一些趣味性。
12 2
|
6天前
|
应用服务中间件 网络安全 nginx
docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解
docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解
|
8天前
|
监控 Java 数据安全/隐私保护
性能监控之 JMX 监控 Docker 容器中的 Java 应用
【6月更文挑战9天】性能监控之 JMX 监控 Docker 容器中的 Java 应用
28 1
|
3天前
|
网络协议 Linux Docker
宿主机的容器是如何通过docker0通信的?
宿主机的容器是如何通过docker0通信的?
14 0
|
7天前
|
弹性计算 网络安全 Nacos
云服务器 ECS产品使用问题之使用Docker部署Nacos时,遇到端口无法开放,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。