目录
选择基础镜像
在容器内安装ETCD
进入容器内部
安装必要的工具
更新yum
安装依赖工具
下载ETCD
安装ETCD
制作启动脚本
制作属于自己的ETCD镜像
更便捷的方式----获取制作好的结果
这是一篇制作docker镜像的博客。镜像里安装了ETCD3.5.4,且镜像是以CentOS8.4.2105为基础制作的。镜像的制作环境为Mac M1。下面分步介绍制作方法,仅供参考。如果有出错的地方欢迎留言讨论。
选择基础镜像
选择一个合适的镜像去安装ETCD等工具至关重要。在这里我选择了CentOS8镜像作为基础镜像。喜欢Ubuntu或者其他镜像的小伙伴可以自己下载尝试。下面的命令将CentOS8镜像下载到本地:
docker pull centos:centos8.4.2105
提示:如果下载centos镜像速度过慢,可以尝试更换镜像源。更换镜像源的方法这里不再介绍,需要的小伙伴可以自己搜索。
下载完毕,我们使用docker images可以看到刚刚下载的镜像:
$ docker images centos REPOSITORY TAG IMAGE ID CREATED SIZE centos centos8.4.2105 e6a0117ec169 6 months ago 272MB
在容器内安装ETCD
进入容器内部
为了在容器内部安装ETCD,我们首先需要运行容器:
$ docker run -itd -p 12379:2379 --privileged=true --name etcd-service centos:centos8.4.2105 /sbin/init 6fea24738ed27b4024d9eeee1eaa3f0d42d832c11144acda1c9e9f846f2b0016 $ docker exec -it 6fea24738ed27b402 /bin/bash [root@6fea24738ed2 /]#
docker run命令会启动一个容器。下面是对上面命令的参数解读:
| 选项 | 描述 |
|---|---|
| -i | 以交互式模式运行容器。 |
| -t | 为容器重新分配一个伪输入终端。 |
| -d | 后台运行容器。 |
| -p | 指定端口映射。在上面的例子中,将容器运行的宿主机12379端口映射到容器内部的2379端口。 |
| --privileged | privileged=true,表示容器内的root用户拥有真正的root权限。 |
| --name | 为启动的容器指定一个名字。在上面的例子中,为运行的容器命名为etcd-service。 |
注意到我们使用的命令不是/bash/bin,而是/sbin/init,这表示容器运行时要初始化系统环境。
docker exec命令会进入到容器内部。容器id只需要从开头写出一部分即可,不需要全部写全。
看到 命令提示符变为[root@6fea24738ed2 /]# 后,我们就进入到了容器内部中。可以使用hostname命令测试验证一下是不是在容器内部:
[root@6fea24738ed2 /]# hostname 6fea24738ed2
主机名变成了容器id开头的部分子字符串。说明我们已经处于容器中了。接下来的流程就好比在一台CentOS8服务器上安装ETCD一样简单。
安装必要的工具
我们下载的镜像是一个纯净的CentOS,很多基础的工具需要我们手动安装。
更新yum
首先需要更新下yum。我们要重新更新下两个yum的repo文件:
vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
将CentOS-Linux-BaseOS.repo中的baseos section下的内容替换成如下内容:
[baseos] name=CentOS Linux $releasever - BaseOS #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra #baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/ baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
接下来替换第二个repo文件:
vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
将CentOS-Linux-AppStream.repo中的appstream section下的内容替换成如下内容:
[appstream] name=CentOS Linux $releasever - AppStream #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra #baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/ baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
最后更新yum:
yum update -y
提示:如果遇到更新失败报错Timeout,可以切换不同网络尝试重新更新。
安装依赖工具
yum install wget -y
下载ETCD
wget https://github.com/etcd-io/etcd/releases/download/v3.5.4/etcd-v3.5.4-linux-amd64.tar.gz
上面的命令以ETCD3.5.4为例,可以查阅ETCD releases获取其它版本的ETCD包。
安装ETCD
解压刚刚下载的包:
tar zxvf etcd-v3.5.4-linux-amd64.tar.gz
进入到解压目录中
cd etcd-v3.5.4-linux-amd64/
将etcd和etcdctl复制到/usr/bin目录中
cp etcd /usr/bin/etcd cp etcdctl /usr/bin/etcdctl
制作启动脚本
touch /opt/start.sh
chmod 777 /opt/start.sh
vi /opt/start.sh
将下面的内容复制到脚本中:
#!/bin/bash etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'
启动ETCD
/opt/start.sh
制作属于自己的ETCD镜像
通过上面的一系列步骤,ETCD在容器内部的安装和后续配置已经完成了。下面我们通过docker commit命令将运行时的容器制作为一个新的镜像。
先查找到我们的容器:
➜ ~ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fea24738ed2 centos:centos8.4.2105 "/sbin/init" 24 hours ago Up 18 minutes 0.0.0.0:12379->2379/tcp, :::12379->2379/tcp etcd-service
根据容器id,制作一个名为etcd_server:v1.0的镜像:
docker commit 6fea24738ed2 etcd_server:v1.0
更便捷的方式----获取制作好的结果
作者将上述制作好的镜像放在了DokcerHub中,可以使用docker pull将其拉取到本地:
docker pull liushuochen/kric-etcd:v0.1.0



