前端开发Docker快速入门(二)制作镜像并创建容器
<p>前面一篇《前端开发Docker快速入门(一)》中简单介绍Docker的相关知识和常用命令,本篇侧中前端如何利用Docker部署代码</p><p> </p>
<p>示例一:使用Docker来部署Vue前端项目</p>
<p><strong>一、制作image 文件</strong></p>
<p>Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。<br>image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。</p>
<p>image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。<br>举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。</p>
<p> </p>
<p>通过下面的./<strong>Dockerfile</strong>来说明</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;"># 继承node:12-alpine这个镜象来实现,镜像已经包含nodejs和alpine
FROM node:12-alpine
# 在alpine中安装nginx
RUN apk add nginx
# 将本地nginx.conf的配置覆盖镜象中默认的配置,主要是指定我们前端项目的部署路径
COPY ./docker/nginx.conf /etc/nginx
# 将VUE项目编译打包后的代码 复制 到镜象中,也就是nginx服务器80端口的root指向目录
COPY ./dist /kuaizhan/editor
# 暴露80端口
EXPOSE 80
# 运行nginx服务
CMD ["nginx", "-g", "daemon off;"]</pre>
</div>
<p>示例基于alpine搭建nodejs环境</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">FROM alpine:3.12
# apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.12/main/ --allow-untrusted
# 替换的源
ENV ALPINE_MIRROR "http://mirrors.ustc.edu.cn"
RUN echo "${ALPINE_MIRROR}/alpine/v3.12/main/" > /etc/apk/repositories
RUN echo "${ALPINE_MIRROR}/alpine/v3.12/community/" >> /etc/apk/repositories
# RUN apk add --no-cache nodejs-current--repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
# RUN node --version
ENV NODE_VERSION=12.18.4
# ENTRYPOINT ["docker-entrypoint.sh"]
# 同步时间
# RUN apk update && apk upgrade && apk add -U tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && apk del tzdata
# 同步时间
# 更新源、安装openssh 并修改配置文件和生成key 并且同步时间
RUN apk update && apk upgrade && \
apk add --no-cache tzdata bash curl nginx nodejs npm && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && apk del tzdata && \
mkdir /run/nginx && \
node -v && npm -v && bash --version && curl -V
ENTRYPOINT [ "nginx", "-g", "daemon off;" ]
LABEL author=Webplus
LABEL maintainer=wanglin2020@gmail.com
LABEL org.label-schema.build-date= org.label-schema.license=MIT org.label-schema.name=node-alpine
# CMD ["/bin/sh"]
# docker image build -t nodejs:12.18.4-alpine .
# docker run -itd -p 8000:80 --name node-apline1.5 nodejs:12.18.4-alpine
# docker tag nodejs:12.18.4-alpine repo.pab.com.cn/docker-ref-release-local/nodejs:12.18.4-alpine
# docker push repo.pab.com.cn/docker-ref-release-local/nodejs:12.18.4-alpine
# docker pull repo.pab.com.cn/docker-ref-release-local/nodejs:12.18.4-alpine
# docker exec -it <CONTAINER_ID> /bin/bash
</pre>
</div>
<p> </p>
<p>创建好 Dockerfile 文件以后,使用docker image build命令构建 image镜像。</p>
<p><strong># 构建 image 镜像(执行行要在Dockerfile文件同级目录,因为是基于此文件来构建的)</strong></p>
<p>docker image build -t kz-demo:0.0.1 .<br>docker build -t 镜像名称:镜像标签 .</p>
<p>上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。</p>
<p>如果不指定,默认的标签就是latest。最后的<strong>那个点</strong>表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。</p>
<p>如果运行成功,就可以看到新生成的 kz-demo镜像了。</p>
<p><strong># 列出本机的所有 image 文件。</strong><br>$ docker image ls</p>
<p><strong># 删除 image 文件</strong><br>$ docker image rm </p>
<p>为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。</p>
<p><strong># 发布镜像image文件</strong></p>
<p>为本地的 image 标注用户名和版本。<br>$ docker image tag /:<br># 实例<br>$ docker image tag kz-demos:0.0.1 docker-ref-release-local/kz-demos:0.0.1</p>
<p>标注好后就可以发布</p>
<p>docker image push /:<br># 实例<br>$ docker image push 192.168.1.128:5000/nodejs10:1.0.0 # 推送镜像到本地仓库 </p>
<p> </p>
<p><strong>二、使用image镜像</strong></p>
<p><strong>1、如果是本地创建或者已经有的镜像</strong></p>
<p>可以直接基于这个镜像创建运行容器<br>$ docker run -itd -p 9090:80 -v ~/dist/static:/kuaizhan/editor/static --name kz-demo kz-demo:0.0.1</p>
<p>-itd 交互式后台运行容器</p>
<p>--name 指定容器名称</p>
<p>-v 本地目录指向容器中的目录</p>
<p>-p 本地9090端口指向容器的80</p>
<p> </p>
<p><strong>2、如果是基于远程仓库镜像生成容器,按如下操作</strong><br>首先,运行下面的命令,将 image 文件从仓库抓取到本地。</p>
<p>$ docker image pull library/kz-demo:0.0.1</p>
<p><em id="__mceDel">docker image pull是抓取 image 文件的命令。library/kz-demo是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,kz-demo是 image 文件的名字,0.0.1是镜像的版本。</em></p>
<p>由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。</p>
<p>$ docker image pull hello-world<br>抓取成功以后,就可以在本机看到这个 image 文件了。</p>
<p>$ docker image ls<br>现在,运行这个 image 文件。</p>
<p><strong>$ docker container run -p 3000:80 -it kz-demo:0.0.1 /bin/bash</strong><br>docker container run命令会从 image 文件,生成一个正在运行的容器实例。<br>注意,docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。</p>
<p>上面命令的各个参数含义如下:</p>
<p>-p参数:容器的 80 端口映射到本机的 3000 端口。<br>-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。,-i: 交互式操作,-t: 终端, -d: 指定容器的运行模式,后台运行<br>koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。<br>/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。</p>
<p> </p>
<p><strong>3、容器相关操作命令</strong></p>
<p># 查看所有的容器<br>docker ps -a<br># 启动<br>docker start b750bbbcfd88 容器id<br># 停止<br>docker stop <容器 ID><br># 删除<br>docker rm containerID<br># 进入容器<br>docker attach containerID<br>docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止<br>docker exec -it containerID /bin/bash<br># 导出<br>docker export 1e560fca3906 > ubuntu.tar<br>cat docker/ubuntu.tar | docker import - test/ubuntu:v1</p>
<p>【mack上持久化数据】</p>
<p># 创建卷</p>
<p>docker volume create jenkins-data</p>
<p># 可以看当前所有的volume</p>
<p>docker volume ls</p>
<p># 获取volume在docker 虚拟机中的位置</p>
<p>docker volume inspect </p>
<p> </p><br><br>
来源:https://www.cnblogs.com/terrylin/p/14092397.html
頁:
[1]