前端CI/CD 不得不说的 Docker

简介: 前言大家印象中的 docker 应该是运维同学比较关心或者擅长的工具,事实也的确如此。但是在前端过程越来越复杂,甚至前端早就在中台 node 占据一席之地的现在,docker 也越来越多地出现在前端领域。本篇文章站在前端开发者的角度来看 docker,介绍其基本概念及使用,希望通过阅读可以让大家对 docker 有个基础认识。

前言

大家印象中的 docker 应该是运维同学比较关心或者擅长的工具,事实也的确如此。但是在前端过程越来越复杂,甚至前端早就在中台 node 占据一席之地的现在,docker 也越来越多地出现在前端领域。

本篇文章站在前端开发者的角度来看 docker,介绍其基本概念及使用,希望通过阅读可以让大家对 docker 有个基础认识。


docker


在谈 docker 之前,我们先回想下搭建服务的过程,无论是搭建后端服务,还是爬虫等,我们首先得在本机上配置语言相关的环境,如编译器,变量环境等等,有时候还得下载对应的数据库。反正就是需要一系列的环境准备,经常配置个老半天的还可能被某个步骤卡住了。

在本机开发完成,需要部署线上环境的时候,往往又得跑一遍相同环境配置,因为计算机环境不同,配置也并不会一帆风顺。明明在我本机上这样可行的,但是在他人机器上却不行了。

所以 docker 的出现就是为了解决服务迁移过程中的这种不确定性,既然环境不同会引起一系列差异问题出现,那我干脆连环境一起迁移好了。

类似于虚拟机,docker 也是提供一份隔离环境,叫做容器。但是相比于虚拟机而已,它却非常的节约资源,高效。

2.png


docker 相关的概念

docker

在我的理解,docker 提供的是一份引擎、工具,安装的时候也会提供可视化的桌面应用,实际上这不是必须的。

安装(macOS)

brew install docker


安装后验证是否成功

docker -v


镜像 Image


镜像是指 (服务 + 环境)的集合,也可以比作语言中的类,比如在将本机配置好的环境和服务打包成镜像,有了镜像,别人就可以生产一模一样的环境和服务,不需要再处理计算机环境的差异。

以 niginx 为例

查找镜像

docker search nginx


下载镜像(很像克隆git仓库或者npm下载包)

docker pull nginx:latest
复制代码

查看镜像列表

docker image ls
复制代码

删除镜像(imageId在镜像列表中可以查到)

docker image <imageId>


容器 Container

3.png

容器可以理解为运行镜像后生成的整个环境,可以比作语言中的实例。我们通过生成容器将镜像实例化,以后对服务或者环境的相关操作其实就是在容器中进行的,更改的是容器相关的配置或者数据。

生成容器,

docker run -d -p 8080:80 nginx

相关参数含义

  • d 后台运行
  • p 端口映射 <计算机>:<容器> 即将对主机 8080 的访问 映射到对容器 80 端口的访问
  • nginx 镜像

查看容器列表

docker container ls
复制代码

删除容器(containerId在镜像列表中可以查到)

docker container rm <containerId>
复制代码

启动 停止 重启

docker start|stop|restart <containerId>


仓库

类似 npm 包的仓库,docker 官方也会提供热门的服务镜像在上面。比较简单,就不多说。

docker search <image>
复制代码
docker pull <image>


举个🌰


我们来试试怎么启动个 nginx 服务

先查找仓库中有没有对应的镜像

docker search nginx
复制代码

下载镜像

docker pull nginx
复制代码

生成并启动容器

docker run -d -p 8080:80 nginx
复制代码

打开 http://localhost:8080 查看成功页面

更改配置


方式一


我们可以通过复制命令来更改容器配置

先从容器内复制到容器外面

docker cp <containerId>:/etc/nginx/nginx.conf <localpath>/nginx.conf
复制代码

再从容器外面复制到容器里面

docker cp <localpath>/nginx.conf <containerId>:/etc/nginx/nginx.conf
复制代码

重启容器

docker restart <containerid>


方式2

也可以进入容器直接修改配置文件

进入容器

docker exec -it <containerId> bash 
复制代码
  • i 交互式
  • t 终端

下载 vim

apt-get update
apt-get install vim
复制代码

修改文件

vim etc/nginx/nginx.conf


其他

实际还有一些重要的概念没有讲到

Dockerfile

自定义镜像的配置文件,类似 package.json,可以在其他镜像的基础上进一步配置我们的自定义镜像。

docker build <imagename>
复制代码

Docker Compose

用于组合不同镜像,例如你需要同时使用后端服务和数据库镜像,一起配置使用

现在安装 docker 的时候会自动安装 Compose

docker-compose -v
复制代码

通过 docker-compose.yml 定义组合,例如

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"
复制代码

运行

docker-compose up



结语

docker 的使用实际上非常方便,主要在不同的计算机下载好了 docker,就可以很方便地迁移服务等。对于运维来说如果可以放在 docker 中的服务,意味着可以实现一次配置,到处使用。前端工程化及中台相关的服务也可以通过 docker 来进行搭建。



相关文章
|
2月前
|
资源调度 前端开发 Shell
[docker] DevContainer高效开发(第二篇):前端开发体验
上面的配置只是最基本的配置,大部分情况我们是需要自定义配置,让容器更符合我们的需求。自定义配置就需要用到 Dockerfile,这个文件是 docker 的配置文件,可以在里面安装软件,配置环境等等。Dockerfile 的语法可以参考 官方文档。然后根据自己的需求编写 Dockerfile# 设置变量,由 .devcontainer.json 中的 args 传入# 指定 node 版本# 设置编码# 设置工作目录# 挂载 volume# 设置 bash 为默认 shell。
|
1月前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
111 0
|
8天前
|
jenkins Java 持续交付
Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战
|
5月前
|
前端开发 应用服务中间件 nginx
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
|
2月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
65 0
|
2月前
|
前端开发 Java 网络安全
解决docker中运行的jar包连不上前端程序
解决docker中运行的jar包连不上前端程序
|
4月前
|
前端开发 JavaScript 应用服务中间件
WEB前端有必要学会docker吗?0基础-45分钟带你学会(包含视频笔记案例源代码)
WEB前端有必要学会docker吗?0基础-45分钟带你学会(包含视频笔记案例源代码)
30 0
|
4月前
|
存储 jenkins 持续交付
百度搜索:蓝易云【Docker+Rancher+Harbor+GitLab+Jenkins搭建CI/CD环境】
请注意,上述步骤仅为一个示例,实际搭建过程可能因环境和需求的不同而有所变化。因此,在实际操作中,请参考相应工具的官方文档和指南,以确保正确地配置和集成这些工具。
62 3
|
4月前
|
前端开发 应用服务中间件 nginx
Docker 安装 Nginx 部署前端项目
Docker 安装 Nginx 部署前端项目
314 1
|
5月前
|
jenkins 测试技术 持续交付
深入理解CI/CD与Docker集成:自动化构建和部署的完整指南
在当今软件开发的快节奏环境中,自动化构建和部署是实现敏捷开发和DevOps实践的关键。Docker容器技术为这一过程引入了更高的灵活性和一致性。本文将深入研究如何将持续集成/持续部署(CI/CD)与Docker集成,提供更详细、实用的示例代码,以帮助大家全面了解并成功应用这一重要的DevOps实践。