MacOS上Docker实践(四)

698 阅读3分钟

「这是我参与2022首次更文挑战的第八天,活动详情查看:2022首次更文挑战

前言

前面我们说了 Docker 的镜像和容器,知道了拉取,删除镜像文件以及容器的创建,删除等操作,这里我们来说下镜像的创建相关。

开始

镜像的创建需要说到 Dockerfile 文件,Dockerfile 文件是一个文本文件,Docker 根据这个文件生成二进制的镜像文件

镜像构建可以使用命令 docker build

首先我们在项目的根文件夹下创建一个 .dockerignore, 在文件中添加一下内容,

.git
node_modules

这样就可以把不要把打包进镜像的文件和目录排除了,然后在新建一个 Dockerfile 文件,

截屏2022-02-21 下午10.47.04.png

一般来说,镜像的构建就是当前 Dockerfile 文件的上下文的根目录中,当然我们也可以使用参数 -f 来指向任意位置的 Dockerfile 文件

比如在当前目录就是 docker build ., 或者使用参数指向任意位置 docker build -f /path/xxx/Dockerfile .

Dockerfile 文件由四部分组成,基础镜像信息,维护者信息,镜像操作指令和容器启动时的指令

Dockerfile 文件中的指令不区分大小写,但是我们都习惯将它小写,主要是方便区别参数,Docker 按照从上到下的顺序执行 Dockerfile 文件中的指令,# 开头的为注释

常用指令

FROM:指定基础镜像,必须为第一个命令
MAINTAINER: 维护者的信息
RUN: 构建镜像时的命令
ADD: 将本地文件添加到容器中,如果是tar文件,可以访问网络资源
COPY: 类似ADD,但是不会自动解压文件
CMD: 容器构建后调用
ENTRYPOINT: 配置容器
LABEL: 为镜像添加元数据
ENV: 设置环境变量
EXPOSE: 指定和外界交互的端口
VOLUME:用于持久化的目录
WORKIR: 工作目录
USER: 用于指定容器运行的UID
ARG: **用于指定传递给构建运行时的变量**
ONBUILD: **用于设置镜像触发器**

这里有个例子

FROM node:10-alpine as builder

ENV PROJECT_ENV production
ENV NODE_ENV production

# http-server 不变动也可以利用缓存
WORKDIR /work

ADD package.json /code
RUN npm install --production

ADD . /work
RUN npm run build

# 选择更小体积的基础镜像
FROM nginx:10-alpine
COPY --from=builder /work/public /usr/share/nginx/html

一般情况下,一个容器我们建议只做一件事。

单个容器的启动和停止我们操作起来不难,但是容器的数量多到一定程度的时候,我们操作起来就很麻烦了,这里 Docker 提供了一中很简单的方法,来管理多个容器

Docker compose 是 Docker 公司提供的一个工具,需要我们定一个 YAMl 格式的配置文件 docker-compose.yml, 使用前要进行安装,Macos 下可以使用 brew 进行安装,

可以使用 命令 docker-compose --version 查看docker compose 是否安装成功。

感谢阅读,欢迎点赞分享