我们如果一个应用部署在多台机器上,一般将代码复制到多台机器上,然后再运行,还有一种方法,将代码和镜像进行整体打包,上传到镜像库,其他机器拉取镜像直接运行,避免了机器环境不同造成的其他问题。
将应用打包到容器中,先熟悉一下dockerfile中的指令
FROM
基于哪个镜像创建的新镜像
RUN
构建镜像时,执行的命令。每使用一次RUN,都会新增一层镜像,避免镜像层数过多,我们将多条命令整合到一起
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
替换成
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
COPY、ADD
两条指令相似,不过多介绍。指令作用:将本机文件复制到镜像中
COPY . /src
就是将构建镜像的目录下的文件,复制到/src/中
CMD
与RUN相似,执行时间点不同
- RUN在构建镜像时执行
- CMD在镜像生成容器时执行
如果存在多个CMD指令,仅最后一个生效
CMD go run main.go
**ENTRYPOINT **
与CMD相似,不会被docker run 指定的参数指令所覆盖
ENTRYPOINT ["go" , "run" , "main.go"]
ENV
设置环境变量。在设置之后可以被使用。
EXPOSE
指定暴露的端口,生成容器时,-p默认映射端口
WORKDIR
工作目录
LABEL
以键值对的形式存在,可以记录镜像作者等。
LABEL maintainer="xiang"
最后生成镜像,注意生成镜像的命令需要在Dockerfile所在目录执行
docker build -t web:latest .