前端开发Docker快速入门(二)制作镜像并创建容器

前面一篇《前端开发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] 

 

posted on 2020-12-06 13:24  稻草人.Net  阅读(870)  评论(0编辑  收藏  举报