Dockerfile(转载)

Dockerfile

镜像的生产途径

1.基于容器
2.基于Dockerfile

Dockerfile

Dockerfile is nothing but the source code for building Docker images
    Docker can build images automatically by reading the instructions from
    A  Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image
    Using  docker build users can create an automated build that executes several command-line instructions in succession

Dockerfile Format 语法格式

## 语法
Format
    # Comment
    INSTRUCTION arguments

## Dockerfile 指令 大小写不敏感,但是预定俗称为大写
The instruction is not case-sensitive
    However, convention is for them to be UPPERCASE to distinguish them from arguments more easily

## 顺序执行指令,前后关系很重要
Docker runs instructions in a  Dockerfile in order

## 第一个非注释行必须为 FROM 指令,指定做当前镜像基于那个基础镜像
The first instruction must be `FROM` in order to specify the Base Image from which you are building

Environment replacement

Environment variables (declared with the ENV statement) can also be used in certain instructions as variables to be interpreted by the  Dockerfile

Environment variables are notated in the  Dockerfile either with  $variable_name or  ${variable_name}

The  ${variable_name} syntax also supports a few of the
standard  bash modifiers
    ${variable:-word} indicates that if variable is set then the result will be that value. If variable is not set then word will be the result.
    ${variable:+word} indicates that if variable is set then word will be the result, otherwise the result is the empty string.

使用变量的2种方式:
    ${variable:-word} :变量没值或为空,使用word值,有值使用原本值
    ${variable:+word} :变量有值,使用word值,没值就没值

.dockerignore file

Before the docker CLI sends the context to the docker daemon, it looks for a file named  .dockerignore in the root directory of the context

If this file exists, the CLI modifies the context to exclude files and directories that match patterns in it

The CLI interprets the  .dockerignore file as a newline-separated list of patterns similar to the file globs of Unix shells

## 忽略某些文件,当Dockerfile拷贝当前所有文件到容器中时,若 .dockerignore 中设置了某些文件,则这些文件不会被拷贝到容器中

Dockerfile Instructions

FROM

FROM 指令是最重的一个且必须为 Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境

实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在 docker主主机上查找指定的镜像文件,在其不存在时,则会从 Docker Hub Registry 上拉取所需的镜像文件
    如果找不到指定的镜像文件, docker build 会返回一个错误信息

Syntax语法
    FROM <image>[:<tag>]  或
    FROM <image>@<digest>  ## digest 指定镜像hash码
        <image> :指定作为 base image 的名称;
        <tag> :base image 的标签,为可选项,省略时默认为latest

MAINTANIER (depreacted已废弃 --> LABEL v1.17版本)

用于让镜像制作者提供本人的详细信息
Dockerfile 并不限制 MAINTAINER指令可在出现的位置,但推荐将其放置于FROM 指令之后

Syntax
    MAINTAINER <authtor's detail>
        <author's detail> 可是任何文本信息,但约定俗成地使用作者名称及邮件地址

LABEL

该指令是为镜像添加标签。顶替 MAINTANIER 指令

  • 句法:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 一个Dockerfile种可以有多个LABEL,如下:
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
LABEL maintainer="evescn evescn@evescn.com"

COPY

用于从 Docker 主机复制文件至创建的新映像文件
Syntax
    COPY <src> ... <dest>  或
    COPY ["<src>",... "<dest>"]
        <src> :要复制的源文件或目录,支持使用通配符
        <dest> :目标路径,即正在创建的 image 的文件系统路径;建议为 <dest> 使用绝对路径,否则, COPY 指定则以 WORKDIR 为其起始路径;
    注意:在路径中有空白字符时,通常使用第二种格式

文件复制准则
    <src> 必须是 build 上下文中的路径,不能是其父目录中的文件
    如果 <src> 是目录,则其内部文件或子目录会被递归复制,但 <src>目录自身不会被复制
    如果指定了多个 <src> ,或在 <src> 中使用了通配符,则 <dest>必须是一个目录 / 结尾
    如果 <dest> 事先不存在,它将会被自动创建,这包括其父目录路径

ADD

ADD 指令类似于 COPY 指令, ADD 支持使用 TAR 文件和 URL 路径
Syntax
    ADD <src> ... <dest>  或
    ADD ["<src>",... "<dest>"]

操作准则
    同 COPY 指令

    如果 <src> 为 URL 且 <dest> 不以 / 结尾,则 <src>指定的文件将被下载并直接被创建为 <dest> ;如果 <dest> 以 / 结尾,则文件名 URL指定的文件将被直接下载并保存为 <dest>/<filename>

    如果 <src> 是一个本地系统上的压缩格式的 tar文件,它将被展开为一个目录,其行为类似于“ tar -x ”命令;然而,通过 URL 获取到的 tar文件将不会自动展开;

    如果 <src> 有多个,或其间接或直接使用了通配符,则 <dest> 必须是一个以 / 结尾的目录路径;如果 <dest> 不以 / 结尾,则其被视作一个普通文件, <src> 的内容将被直接写入到 <dest>

WORKDIR

用于为 Dockerfile 中所有的 RUN 、 CMD 、 ENTRYPOINT 、 COPY 和 ADD 指定设定工作目录

Syntax
    WORKDIR <dirpath>
        在 Dockerfile 文件中, WORKDIR指令可出现多次,其路径也可以为相对路径,其是相对此前一个 WORKDIR 指令指定的路径
        另外, WORKDIR 也可调用由 ENV 指定定义的变量
    例如
        WORKDIR /var/log
        WORKDIR $STATEPATH

VOLUME

用于在 image 中创建一个挂载点目录,以挂载 Docker host上的卷或其它容器上的卷

Syntax
    VOLUME <mountpoint>  或
    VOLUME ["<mountpoint>"]

如果挂载点目录路径下此前在文件存在, docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中

EXPOSE

用于为容器打开指定要监听的端口以实现与外部通信
Syntax
    EXPOSE <port>[/<protocol>] [<port>[/<protocol>] ...]
        <protocol> 用于指定传输层协议,可为 tcp 或 udp 二者之一,默认为 TCP 协议
EXPOSE 指令可一次指定多个端口,例如
    EXPOSE 11211/udp 11211/tcp

ENV

用于为镜像定义所需的环境变量,并可被 Dockerfile文件中位于其后的其它指令(如 ENV 、 ADD 、 COPY 等)所调用
调用格式为 $variable_name 或 ${variable_name}

Syntax
    ENV <key> <value>  或
    ENV <key>=<value> ...

第一种格式中, <key> 之后的所有内容均会被视作其 <value>的组成部分,因此,一次只能设置一个变量;

第二种格式可用一次设置多个变量,每个变量为一个 "<key>=<value>"的
键值对,如果 <value> 中包含空格,可以以反斜线 (\)进行转义,也可通过对 <value> 加引号进行标识;另外,反斜线也可用于续行;

定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能

RUN

用于指定 docker build 过程中运行的程序,其可以是任何命令

Syntax
    RUN <command>  或
    RUN ["<executable>", "<param1>", "<param2>"]

第一种格式中, <command> 通常是一个 shell 命令,且以 "/bin/sh -c" 来运行它,这意味着此进程在容器中的 PID 不为 1 ,不能接收 Unix 信号,因此,当使用 docker stop <container> 命令停止容器时,此进程接收不到 SIGTERM 信号;

第二种语法格式中的参数是一个 JSON 格式的数组,其中 <executable>为要运行的命令,后面的 <paramN>为传递给命令的选项或参数;然而,此种格式指定的命令不会以“ /bin/sh -c” 来发起,因此常见的 shell 操作如变量替换以及通配符 (?,*等) 替换将不会进行;不过,如果要运行的命令依赖于此 shell特性的话,可以将其替换为类似下面的格式。
	RUN ["/bin/bash", "-c", "<executable>", "<param1>"]

注意:json数组中,要使用双引号

CMD

类似于 RUN 指令, CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同
    RUN 指令运行于映像文件构建过程中,而 CMD 指令运行于基于 Dockerfile构建出的新映像文件启动一个容器时
    CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过, CMD 指定的命令其可以被 docker run 的命令行选项所覆盖
	在 Dockerfile 中可以存在多个 CMD 指令,但仅最后一个会生效

Syntax
    CMD <command>  或
    CMD [ “ <executable> ”,  “ <param1> ”,  “ <param2> ”]  或
    CMD ["<param1>","<param2>"]

前两种语法格式的意义同 RUN
第三种则用于为 ENTRYPOINT 指令提供默认参数

注意:json数组中,要使用双引号

ENTRYPOINT

类似 CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序CMD 不同的是,由 ENTRYPOINT 启动的程序不会被 docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给 ENTRYPOINT 指定指定的程序
    不过, docker run 命令的 --entrypoint 选项的参数可覆盖 ENTRYPOINT 指令指定的程序

Syntax
    ENTRYPOINT <command>
    ENTRYPOINT ["<executable>", "<param1>", "<param2>"]

docker run 命令传入的命令参数会覆盖 CMD 指令的内容并且附加到ENTRYPOINT 命令最后做为其参数使用

Dockerfile 文件中也可以存在多个 ENTRYPOINT 指令,但仅有最后一个会生效

注意:json数组中,要使用双引号

USER

用于指定运行 image 时的或运行 Dockerfile 中任何 RUN 、 CMD 或ENTRYPOINT 指令指定的程序时的用户名或 UID
默认情况下, container 的运行身份为 root 用户

Syntax
    USER <UID>|<UserName>
    需要注意的是, <UID> 可以为任意数字,但实践中其必须为 /etc/passwd 中某用户的有效 UID ,否则, docker run 命令将运行失败

HEALTHCHECK

  • 格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK 指令是告诉 Docker 应该如何进行判断容器的状态是否正常,这是 Docker 1.12 引入的新指令。

在没有 HEALTHCHECK 指令前,Docker 引擎只可以通过容器内主进程是否退出来判断容器是否状态异常。很多情况下这没问题,但是如果程序进入死锁状态,或者死循环状态,应用进程并不退出,但是该容器已经无法提供服务了。在 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。

而自 1.12 之后,Docker 提供了 HEALTHCHECK 指令,通过该指令指定一行命令,用这行命令来判断容器主进程的服务状态是否还正常,从而比较真实的反应容器实际状态。

当在一个镜像指定了 HEALTHCHECK 指令后,用其启动容器,初始状态会为 starting,在 HEALTHCHECK 指令检查成功后变为 healthy,如果连续一定次数失败,则会变为 unhealthy。
  • HEALTHCHECK 支持下列选项:
--interval=<间隔>:两次健康检查的间隔,默认为 30 秒;
--timeout=<时长>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;
--start-period=<间隔>:第一次检查检查的间隔,默认为 0 秒;
--retries=<次数>:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。

和 CMD, ENTRYPOINT 一样,HEALTHCHECK 只可以出现一次,如果写了多个,只有最后一个生效。

在 HEALTHCHECK [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 格式,和 exec 格式。

  • 命令的返回值决定了该次健康检查的成功与否:
0:成功;
1:失败;
2:保留,不要使用这个值。
  • 例如:
HEALTHCHECK --interval=5s --timeout=3s --start-period=3s \
	CMD curl -f http://localhost/ || exit 1

ARG

语法形式: ARG <name>[=<default value>]
ARGENV效果类似,都是用来设置观景变量的。唯一 不同的是dockerfile中的ARG编译好后是不会出现在打开的容器内的。

ARG在dockerfile中创建一个全局参数,参数可以给定一个默认值,在编译时可以传参对其进行覆盖。如果ARG指令有默认值并且在构建期间没有接收到参数、则使用默认值。一个dockerfile中可以包含多个ARG参数。
docker build --build-arg <varname>=<value>

可以使用ARG或ENV指令来指定RUN指令可用的变量,如果ARG和ENV同时指定了一个相同名称的变量、则ENV设置的变量会覆盖ARG设置的变量。如下:

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER v1.0.0
RUN echo $CONT_IMG_VER


## 使用 docker build --build-arg CONT_IMG_VER=v2.0.1 . 最终输出v1.0.0 。

一个ARG指令的有效范围在其定义的构建阶段内、如果要在多个阶段中都有效、则必须在每个阶段都使用ARG指令;与ARG不同 ENV设置参数的有效期为整个构建期内。

ONBUILD

用于在 Dockerfile 中定义一个触发器

Dockerfile 用于 build 映像文件,此映像文件亦可作为 base image被另一个 Dockerfile 用作 FROM指令的参数,并以之构建新的映像文件

在后面的这个 Dockerfile 中的 FROM 指令在 build过程中被执行时,将会“ 触发” 创建其 base image 的 Dockerfile 文件中的 ONBUILD指令定义的触发器

Syntax
    ONBUILD <INSTRUCTION>

尽管任何指令都可注册成为触发器指令,但 ONBUILD不能自我嵌套,且不会触发 FROMMAINTAINER 指令

使用包含 ONBUILD 指令的 Dockerfile 构建的镜像应该使用特殊的标签,例如 ruby:2.0-onbuildONBUILD 指令中使用 ADD 或 COPY指令应该格外小心,因为新构建过程的上下文在缺少指定的源文件时会失败

实践

  • 变量生产nginx配置文件,并且启动时能修改此配置
Dockerfile

FROM nginx:1.14-alpine
LABEL maintainer="evescn"

ENV NGX_DOC_ROOT='/data/web/html'

ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/

EXPOSE 80/tcp

HEALTHCHECK --start-period=3s \
	CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/

CMD ["/usr/sbin/nginx","-g","deamon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
# vim entrypoint.sh

#!/bin/sh
#
cat > /etc/nginx/conf.d/www.conf << EOF
server {

	server_name ${HOSTNAME};
	listen ${IP:-0.0.0.0}:${PORT:-80};
	root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF

exec "$@"

# chmod a+x entrypoint.sh
# echotest page” > ./index.html
# docker build -t evescn_nginx:v1 ./

# docker run --name myweb1 --rm -P -e "PORT=8080"  evescn_nginx:v1
posted @   evescn  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
历史上的今天:
2018-04-28 从任意长度的可迭代对象中分解元素
2018-04-28 将序列分解为单独的变量
  1. 1 毛不易
  2. 2 青丝 等什么君(邓寓君)
  3. 3 最爱 周慧敏
  4. 4 青花 (Live) 摩登兄弟刘宇宁/周传雄
  5. 5 怨苍天变了心 葱香科学家(王悠然)
  6. 6 吹梦到西洲 恋恋故人难/黄诗扶/王敬轩(妖扬)
  7. 7 姑娘别哭泣 柯柯柯啊
  8. 8 我会好好的 王心凌
  9. 9 半生雪 七叔-叶泽浩
  10. 10 用力活着 张茜
  11. 11 山茶花读不懂白玫瑰 梨笑笑
  12. 12 赴春寰 张壹ZHANG/Mukyo木西/鹿予/弦上春秋Official
  13. 13 故事终章 程响
  14. 14 沿海独白 王唯一(九姨太)
  15. 15 若把你 越南电音 云音乐AI/网易天音
  16. 16 世间美好与你环环相扣 柏松
  17. 17 愿你如愿 陆七言
  18. 18 多情种 胡杨林
  19. 19 和你一样 李宇春
  20. 20 晚风心里吹 李克勤
  21. 21 世面 黄梓溪
  22. 22 等的太久 杨大六
  23. 23 微醺状态 张一
  24. 24 醉今朝 安小茜
  25. 25 阿衣莫 阿吉太组合
  26. 26 折风渡夜 沉默书生
  27. 27 星河万里 王大毛
  28. 28 满目星辰皆是你 留小雨
  29. 29 老人与海 海鸣威/吴琼
  30. 30 海底 一支榴莲
  31. 31 只要有你 曹芙嘉
  32. 32 兰花指 阿里郎
  33. 33 口是心非 张大帅
  34. 34 爱不得忘不舍 白小白
  35. 35 惊鸿醉 指尖笑
  36. 36 如愿 葱香科学家(王悠然)
  37. 37 晚风心里吹 阿梨粤
  38. 38 惊蛰·归云 陈拾月(只有影子)/KasaYAYA
  39. 39 风飞沙 迪克牛仔
  40. 40 把孤独当做晚餐 井胧
  41. 41 星星点灯 郑智化
  42. 42 客子光阴 七叔-叶泽浩
  43. 43 走马观花 王若熙
  44. 44 沈园外 阿YueYue/戾格/小田音乐社
  45. 45 盗将行 花粥/马雨阳
  46. 46 她的眼睛会唱歌 张宇佳
  47. 47 一笑江湖 姜姜
  48. 48 虎二
  49. 49 人间烟火 程响
  50. 50 不仅仅是喜欢 萧全/孙语赛
  51. 51 你的眼神(粤语版) Ecrolyn
  52. 52 剑魂 李炜
  53. 53 虞兮叹 闻人听書_
  54. 54 时光洪流 程响
  55. 55 桃花诺 G.E.M.邓紫棋
  56. 56 行星(PLANET) 谭联耀
  57. 57 别怕我伤心 悦开心i/张家旺
  58. 58 上古山海经 小少焱
  59. 59 你的眼神 七元
  60. 60 怨苍天变了心 米雅
  61. 61 绝不会放过 王亚东
  62. 62 可笑的孤独 黄静美
  63. 63 错位时空 艾辰
  64. 64 像个孩子 仙屁孩
  65. 65 完美世界 [主题版] 水木年华
  66. 66 我们的时光 赵雷
  67. 67 万字情诗 椒椒JMJ
  68. 68 妖王 浮生
  69. 69 天地无霜 (合唱版) 杨紫/邓伦
  70. 70 塞北殇 王若熙
  71. 71 花亦山 祖娅纳惜
  72. 72 醉今朝 是可乐鸭
  73. 73 欠我个未来 艾岩
  74. 74 缘分一道桥 容云/青峰AomineDaiky
  75. 75 不知死活 子无余/严书
  76. 76 不可说 霍建华/赵丽颖
  77. 77 孤勇者 陈奕迅
  78. 78 让酒 摩登兄弟刘宇宁
  79. 79 红尘悠悠DJ沈念版 颜一彦
  80. 80 折风渡夜 (DJ名龙版) 泽国同学
  81. 81 吹灭小山河 国风堂/司南
  82. 82 等什么君 - 辞九门回忆 张大帅
  83. 83 绝世舞姬 张曦匀/戚琦
  84. 84 阿刁(无修音版|live) 张韶涵网易云资讯台
  85. 85 往事如烟 蓝波
  86. 86 清明上河图 李玉刚
  87. 87 望穿秋水 坤坤阿
  88. 88 太多 杜宣达
  89. 89 小阿七
  90. 90 霞光-《精灵世纪》片尾曲 小时姑娘
  91. 91 放开 爱乐团王超
  92. 92 醉仙美 娜美
  93. 93 虞兮叹(完整版) 黎林添娇kiki
  94. 94 单恋一枝花 夏了个天呐(朴昱美)/七夕
  95. 95 一个人挺好 (DJ版) 69/肖涵/沈子凡
  96. 96 一笑江湖 闻人听書_
  97. 97 赤伶 李玉刚
  98. 98 达拉崩吧 (Live) 周深
  99. 99 等你归来 程响
  100. 100 责无旁贷 阿悠悠
  101. 101 你是人间四月天(钢琴弹唱版) 邵帅
  102. 102 虐心 徐良/孙羽幽
  103. 103 大天蓬 (女生版) 清水er
  104. 104 赤伶 是二智呀
  105. 105 有种关系叫知己 刘大壮
  106. 106 怎随天下 王若熙
  107. 107 有人 赵钶
  108. 108 海底 三块木头
  109. 109 有何不可 许嵩
  110. 110 大天蓬 (抖音版) 璐爷
  111. 111 我吹过你吹过的晚风(翻自 ac) 辛辛
  112. 112 只爱西经 林一
  113. 113 关山酒 等什么君(邓寓君)
  114. 114 曾经的你 年少不川
  115. 115 倔强 五月天
  116. 116 Lydia F.I.R.
  117. 117 爱你 王心凌
  118. 118 杀破狼 哥哥妹妹
  119. 119 踏山河 七叔-叶泽浩
  120. 120 错过的情人 雷婷
  121. 121 你看到的我 黄勇/任书怀
  122. 122 新欢渡旧爱 黄静美
  123. 123 慕容晓晓-黄梅戏(南柯一梦 / 明洋 remix) 南柯一梦/MINGYANG
  124. 124 浮白 花粥/王胜娚
  125. 125 叹郁孤 霄磊
  126. 126 贝加尔湖畔 (Live) 李健
  127. 127 不虞 王玖
  128. 128 麻雀 李荣浩
  129. 129 一场雨落下来要用多久 鹿先森乐队
  130. 130 野狼disco 宝石Gem
  131. 131 我们不该这样的 张赫煊
  132. 132 海底 一支榴莲
  133. 133 爱情错觉 王娅
  134. 134 你一定要幸福 何洁
  135. 135 往后余生 马良
  136. 136 放你走 正点
  137. 137 只要平凡 张杰/张碧晨
  138. 138 只要平凡-小石头和孩子们 小石头和孩子们
  139. 139 红色高跟鞋 (Live) 韩雪/刘敏涛/万茜
  140. 140 明月天涯 五音Jw
  141. 141 华年 鹿先森乐队
  142. 142 分飞 徐怀钰
  143. 143 你是我撞的南墙 刘楚阳
  144. 144 同簪 小时姑娘/HITA
  145. 145 我的将军啊-唯美独特女版 熙宝(陆迦卉)
  146. 146 我的将军啊(女版戏腔) Mukyo木西
  147. 147 口是心非 南柯nanklo/乐小桃
  148. 148 DAY BY DAY (Japanese Ver.) T-ara
  149. 149 我承认我怕黑 雅楠
  150. 150 我要找到你 冯子晨
  151. 151 你的答案 子尧
  152. 152 一剪梅 费玉清
  153. 153 纸船 薛之谦/郁可唯
  154. 154 那女孩对我说 (完整版) Uu
  155. 155 我好像在哪见过你 薛之谦
  156. 156 林中鸟 葛林
  157. 157 渡我不渡她 (正式版) 苏谭谭
  158. 158 红尘来去梦一场 大壮
  159. 159 都说 龙梅子/老猫
  160. 160 산다는 건 (Cheer Up) 洪真英
  161. 161 听说 丛铭君
  162. 162 那个女孩 张泽熙
  163. 163 最近 (正式版) 王小帅
  164. 164 不谓侠 萧忆情Alex
  165. 165 芒种 音阙诗听/赵方婧
  166. 166 恋人心 魏新雨
  167. 167 Trouble Is A Friend Lenka
  168. 168 风筝误 刘珂矣
  169. 169 米津玄師-lemon(Ayasa绚沙 Remix) Ayasa
  170. 170 可不可以 张紫豪
  171. 171 告白の夜 Ayasa
  172. 172 知否知否(翻自 胡夏) 凌之轩/rainbow苒
  173. 173 琵琶行 奇然/沈谧仁
  174. 174 一曲相思 半阳
  175. 175 起风了 吴青峰
  176. 176 胡广生 任素汐
  177. 177 左手指月 古琴版 古琴唐彬/古琴白无瑕
  178. 178 清明上河图 排骨教主
  179. 179 左手指月 萨顶顶
  180. 180 刚刚好 薛之谦
  181. 181 悟空 戴荃
  182. 182 易燃易爆炸 陈粒
  183. 183 漫步人生路 邓丽君
  184. 184 不染 萨顶顶
  185. 185 不染 毛不易
  186. 186 追梦人 凤飞飞
  187. 187 笑傲江湖 刘欢/王菲
  188. 188 沙漠骆驼 展展与罗罗
  189. 189 外滩十八号 男才女貌
  190. 190 你懂得 小沈阳/沈春阳
  191. 191 铁血丹心 罗文/甄妮
  192. 192 温柔乡 陈雅森
  193. 193 似水柔情 王备
  194. 194 我只能爱你 彭青
  195. 195 年轻的战场 张杰
  196. 196 七月七日晴 许慧欣
  197. 197 心爱 金学峰
  198. 198 Something Just Like This (feat. Romy Wave) Anthony Keyrouz/Romy Wave
  199. 199 ブルーバード いきものがかり
  200. 200 舞飞扬 含笑
  201. 201 时间煮雨 郁可唯
  202. 202 英雄一怒为红颜 小壮
  203. 203 天下有情人 周华健/齐豫
  204. 204 白狐 陈瑞
  205. 205 River Flows In You Martin Ermen
  206. 206 相思 毛阿敏
  207. 207 只要有你 那英/孙楠
  208. 208 Croatian Rhapsody Maksim Mrvica
  209. 209 来生缘 刘德华
  210. 210 莫失莫忘 麦振鸿
  211. 211 往后余生 王贰浪
  212. 212 雪见—仙凡之旅 麦振鸿
  213. 213 让泪化作相思雨 南合文斗
  214. 214 追梦人 阿木
  215. 215 真英雄 张卫健
  216. 216 天使的翅膀 安琥
  217. 217 生生世世爱 吴雨霏
  218. 218 爱我就跟我走 王鹤铮
  219. 219 特别的爱给特别的你 伍思凯
  220. 220 杜婧荧/王艺翔
  221. 221 I Am You Kim Taylor
  222. 222 起风了 买辣椒也用券
  223. 223 江湖笑 周华健
  224. 224 半壶纱 刘珂矣
  225. 225 Jar Of Love 曲婉婷
  226. 226 野百合也有春天 孟庭苇
  227. 227 后来 刘若英
  228. 228 不仅仅是喜欢 萧全/孙语赛
  229. 229 Time (Official) MKJ
  230. 230 纸短情长 (完整版) 烟把儿
  231. 231 离人愁 曲肖冰
  232. 232 难念的经 周华健
  233. 233 佛系少女 冯提莫
  234. 234 红昭愿 音阙诗听
  235. 235 BINGBIAN病变 Cubi/多多Aydos
  236. 236 说散就散 袁娅维TIA RAY
  237. 237 慢慢喜欢你 莫文蔚
  238. 238 最美的期待 周笔畅
  239. 239 牵丝戏 银临/Aki阿杰
  240. 240 夜的钢琴曲 K. Williams
你一定要幸福 - 何洁
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 唐恬

作曲 : 吴梦奇

沿着路灯一个人走回家

和老朋友打电话

你那里天气好吗

有什么新闻可以当作笑话

回忆与我都不爱说话

偶尔我会想起他

心里有一些牵挂

有些爱却不得不

各安天涯

在夜深人静的时候想起他

送的那些花

还说过一些撕心裂肺的情话

赌一把幸福的筹码

在人来人往的街头

想起他他现在好吗

可我没有能给你想要的回答

可是你一定要

幸福啊

沿着路灯一个人走回家

和老朋友打电话

你那里天气好吗

有什么新闻可以当作笑话

回忆与我都不爱说话

偶尔我会想起他

心里有一些牵挂

有些爱却不得不

各安天涯

在夜深人静的时候想起他

送的那些花

还说过一些撕心裂肺的情话

赌一把幸福的筹码

在人来人往的街头

想起他他现在好吗

可我没有能给你想要的回答

可是你一定要

幸福啊

在夜深人静的时候想起他

送的那些花

还说过一些撕心裂肺的情话

赌一把幸福的筹码在人来人往的街头

想起他他现在好吗

可我没有能给你想要的回答

可是你一定要

幸福啊

幸福啊

点击右上角即可分享
微信分享提示