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

本文涉及的产品
云服务器 ECS,u1 2核4GB 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器 ECS,每月免费额度200元 3个月
简介: 本文目标:引导初学者入门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
相关文章
|
28天前
|
安全 网络协议 网络安全
端口转发:解锁网络访问的新维度
端口转发技术,简化网络数据流,用于家庭至企业服务器场景。它隐藏内部网络服务,提供远程访问、个人网站公开、NAT穿透及安全的VPN连接。设置涉及路由器管理界面,添加转发规则,但需注意安全风险,仅开放必要端口并加强内部安全措施。了解和善用端口转发,提升网络服务可达性与安全性。
118 5
|
3天前
|
数据库 NoSQL Redis
Redis访问模式
【7月更文挑战第17天】
15 2
|
17天前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
|
15天前
|
JavaScript Linux 网络安全
若依修改,若依启动之后,网页端无法访问接口,宝塔和云服务器的端口都要放开,就好了,软件开发常见流程,后台端口就可以访问了
若依修改,若依启动之后,网页端无法访问接口,宝塔和云服务器的端口都要放开,就好了,软件开发常见流程,后台端口就可以访问了
|
16天前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
23天前
|
存储 监控 NoSQL
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
46 0
|
25天前
|
NoSQL 关系型数据库 MySQL
一文学会dockers安装 (附docker安装MySQL、Redis)
一文学会dockers安装 (附docker安装MySQL、Redis)
63 0
|
1月前
|
NoSQL 网络安全 Redis
redis未授权访问利用汇总
redis未授权访问利用汇总
|
1月前
|
弹性计算 监控 JavaScript
云服务器 ECS产品使用问题之Node.js项目部署成功后无法通过公网IP+端口号访问,是什么导致的
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
Shell Linux Docker
Docker和宿主机操作系统文件目录互相隔离的实现原理
Docker和宿主机操作系统文件目录互相隔离的实现原理
232 0