基础知识-K8s(docker jenkins git gitlab)部分
(0531,更新到k8s实战wordpress项目)
资料来源
roadmap.sh
一小时学会Git | GeekHour
Docker部分
Docker(容器)到底是什么
我的例子
预制菜的做法。为了能让使用者都能同一种食材和同一种烹饪方法,我特意在中央厨房,将一种菜式里的食材处理到半熟或者全熟的状态,然后用真空的包装包好,之后在仓库里存放。使用者通过网店购买,快递拿到手后,通过说明将预制菜进行烹饪。达到了同一种菜式同一种食材和同一种烹饪方法。
镜像到底是什么
就是Linux的文件系统,包含了可以运行Linux的内核程序和响应数据
联合文件系统是什么
联合文件系统(也称为UnionFS)在Docker的整体功能中起着至关重要的作用。它是一种独特的文件系统类型,通过覆盖多个目录创建虚拟的分层文件结构。与修改原始文件系统或合并目录不同,UnionFS支持在单个挂载点上同时挂载多个目录,同时保持它们的内容分开。这个特性在Docker上下文中特别有用,因为它允许我们通过最小化重复和减小容器映像大小来管理和优化存储性能。
以下是联合文件系统的一些基本特性:
分层结构:UnionFS构建了一个由多个只读层和一个顶层可写层组成的分层结构。这种结构只更新可写层,而只读层保留原始数据,从而有效地处理更改。
写时复制(Copy-on-Write): COW (Copy-on-Write)机制是UnionFS不可或缺的特性。如果容器更改了现有文件,系统将在可写层创建该文件的副本,而只读层中的原始文件不受影响。此过程将修改限制在最顶层,确保快速且资源高效的操作。
资源共享:联合文件系统允许多个容器在单独运行时共享公共基础层。避免资源重复,节省大量存储空间。
快速容器初始化:联合文件系统可以通过在现有只读层上创建一个新的可写层来立即创建新容器。这种快速初始化减少了重复文件操作的开销,最终提高了性能。
Docker中流行的联合文件系统
Docker支持多个联合文件系统,以方便构建和管理容器。一些受欢迎的选择包括:
AUFS (Advanced Multi-Layered unified Filesystem): AUFS被广泛用作Docker存储驱动程序,实现了对多层的高效管理。
OverlayFS(覆盖文件系统):OverlayFS是Docker支持的另一个联合文件系统。与AUFS相比,它使用一种简化的方法来创建和管理覆盖目录。
Btrfs (B-Tree Filesystem): Btrfs是一种现代文件系统,除了快照和校验和等高级存储特性外,还提供了与联合文件系统的兼容性。
ZFS (Z文件系统):ZFS是一个高容量和健壮的存储平台,它提供联合文件系统特性以及数据保护、压缩和重复数据删除。
Dockerfile
Docker命令
Git部分
一小时学会Git | GeekHour
git教程 | GeekHour
例子
代码的数据库。每个人都有一个数据库在自己电脑里,然后只需要发布后进行同步就能得到新的数据。
发布文件像Docker一样的操作,自己写好代码,然后上传index,最后提交到仓库。
分支管理
一个程序像树(main)一样,分支就是树杈,分别有开发(dev)、功能(feat)、修补(hotfix)、发布(release)
有一个主干(main)和三个大树杈(hotfix、release、dev)。其中一树杈有无数的小树杈(feat),可以合并到大树杈或者剪掉(git branch -d <branch-name>)
小树杈(feat)生长完后的营养会合并(merge)到大树杈(dev),还要手动剪掉。又或者可以通过嫁接(rebase)的方式放到大树杈上。
小树杈合并时有可能会冲突。我们需要先手动修剪(修改冲突内容),然后放到暂存区(git add .),再提交(git commit -m "fix")
CI/CD工具
什么是CI、CD、CD
例子
我们的git仓库提交代码要经过工作区到暂存区到本地仓库。我们提交代码前需要进行编译、测试和部署来测试可用性。
持续集成(CI)就是把编译、测试和部署的自动化。当代码提交后,会触发CI操作。如果过程中出现问题,会返回给开发人员。
持续交付(CD)就是在CI操作之后,由开发人员或运维人员手动触发,发布代码到生产环境。是半自动化
持续部署(CD)就是在持续交付的基础上,全自动化发布代码。
gitlab CI/CD部分
Docker容器安装Runner | Gitlab
注册Runner
三个步骤
安装Runner
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
注册Runner
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--token "$RUNNER_TOKEN" \
--executor "docker" \
--docker-image alpine:latest \
--description "docker-runner"
将配置写入配置卷。例如:/srv/gitlab-runner/config。
容器使用配置卷来加载运行器。
如果GitLab - Runner restart运行在Docker容器中,GitLab Runner会启动一个新进程,而不是重新启动现有进程。要应用配置更改,请重新启动Docker容器。
工作流脚本
.gitlab-ci.yml(参考)
stages:
- build
- test
- deploy
build:
stage: build
tag: abc
script:
- make build
- echo "代码编译"
test:
stage: test
tag: abc
script:
- make test
- echo "测试代码"
deploy:
stage: deploy
tag: abc
script:
- make deploy
- echo "部署代码"
- scp index.html root@localhost:/usr/share/nginx/html/