一起养成写作习惯!这是我参与「掘金日新计划 · 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"]
参考资料: