💖5分钟带你认识Docker核心组件💖Docker系列入门教程

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker 并不是容器,而只是一个管理容器的引擎,Docker 的底层运行原理:Docker 服务启动→下载镜像→启动该镜像得到一个容器→容器里运行着我们想要的程序。

三、Docker的初体验


3.1、Docker的运行机制


   Docker 并不是容器,而只是一个管理容器的引擎,Docker 的底层运行原理:Docker 服务启动→下载镜像→启动该镜像得到一个容器→容器里运行着我们想要的程序。


1.JPG


3.2、运行Docker容器


   我们在启动Docker容器的时候,需要去下载一个镜像,Docker 运行一个容器前需要本地存在有对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库 )。


   从 docker hub 官网搜索要使用的镜像,也可以在命令行使用命令搜索要使用的镜像,比如 docker search tomcat 进行搜索,然后下载所需要的镜像。


# 下载Tomncat镜像
docker pull tomcat
# 运行镜像,他默认是前台运行,如果是后台运行的话需要加一个参数 -d
docker run tomcat
# 检查 tomcat 镜像是否启动容器成功
ps -ef | grep tomcat 
复制代码


我们可以使用命令查看本地已有的镜像。


docker images
复制代码


2.JPG

   

在列出信息中,可以看到几个字段信息:


  1. REPOSITORY:来自于哪个仓库。
  2. TAG:镜像的标记。
  3. IMAGE ID:镜像的 ID 号(唯一)。
  4. CREATED:创建时间。
  5. SIZE:镜像大小。


3.3、进入Docker容器


# 命令格式
docker exec -it 容器id bash
# 退出容器
exit
复制代码

   

其中 i 表示交互式的,也就是保持标准输入流打开。t 表示虚拟控制台,分配到一个虚拟控制台


3.4、客户机访问容器


   从客户机上访问容器,需要有端口映射,docker 容器默认采用桥接模式与宿主机通信,需要将宿主机的 ip 端口映射到容器的 ip 端口上。


# 启动容器
docker run -d -p 宿主机端口:容器端口 容器名称或者容器ID
# 停止容器
docker stop 容器 ID/名称
复制代码


四、Docker 核心组件


4.1、Docker架构


   Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。


3.JPG

 

Docker 容器通过 Docker 镜像来创建,镜像与容器的关系类似于面向对象编程中的类与对象的关系。


Docker 面向对象
镜像
容器 对象


4.2、Docker 核心要素


4.JPG

   

Docker 包括三个核心要素:


  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)


4.3、镜像


4.3.1、镜像的概述


   Docker 镜像就是一个只读的模板,可以用来创建 Docker 容器。


   例如:一个镜像可以包含一个完整的 centos 操作系统环境,里面仅安装了 mysql 或用户需要的其它应用程序。Docker 提供了一个非常简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。


4.3.2、镜像的构成


   镜像是由许多层的文件系统叠加构成的,最下面是一个引导文件系统bootfs,第二层是一个 root 文件系统 rootfs,root 文件系统通常是某种操作系统,比如 centos、Ubuntu,在 root 文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成 docker 中的镜像。


4.3.3、镜像的操作


下载镜像

# 下载一个1redis镜像
docker pull redis:latest
复制代码


   reids 是查询到的镜像名称,latest 是镜像的标签 tag,获取一个镜像有两种方式:


  1. 一种是从官方镜像仓库下载。
  2. 另一种是自己通过 Dockerfile 文件构建。

 

如果有官方镜像,我们就不必自己用 Dockerfile 文件构建了,除非官方没有才会自己去 Dockerfile 文件构建。


列出已经下载的镜像

# 语法格式为:docker images [OPTIONS] [REPOSITORY]
# -a :表示列举出所有的镜像,默认并不显示中间层的镜像1
# -q :表示只显示出镜像的1唯一id
docker images
# 或者是
docker images redis
复制代码


运行镜像

# 其中-d 表示在后台运行
docker run -d redis
复制代码


查看redis进程

ps -ef | grep redis 
复制代码


查看容器镜像状态

docker ps
复制代码


进入容器

docker exec -it 镜像ID bash
复制代码


删除镜像

docker rmi redis:latest 
复制代码


4.3.4、构建镜像


   构建镜像可以让我们保存对容器的修改,并再次使用。提供了自定义镜像的能力,以软件的形式打包并方法服务及其运行环境。Docker中提供了两种方式来构建镜像:


  1. docker commit的方式,通过容器构建镜像。
  2. docker build方式,通过DockerFile文件构建。


4.3.4.1、使用commit方式构建镜像


使用commit构建镜像的语法格式为:


docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
复制代码

   

他有几个参数:


  1. -a:指定镜像的作者。
  2. -m:指定镜像提交的消息。
  3. -p:默认情况下使用commit构建镜像的时候会暂停服务器1,使用这个参数可以不暂停服务器。

 

 构建镜像的步骤:


创建一个容器

# 创建一个端口为80名为commit_test的容器,并且指定基础镜像为centos
 docker run -itd --name commit_test -p 80 centos /bin/bash
复制代码


在容器内部安装nginx

yum install -y epel-release
yum install -y nginx
复制代码


提交镜像

# 语法格式:docker commit -a '作者信息' -m '镜像名称'  需要构建的镜像的名字 构建出来的镜像名称:版本
docker commit -a 'xiaolin' -m 'nginx_mirror' commit_test nginx_mirror:v1
复制代码


查看

docker images
复制代码


5.JPG


启动容器

# 这里的容器id要根据实际情况进行替换
 docker run -itd --name nginx_test2 -p 80 36210c82236d
复制代码


进入容器

# 这里的容器id要根据实际情况进行替换
docker exec -it e231f1dfea62 bash
复制代码


4.3.4.2、通过DockerFile文件


   后面进行详细介绍


4.4、容器


4.4.1、容器的概述


   容器是从镜像创建的运行实例。它可以被启动、停止、删除。每个容器都是相互隔离的、保证安全平台。可以把看做一个简易版的 Linux环境,包括 root 用户权限、进程空间、用户空间和网络空间和运行在其中的应用程序。


Docker 利用容器来运行应用,镜像是只读的。


4.4.2、容器的操作


通过镜像启动容器


   命令会检测当前要运行的镜像在本地存不存在,若不存在他会自动 pull 下来再运行运行后会启动一个容器,,并且开启一个文件系统,。


   你可以直接在容器内创建文件夹,运行一个指定的程序, 当程序退出后, 容器也就退出了。


   运行时的容器无法删除, 只能停止后删除, 或者加上 -f 参数强制删除


# 语法格式为 docker run 容器名字
docker run -d redis
复制代码


启动守护式容器

# i --interactive=true|false 默认是false:允许你对容器内的标准输入 (STDIN) 进行交互
# t --tty=true|false 默认是false:在新容器内指定一个伪终端或终端
docker run -i -t 容器名 /bin/bash
# 示范
docker run -i -t centos /bin/bash
复制代码


退出守护容器

exit
复制代码


查看运行中的容器

# -a 表示列举所有容器
# -i 表示列举最近创建的容器
docker ps [-a] [-l]
复制代码


查看所有的容器

docker ps -a
复制代码


查看所有容器id

docker ps -aq
复制代码


停止容器

docker stop 容器id或容器名称
复制代码


重启容器

docker start 容器id或容器名称
复制代码


删除容器

# 删除容器时,容器必须是停止状态,否则会报错
docker rm 容器id或容器名称
复制代码


进入容器

docker exec -it 容器 id 或容器名称 bash
复制代码


查看容器更多信息

docker inspect  容器id或容器名称
复制代码


停用全部运行中的容器

docker stop $(docker ps -q)
复制代码

删除全部容器


docker rm $(docker ps -aq)
复制代码

停用并删除容器


docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)
复制代码


4.4.3、守护式容器


   守护式容器就是一个可以长期运行的容器,我们之前创建的容器大多数都是刚刚创建完就关闭了。守护式容器的优点:


  1. 能长期运行。
  2. 适合运行运用1程序和服务。


以守护形式运行容器

docker run -i -t 容器名 /bin/bash
# 例子(创建一个容器并且指定基础镜像)
docker run -i -t centos /bin/bash
复制代码


退出但不关闭容器

Ctrl+P 和 Ctrl+Q
复制代码


附加到运行中的容器

docker attach 容器名
复制代码


启动守护式容器

docker run -d 镜像名
复制代码


查看容器运行日志

# -f 一致跟踪日志的变化,并返回结果
# -t 默认为false 在返回的结果上加上时间戳
# --tail = “all” 返回后几行的日志数据
docker logs [-f] [-t] [--tail] 容器名
复制代码


查看容器内1进程

docker top 容器名
复制代码


停止守护式进程

# 发送一个信号给容器,等待容器的关闭
docker stop 容器名
# 直接停止容器
docker kill 容器名
复制代码


4.5、仓库


4.5.1、仓库的概述


   仓库是集中存放镜像文件的场所,有时候会把仓库和仓库注册服务(Registry)看做同一事物,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。


   仓库分为公开仓库(Public)和私有仓库(Private)两种形式,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。用户也可以在本地网络内创建一个私有仓库,当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公 有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来即可。

   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。


4.5.2、仓库的操作


搜索镜像

docker search redis
复制代码


6.JPG

 

 Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 从左往右的参数依次是:镜像名字、镜像描述、镜像星数、是否官方创建、是否自动创建。


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 官方的镜像说明是官方项目组创建和维护的,AUTOMATED资源允许用户验证镜像的来源和内容。


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 根据是否是官方提供,可将镜像资源分为两类:


  1. 类似Centos这样的基础镜像,这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。
  2. 另一种是类似bitnami/redis镜像,它是由Docker用户创建1并且1维护的,往往带有用户名前缀。


下载镜像

docker pull redis # 后面可接版本号
docker pull redis4.x
复制代码


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 我

们发现,镜像的下载速度是出奇的慢,所以我们需要配置阿里的镜像加速器进行下载。


sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://175i7vum.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
8月前
|
Kubernetes API Docker
(一)零基础小白都能懂的超全Docker入门教程之开篇
(一)零基础小白都能懂的超全Docker入门教程之开篇
|
前端开发 JavaScript Java
Docker 极简入门教程,傻瓜都能看懂!
Docker 极简入门教程,傻瓜都能看懂!
455 0
Docker 极简入门教程,傻瓜都能看懂!
|
Linux Shell 网络安全
docker入门教程(搭建docker看)
Docker 查看系统内核和系统信息 命令:
214 0
docker入门教程(搭建docker看)
|
关系型数据库 MySQL 应用服务中间件
Docker容器数据卷入门教程(超详细)
docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。为了能够保存数据,在docker容器中使用卷。
323 0
Docker容器数据卷入门教程(超详细)
|
存储 监控 Linux
全面的Docker快速入门教程
全面的Docker快速入门教程
253 0
全面的Docker快速入门教程
|
Linux 开发工具 git
Docker 入门教程概念
Docker 入门教程概念
120 0
|
关系型数据库 MySQL Java
💖5分钟带你自定义镜像和安装软件💖Docker系列入门教程
Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像。
609 0
|
存储 运维 Ubuntu
💖5分钟带你跑一跑Docker💖Docker系列入门教程
 虚拟化(英语:Virtualization)是一种计算机资源管理技术,是将计算机的各种硬件资源,比如服务器、网络、CPU、内存及存储等,予以抽象和转换后呈现出一套新的硬件资源环境,在这一套新的硬件环境下可以安装我们的操作系统,部署我们的应用运行环境等,它打破计算机硬件资源不可切割的障碍,使我们可以比原本的计算机硬件资源结构更好的方式来组合应用这些资源。
304 0
💖5分钟带你跑一跑Docker💖Docker系列入门教程
|
存储 Prometheus 监控
Prometheus:核心组件介绍,centos7和Docker安装
Prometheus:核心组件介绍,centos7和Docker安装
238 0
Prometheus:核心组件介绍,centos7和Docker安装
|
JavaScript 网络协议 Java
Day 21:Docker 入门教程
几个月以前,红帽(Red Hat)宣布了在 Docker 技术上和 dotCloud 建立合作关系。在那时候,我并没有时间去学习关于 Docker 的知识,所以在今天,趁着这个 30 天的挑战,我决定去学习一下 Docker 究竟是怎样的。这篇博文并不是说以后怎么在 OpenShift 上用 Docker 的。请阅读由 Mike McGrath 撰写的 "关于 OpenShift 和 Docker 的技术思考"。也可以看看这个 Stackoverflow 的问题,了解一下 Docker 和 OpenShift 的差别。
131 0
Day 21:Docker 入门教程