惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

O
OpenAI News
Microsoft Azure Blog
Microsoft Azure Blog
量子位
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
GbyAI
GbyAI
The Cloudflare Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 叶小钗
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
Attack and Defense Labs
Attack and Defense Labs
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Darknet – Hacking Tools, Hacker News & Cyber Security
IT之家
IT之家
Schneier on Security
Schneier on Security
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
Hacker News - Newest:
Hacker News - Newest: "LLM"
G
GRAHAM CLULEY
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Heimdal Security Blog
L
LINUX DO - 热门话题
S
Security @ Cisco Blogs
F
Fortinet All Blogs
Webroot Blog
Webroot Blog
腾讯CDC
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
T
Threatpost
S
Secure Thoughts

博客园 - 稻草人.Net

Python多环境管理神器pyenv+poetry python包管理利器poetry和conda使用简介 Spring REST 接口自定义404不能捕获NoHandlerFoundException问题 MacOS 安装Podman 替代Docker Prettier + ESLint + TS常用配置项 React Native V0.64.4版本 开发环境搭建及问题 Nodejs环境Eggjs加签验签示例 Mac安装compass失败相关问题 MySQL手动安装方法 Docker+Jenkins更换国内插件源 Chrome91版本 SameSite cookies 被移除后的解决方法 推荐几个文档中心搭建工具 微信开放平台-第三方平台代小程序实现业务 微信开放平台-第三方平台授权流程及接口概述 Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王 尝试使用Nestjs搭建GraphQL服务 Mac安装Arduino搭建ESP8266 NodeMCU开发环境 用vscode进行jest单元测试并调试代码 vscode配置typescript和eslint的环境
前端开发Docker快速入门(二)制作镜像并创建容器
稻草人.Net · 2020-12-06 · via 博客园 - 稻草人.Net

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