前面一篇《前端开发Docker快速入门(一)》中简单介绍Docker的相关知识和常用命令,本篇侧中前端如何利用Docker部署代码
示例一:使用Docker来部署Vue前端项目
一、制作image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。
image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。
举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
通过下面的./Dockerfile来说明
# 继承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;"]
示例基于alpine搭建nodejs环境
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
创建好 Dockerfile 文件以后,使用docker image build命令构建 image镜像。
# 构建 image 镜像(执行行要在Dockerfile文件同级目录,因为是基于此文件来构建的)
docker image build -t kz-demo:0.0.1 .
docker build -t 镜像名称:镜像标签 .
上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。
如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
如果运行成功,就可以看到新生成的 kz-demo镜像了。
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。
# 发布镜像image文件
为本地的 image 标注用户名和版本。
$ docker image tag [imageName] [username]/[repository]:[tag]
# 实例
$ docker image tag kz-demos:0.0.1 docker-ref-release-local/kz-demos:0.0.1
标注好后就可以发布
docker image push [username]/[repository]:[tag]
# 实例
$ docker image push 192.168.1.128:5000/nodejs10:1.0.0 # 推送镜像到本地仓库
二、使用image镜像
1、如果是本地创建或者已经有的镜像
可以直接基于这个镜像创建运行容器
$ docker run -itd -p 9090:80 -v ~/dist/static:/kuaizhan/editor/static --name kz-demo kz-demo:0.0.1
-itd 交互式后台运行容器
--name 指定容器名称
-v 本地目录指向容器中的目录
-p 本地9090端口指向容器的80
2、如果是基于远程仓库镜像生成容器,按如下操作
首先,运行下面的命令,将 image 文件从仓库抓取到本地。
$ docker image pull library/kz-demo:0.0.1
docker image pull是抓取 image 文件的命令。library/kz-demo是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,kz-demo是 image 文件的名字,0.0.1是镜像的版本。
由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
$ docker image pull hello-world
抓取成功以后,就可以在本机看到这个 image 文件了。
$ docker image ls
现在,运行这个 image 文件。
$ docker container run -p 3000:80 -it kz-demo:0.0.1 /bin/bash
docker container run命令会从 image 文件,生成一个正在运行的容器实例。
注意,docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
上面命令的各个参数含义如下:
-p参数:容器的 80 端口映射到本机的 3000 端口。
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。,-i: 交互式操作,-t: 终端, -d: 指定容器的运行模式,后台运行
koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
3、容器相关操作命令
# 查看所有的容器
docker ps -a
# 启动
docker start b750bbbcfd88 容器id
# 停止
docker stop <容器 ID>
# 删除
docker rm containerID
# 进入容器
docker attach containerID
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止
docker exec -it containerID /bin/bash
# 导出
docker export 1e560fca3906 > ubuntu.tar
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
【mack上持久化数据】
# 创建卷
docker volume create jenkins-data
# 可以看当前所有的volume
docker volume ls
# 获取volume在docker 虚拟机中的位置
docker volume inspect [volume name]