学习 Dockerfile ,制定自己的镜像

147 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

使用命令创建容器

每次创建一个镜像都会经历以下步骤:

1、从 Docker 镜像仓库拉取镜像,可以指定镜像版本号,如果没有加版本号的时候都会默认加载最新版本。

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]# 例子 mysql 为例子,
docker pull mysql

2、有了镜像后,就可以根据镜像启动并运行一个容器。运行容器命令是 docker run

docker run -it --name [name] -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql
  • -it 是两个参数 -i 交互式操作,-t 终端
  • --name 容器的名称,
  • -p 设置端点 将容器的端口映射到宿主机的端口
  • -e MYSQL_ROOT_PASSWORD 初始化 root 用户的密码
  • -d 在后台运行容器且输出容器 ID

这样,就成功创建一个mysql的容器。但有时候环境需要移植的时候,总不可能都是去执行命令去创建。所以,可以看看 dockerfile ,定制一个专属镜像,且只需给别人这个文件,对方就可以运行一个和你一样的镜像。

Dockerfile

Dockerfile 是一个文本文档,就是将我们需要创建环境和一些配置的指令都放在文本中,然后通过 docker build 构建一个镜像。

需要先了解下 Dockerfile 的各个指令:

From 指定基础指令

所有定制的镜像都必须以一个镜像为基础,然后在其基础之上进行定制化配置。From 指令就是指定基础镜像,并且必须是第一条指令

RUN 执行命令

run 指令就是执行命令行命令的,其格式如下:

第一种格式:shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样

From mysql:laste
​
RUN apt-get update

第二种格式:exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式。

RUN ["main.js", "node"]

From 和 Run 指令是 docker 里必备的指令。

其他常用的指令

  • COPY 复制文件:构建上下文目录中 <源路径> 的文件 / 目录复制到新的一层的镜像内的 < 目标路径 > 位置
COPY [--chown=<user>:<group>] <源路径> <目标路径> (常用)
COPY [--chown=<user>:<group>] ["<源路径1>", "<目标路径>"]
  • ADD 复制指令,但比COPY 更高级
  • CMD 容器启动命令

  • ENV 设置环境变量

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...
    
  • ARG 构建参数 和 ENV指令也是设置环境变量,仅作为参数,在容器运行时这些参数不存在

  • EXPOSE 暴露端口

  • WORKDIR 指定工作目录

定制 nginx 镜像 Demo

FROM mysql:5.7
​
#设置免密登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes#将所需文件放到容器中
COPY XXXX.sh /mysql/XXX.sh 
​
#设置容器启动时执行的命令
CMD ["sh", "/mysql/XXXX.sh"]

参考资料:

  1. yeasy.gitbook.io/docker_prac…
  2. learnku.com/articles/49…