《小团队web技术搭建》(八)Docker+持续部署

简介: 《小团队web技术搭建》(八)Docker+持续部署
欢迎关注系列专栏《小团队web技术搭建》


《小团队web技术搭建》(一)环境和工具的准备-第一部分

《小团队web技术搭建》(二)环境和工具的准备-第二部分

《小团队web技术搭建》(三)环境和工具的准备-第三部分

《小团队web技术搭建》(四)虚拟机的安装使用

《小团队web技术搭建》(五)项目的简单部署方式

《小团队web技术搭建》(六)自动化部署方式(CI/CD)(一)

《小团队web技术搭建》(七)自动化部署方式(CI/CD)(二)

持续更新中...

以前要是上一个新项目,运维人员就要去安装它所需要的环境。比如一个典型的spring项目,需要给他装java/mysql/redis等等,如果管理不当,很容易造成让机器显得混乱,进程过多资源浪费、甚至互相占用端口等等。

docker的出现让运维省了很多事,所以我们需要在CI/CD中让它参与进来,帮助我们制作一个项目运行的容器环境,不再需要手工去维护这些繁琐的环境依赖。

Dockerfile简介

如果我们想自动生成镜像,必须要有一处地方去描述镜像的细节,告诉我们基于什么镜像、运行什么命令、复制什么文件、映射什么端口等等。

Dockerfile就是这个镜像描述文件,一般会放到项目根目录下,它由一些简单的命令组成,比如一个nodejs项目的Dockerfile大致的内容是这样:

# 基于什么镜像
FROM node:lts-alpine

# 工作目录
WORKDIR /

# 复制文件
COPY package.json /

# 运行命令
RUN npm install
RUN npm run build

FROM nginx:alpine

COPY /nginx/ /etc/nginx/
COPY /dist/ /usr/share/nginx/html/

# 开放端口
EXPOSE 80

完整的Dockerfile文件指令在我们这里不是重点,读者可以自行查找资料学习。

测试一下

我们在原来一个实例项目(一个极简的前端项目)的基础上进行升级,把Dockerfile加进去,文件目录变成:

image.png

编写Dockerfile文件:

FROM node:lts-alpine as builder

WORKDIR /

COPY / /

RUN npm install --registry=https://registry.npm.taobao.org
RUN npm run build

FROM nginx:alpine

COPY /nginx.conf /etc/nginx/
COPY --from=builder /dist/ /project/demo-dockerfile/

# 暴露端口
EXPOSE 80

配置nginx:

user  www;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
  worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log /var/log/nginx/access.log main;

  keepalive_timeout 65;

  server {
    listen 80;
    server_name localhost;

    location / {
      root /project/demo-dockerfile;
      index index.html index.htm;
    }
  }
}

为了节省时间我们可以在本地安装docker去测试Dockerfile是否能顺利生成镜像。

使用docker生成镜像的命令如下:

docker build -t dockerfile-test:1.0 .

其中dockerfile-test是我们给他取的镜像名字,1.0是镜像的版本号,最后一个.点好是表示Dockerfile文件的位置在当前目录。我们测试生成镜像成功了。

image.png

并尝试用这个镜像运行一份容器,我们需使用docker run创建容器:

docker run --name dockerfile-demo -p 8991:80 -d dockerfile-test:1.0
  • --name dockerfile-demo 给容器起名字
  • -p 8991:80 将容器80端口映射到宿主主机8991端口
  • -d 后台运行
  • dockerfile-test:1.0 指定要运行的镜像名和版本号

确认容器在运行,并让nginx成功代理了页面:
image.png

image.png

加入到流水线

我们在上一篇文章介绍使用飞流,我们再新建一个流水线:

image.png

image.png

其中部署脚本为,主要做了文件解压和运行start.sh:

BASE_PATH=/www/projects/demo/demo-dockerfile-ci
PROJECT_PATH=/www/projects/demo/demo-dockerfile-ci/demo/dockerfile-demo

tar zxvf $BASE_PATH/package.tgz -C $BASE_PATH

chmod +x $PROJECT_PATH/start.sh
$PROJECT_PATH/start.sh

start.sh文件如下,该文件也保存在项目目录下:

if [[ -n $(docker ps -q -f "name=^dockerfile-test$") ]];then
  docker stop dockerfile-test
  docker rm dockerfile-test
fi

docker run --name dockerfile-test -p 8991:80 -d dockerfile-test:1.3 
docker start dockerfile-test

主要是判断有没有同名容器在运行,有的话就删除它,并构建镜像和运行容器。

好了,流水线配置完毕,我们运行下流水线。

image.png

检查部署页面:

image.png

就此我们已经完成Docker辅助CI/CD,不过在实际的生产中,部分项目的部署流水线、构建脚本、运行脚本都会比较复杂,可以慢慢学习。

感谢阅读!欢迎关注系列专栏《小团队web技术搭建》
相关文章
|
7天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
6天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
54 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
17天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
56 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
4天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
7天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
7天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
7天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
17 1
|
13天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
33 1
|
17天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
19天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
46 2