#云原生征文#两种 Docker 镜像打包的常用方式 原创
目录
前言
正文
一、docker commit
二、docker build
结尾
前言
云原生概念的共识之一就是服务器端的应用程序部署最好使用容器化的方式,而服务容器化就是把对应服务的应用程序部打包到容器镜像中,然后通过容器的方式进行部署和运行。一般来说,Docker 打包有两种常用的方式,本文接下来分别介绍。
正文
一、docker commit
使用docker commit命令可以把一个正在运行的容器提交为一个新的镜像文件,一般步骤如下:
(1)首先拉取一个基础镜像,参考命令如下:
docker pull centos
(2)创建一个支持交互式的容器,参考命令如下:
docker run -it --name=mycentos centos:latest
(3)上传软件到容器中,参考命令如下:
docker cp xxx.tar mycentos:/root/
(4)在容器中解压压缩包,然后部署对应服务的应用程序,参考命令如下:
tar -xf xxx.tar
(5)把交互式的容器提交为一个新的镜像,参考命令如下:
docker commit mycentos mydockerservice
二、docker build
Dockerfile是一个用来构建镜像的文本文件,文本内容包含一条条构建镜像所需的指令和说明。Docker通过读取Dockerfile中的指令自动生成镜像。Docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构。Docker镜像由只读层组成,运行的容器会在Docker的镜像上面多加一层可写的容器层。任何对文件的更改都只存在容器层。因此任何对容器的操作不会影响到镜像。
使用docker build命令可以编译一个新的镜像文件,一般步骤如下:
(1)编写Dockerfile文件
Dockerfile是一个用来构建镜像的文本文件,文本内容包含一条条构建镜像所需的指令和说明,实例文件如下:
From golang:1.14.2-alpine3.11 AS dev
ENV HOME /app
WORKDIR /app/gateway
COPY ./.netrc /app
COPY . /app/gateway
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache gcc musl-dev git
RUN go env -w GOPRIVATE=git.liuzhen007.com
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,direct
RUN go mod tidy
RUN go build main.go
RUN mv main gateway
ENV TZ=Asia/Shanghai
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && apk add tzdata && echo "${TZ}" > /etc/timezone && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && rm /var/cache/apk/*
WORKDIR /root/gateway/
COPY --from=dev /app/gateway/gateway .
CMD ["./gateway"]
(2)编译打包
使用docker build命令打包镜像,同时需要指定目标镜像的名称和版本号,参考命令如下:
docker build -t centos-gateway:v1 .
其中,点表示同级目录下的Dockerfile文件。
结尾
好了,至此,两种 Docker 镜像的打包方式就介绍完了。听我这么一介绍,是不是感觉非常简单,那就自己动手试一试吧!
【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598
作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄