实验简介

通过Docker安装,构建基础镜像,根据基础镜像安装Redis,验证Redis镜像等模块的实验练习和实训,让学员掌握容器的迁移指导。
实验目的

  1. 掌握Docker安装。
  2. 掌握Docker构建基础镜像。
  3. 掌握Docker根据基础镜像安装Redis。
  4. 掌握验证构建的Redis镜像。
    实验环境
    华为云鲲鹏虚拟机。
    实验要求
    通过Docker安装,构建基础镜像,根据基础镜像安装Redis,验证Redis镜像等模块的实验练习和实训,掌握容器的迁移指导

Docker安装

检查内核版本

$ uname -r

[root@xxx]# uname -r
4.18.0-147.0.3.el7.aarch64

说明:

  • Docker支持的Centos版本要求
  • CentOS 7,系统为64位、系统内核版本为 3.10 以上
  • CentOS 6.5或更高,系统为64位、系统内核版本为 2.6.32-431 或者更高版本

查出的centos7的系统为64位,内核版本为4.18,符合版本要求。

移除旧的版本

如果没有安装docker,无需执行

$ yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

在这里插入图片描述

安装Docker依赖工具。

$yum install -y  yum-utils  device-mapper-persistent-data  lvm2

安装Docker。
$yum -y install docker

启动Docker 后台服务。
$systemctl start docker

测试运行hello-world。
$docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

查看下载的hello-world镜像。
$docker images

Docker构建基础镜像

  1. 查找Docker Hub上的centos镜像。
    $docker search centos

  2. 拉取官方的镜像,标签为7。
    $docker pull arm64v8/centos:7

  3. 本地镜像列表里查到REPOSITORY为arm64v8/centos,标签为7的镜像。
    $ docker images arm64v8/centos:7

  4. 使用镜像arm64v8/centos:7以交互模式启动一个容器,docker run -it arm64v8/centos:7 /bin/bash
    在容器内执行/bin/bash命令。

  5. 容器内安装Redis依赖包。
    $ yum install wget gcc make libgcc gcc-c++ glibc-devel –y

  6. 输入exit,退出容器,查看容器id。
    $ docker ps -a
    由此可知,容器ID为f4603f1f918a。

  7. 根据容器ID创建一个新的镜像作为Redis的基础镜像。
    $ docker commit -a "huawei.com" -m "redis images" f4603f1f918a t_arm64v8/centos:7

  • huawei.com:提交的镜像作者
  • f4603f1f918a:容器ID
  • redis images:提交时的说明文字
  • t_arm64v8/centos:7:新生成的镜像名称
  1. 查看新构建的基础镜像。
    $ docker images
    由此可知,新镜像t_arm64v8/centos:7构建成功。

任务3 Docker根据基础镜像安装Redis

  1. 创建redis目录。
    $ mkdir -p ~/redis ~/redis/data

data目录将映射为redis容器配置的/data目录,作为redis数据持久化的存储目录。

  1. 进入创建的redis目录,创建Dockerfile。

$cd ~/redis
$vi Dockerfile

  1. 输入i,编辑如下内容到Dockerfile中。
FROM t_arm64v8/centos:7
WORKDIR /home

RUN wget http://download.redis.io/releases/redis-5.0.5.tar.gz && \

tar -xvzf redis-5.0.5.tar.gz && \

mv redis-5.0.5/ redis && \

rm -f redis-5.0.5.tar.gz

WORKDIR /home/redis

RUN make && make install

 

EXPOSE 6379

CMD ["redis-server"]

1、Dockerfile语法:
(1)#是注释符
(2)FROM 指定一个依赖的镜像,一个镜像不能超过 127 层

(3)LABEL 为镜像生成元数据标签信息
(4)MAINTAINER 作者信息,写在FROM后
(5)COPY 当复制一个目录时,并不会复制目录本身,而是会递归复制其下子目录 至目标目录下
(6)ADD ADD指令类似于COPY指令,ADD支持使用TAR文件和URL路径
(7)WORKDIR 用于为Dockerfile中所有RUN、CMD、ENTRYPOINT、COPY和ADD指令设定工作目录
(8)RUN 接受命令作为参数并用于创建镜像,在之前的commit层上形成新的层。
(9)CMD 类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同
RUN 指令运行于映像文件构建过程中,而CMD指令运行于基于Dockerfile构建出的新镜像文件启动一个容器时。
CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过,CMD指定的命令其可以被docker run的命令行选项所覆盖
在Dockerfile中可以存在多个CMD指令,但仅最后一个生效;
CMD会在启动容器的时候执行,build时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了。这个命令就相当于在/etc/rc.d/rc.local中写命令
(10)ENTRYPOINT 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一具单独的可执行程序
(11)EXPOSE 用来指定端口,使容器内的应用可以通过端口和外界交互。
(12)ENV ENV指令可以用于docker容器设置环境变量
(13)USER 用于指定运行image时的或运行Dockerfile中任何RUN、CMD或ENTRYPOINT指令指定的程序时的用户名或UID
默认情况下,container的运行身份为root用户
(14)ONBUILD 用于在Dockerfile中定义一个触发器
Dockerfile用于build映像文件,此映像文件亦可作为base image被另一个Dockerfile用作FROM指令的参数,并以之构建新的映像文件
在后的这个Dockerfile中的FROM指令在build过程中被执行时,将会“触发”创建其base image的Dockerfile文件中的ONBUILD指令定义的触发器
(15)HEALTHCHECK Docker 1.12版本后引入的判断容器状态是否正常
4. 完成后点击“esc”,然后输入:wq保存退出文档。

  1. 通过Dockerfile创建redis镜像。

$ docker build -t t_arm64v8/centos_redis:5.05 ./
t_arm64v8/centos_redis:5.05: 代表你创建镜像的名称
./ 代表你Dockerfile 的目录
6. 查看创建的redis镜像。

$docker images

说明Redis镜像创建成功,

镜像名称:t_arm64v8/centos_redis,
标签5.05,
镜像ID e732d1ff296b。

验证Redis镜像

  1. 运行容器,执行redis-server。

$ docker run -p 6379:6379 -v $PWD/data:/data -d t_arm64v8/centos_redis:5.05 redis-server --appendonly yes

命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口。
-v P W D / d a t a : / d a t a : 将 主 机 中 当 前 目 录 下 的 d a t a 挂 载 到 容 器 的 / d a t a 。 r e d i s − s e r v e r − − a p p e n d o n l y y e s : 在 容 器 执 行 r e d i s − s e r v e r 启 动 命 令 , 并 打 开 r e d i s 持 久 化 配 置 。 2. 查 看 容 器 启 动 状 态 , 记 录 容 器 I D , 下 一 步 中 会 通 过 容 器 I D 进 入 容 器 。 ‘ PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data。 redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置。 2. 查看容器启动状态,记录容器ID,下一步中会通过容器ID进入容器。 ` PWD/data:/data:data/dataredisserverappendonlyyes:redisserverredis2.IDID docker ps`
在这里插入图片描述
3. 执行redis-cli命令连接到刚启动的容器。

$ docker exec -it 566f60cc5f6f redis-cli

127.0.0.1:6379> info

其中566f60cc5f6f为容器ID。

说明连接redis-server成功。

  1. 使用redis容器。
$127.0.0.1:6379> ping

PONG

127.0.0.1:6379> set runkey "hello redis"

OK

127.0.0.1:6379> get runkey

"hello redis"

说明:

l ping返回PONG说明检测到 redis 服务已经启动。

l set runkey “hello redis”:设置runkey值为"hello redis",返回OK,说明设置成功。

l get runkey:获取runkey的值,返回"hello redis"说明与设置的相匹配。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐