关于docker:使用Dockerfile从0开始制作自己的docker镜像阿里云DDNS

5次阅读

共计 3888 个字符,预计需要花费 10 分钟才能阅读完成。

本猿家里开了公网,在 DockerHub 找了几个阿里云 ddns 的工具,试了一下,不太合乎本人的应用环境,遂决定本人入手构建一个镜像

本文我的项目文件均已在 Github,DockerHub 公布

本镜像应用办法以及 docker-compos.yml、DDNS 配置文件均在以下仓库中提供

Github https://github.com/youdmeng/a…

DockerHub https://hub.docker.com/reposi…

为什么抉择 docker

docker 这个货色,几乎不要太好用了,尤其是用了 docker-compose,一个配置文件,不同环境下,一个命令就部署好了,走到哪用到哪,几乎不要太难受。
如果你还没有尝试过 docker,倡议你马上动起手来。

构建阿里云 DDNS 服务 Docker 镜像

构建 docker 镜像,要本着在保障性能的前提下,镜像越小越好
所以我抉择了只有 5MB 的底层镜像 Alpine

应用 Dockerfile 来构建镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明

Dockerfile 罕用指令

| 属性 | 用法 | 形容 | | :—-: | :—-: | :—-: |
| FROM | FROM <image>:<tag> | 指定应用的根底镜像 |
| RUN | RUN < 命令行命令 >/RUN [“ 可执行文件 ”, “ 参数 1 ”, “ 参数 2 ”] | 执行指定指令 |
| COPY | COPY < 源门路 > < 指标门路 > | 复制文件 |
| ADD | ADD < 源门路 > < 指标门路 > | 更高级的复制文件(可下载 URL)|
| CMD | CMD [“executable”,”param1″,”param2″] / CMD [“param1″,”param2”] / CMD command param1 param2 | RUN 构建时运行指令,CMD 容器运行时执行 |
| ENTRYPOINT | ENTRYPOINT [“executable”, “param1”, “param2”] / ENTRYPOINT command param1 param2 | 给容器配置一个可执行程序 |
| ENV | ENV <key> <value> | 设置环境变量 |
| ARG | ARG <name>[=<default value>] | 用于指定传递给构建运行时的变量 |
| VOLUME | VOLUME [“/data”] | 用于创立挂载点 |
| EXPOSE | EXPOSE <port> [<port>] | 为构建的镜像设置监听端口 |
| WORKDIR | WORKDIR /opt | 设置 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令的工作门路 |
| USER | USER daemon | 指定运行镜像所应用的用户 |

应用 Dockerfile 构建阿里云 DDNS 镜像

我制作的镜像以 github 大佬的 DDNS 脚本为根底。

脚本地址:https://github.com/risfeng/al…

阿里云 DDNS 镜像 Dockerfile

以下是整个 dockerfile 文件,前面我将逐行解释它是怎么运行的,起到什么作用

FROM docker.io/alpine
RUN echo "#aliyun" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" >> /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN apk add curl
RUN apk add openssl
RUN apk add util-linux
RUN apk add --update --no-cache bind-tools
RUN curl -O https://raw.githubusercontent.com/risfeng/aliyun-ddns-shell/master/src/aliyun/aliyun-ddns.sh
RUN chmod 777 ./aliyun-ddns.sh
RUN mv /aliyun-ddns.sh /opt/aliyun-ddns.sh
RUN sed -i 's#LOG_FILE_PATH=""#LOG_FILE_PATH="/etc/logs/ddns.log"#g' /opt/aliyun-ddns.sh
RUN echo "*/15    *       *       *       *       /opt/aliyun-ddns.sh -run" >> /var/spool/cron/crontabs/root 
引入官网的基镜像

FROM docker.io/alpine
因为咱们应用官网的基镜像,所以引入 alpine

如何晓得在 alpine 中我能执行那些命令呢?

当然是本人试试看,运行 alpine

运行:docker run -it docker.io/alpine /bin/ash
命令行中一步步配置本人的服务,你的每一步操作,就是 dockerfile 中的一条指令

逐行解释每一行代码的运行和作用

RUN echo “#aliyun” > /etc/apk/repositories

RUN echo “https://mirrors.aliyun.com/alpine/v3.6/main/” >> /etc/apk/repositories

RUN echo “https://mirrors.aliyun.com/alpine/v3.6/community/” >> /etc/apk/repositories

此处是配置 alpine 镜像中的 APT 源为阿里源,进步国内组件下载速度
RUN 命令用来执行指定指令,这里应用的是 shell 形式(RUN < 命令行命令 >),这里相当于运行并进入 alpine,在命令行执行 echo “#aliyun”

应用 echo 命令来批改文件内容

Shell 的 echo 指令与 PHP 的 echo 指令相似,都是用于字符串的输入

  • echo string 间接输入 string 到控制台
  • echo “$name” 读取变量 name 的值
  • echo “#aliyun” > /etc/apk/repositories 追加内容到文件开端,该指令,是把阿里云的镜像仓库地址追加到 repositories 中 【重要】
  • echo date 执行某命令,并输入后果到控制台

    RUN apk update

RUN apk upgrade
这里是对 alpine 进行更新
RUN apk add bash

RUN apk add curl

RUN apk add openssl

RUN apk add util-linux

RUN apk add –update –no-cache bind-tools
这里是装置 DDNS 脚本所以依赖的环境
RUN curl -O https://raw.githubusercontent…

RUN chmod 777 ./aliyun-ddns.sh

RUN mv /aliyun-ddns.sh /opt/aliyun-ddns.sh

下载 DDNS 脚本,挪动并赋权

用 sed 命令来替换指定文件指定字符

Linux sed 命令是利用脚本来解决文本文件。

RUN sed -i ‘s#LOG_FILE_PATH=””#LOG_FILE_PATH=”/etc/logs/ddns.log”#g’ /opt/aliyun-ddns.sh
本操作是将咱们下载的脚本的日志门路做批改
sed 命令解释:

  • a:新增,a 的前面能够接字串,而这些字串会在新的一行呈现(目前的下一行)~
  • c:取代,c 的前面能够接字串,这些字串能够取代 n1,n2 之间的行!
  • d:删除,因为是删除啊,所以 d 前面通常不接任何咚咚;
  • i:插入,i 的前面能够接字串,而这些字串会在新的一行呈现(目前的上一行);
  • p:打印,亦行将某个抉择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s:取代,能够间接进行取代的工作哩!通常这个 s 的动作能够搭配正规表示法!例如 1,20s/old/new/g 就是啦!

下面指令的意思是 -i 插入文件 /opt/aliyun-ddns.sh,用字符串 LOG_FILE_PATH=”/etc/logs/ddns.log”,s 取代LOG_FILE_PATH=””
用人话说,就是在文件 /opt/aliyun-ddns.sh 中应用 LOG_FILE_PATH=”/etc/logs/ddns.log” 替换 LOG_FILE_PATH=””

最初一步

RUN echo “/15 * /opt/aliyun-ddns.sh -run” >> /var/spool/cron/crontabs/root
同理,这里是批改 alpine 的定时器配置文件,让它每隔 15 分钟,运行 /opt/aliyun-ddns.sh -run 指令

运行构件命令

docker build -t ddns:1.0
当然,应用 vscode 来操作 docker 也是很不便的,能够试试看。

功败垂成

应用 Docker run 命令来启动镜像,或者应用 docker-compose 来编排启动,你就领有了属于本人的阿里云 DDNS Docker 服务

本文我的项目文件均已在 Github,DockerHub 公布

本镜像应用办法以及 docker-compos.yml、DDNS 配置文件均在以下仓库中提供

Github https://github.com/youdmeng/a…

DockerHub https://hub.docker.com/reposi…

欢送 STAR

更多好玩难看的内容,欢送到我的博客交换,共同进步        WaterMin

正文完
 0