鲲鹏云计算解决方案“-容器迁移实验
鲲鹏云计算解决方案"-容器迁移实验实验简介Docker安装检查内核版本移除旧的版本安装Docker依赖工具。Docker构建基础镜像任务3 Docker根据基础镜像安装Redis验证Redis镜像实验简介通过Docker安装,构建基础镜像,根据基础镜像安装Redis,验证Redis镜像等模块的实验练习和实训,让学员掌握容器的迁移指导。实验目的掌握Docker安装。掌握Docker构建基础镜像。掌握
鲲鹏云计算解决方案"-容器迁移实验
实验简介
通过Docker安装,构建基础镜像,根据基础镜像安装Redis,验证Redis镜像等模块的实验练习和实训,让学员掌握容器的迁移指导。
实验目的
- 掌握Docker安装。
- 掌握Docker构建基础镜像。
- 掌握Docker根据基础镜像安装Redis。
- 掌握验证构建的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构建基础镜像
-
查找Docker Hub上的centos镜像。
$docker search centos
-
拉取官方的镜像,标签为7。
$docker pull arm64v8/centos:7
-
本地镜像列表里查到REPOSITORY为arm64v8/centos,标签为7的镜像。
$ docker images arm64v8/centos:7
-
使用镜像arm64v8/centos:7以交互模式启动一个容器,docker run -it arm64v8/centos:7 /bin/bash
在容器内执行/bin/bash命令。 -
容器内安装Redis依赖包。
$ yum install wget gcc make libgcc gcc-c++ glibc-devel –y
-
输入exit,退出容器,查看容器id。
$ docker ps -a
由此可知,容器ID为f4603f1f918a。 -
根据容器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:新生成的镜像名称
- 查看新构建的基础镜像。
$ docker images
由此可知,新镜像t_arm64v8/centos:7构建成功。
任务3 Docker根据基础镜像安装Redis
- 创建redis目录。
$ mkdir -p ~/redis ~/redis/data
data目录将映射为redis容器配置的/data目录,作为redis数据持久化的存储目录。
- 进入创建的redis目录,创建Dockerfile。
$cd ~/redis
$vi Dockerfile
- 输入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保存退出文档。
- 通过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镜像
- 运行容器,执行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挂载到容器的/data。redis−server−−appendonlyyes:在容器执行redis−server启动命令,并打开redis持久化配置。2.查看容器启动状态,记录容器ID,下一步中会通过容器ID进入容器。‘ docker ps`
3. 执行redis-cli命令连接到刚启动的容器。
$ docker exec -it 566f60cc5f6f redis-cli
127.0.0.1:6379> info
其中566f60cc5f6f为容器ID。
说明连接redis-server成功。
- 使用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"说明与设置的相匹配。
更多推荐
所有评论(0)