Skip to content

3、vscode想要对.tf文件语法的话,这里需要安装Terraform插件:

image-20220412202300625

image-20220412202356331

2、定义Jenkins容器的资源tf文件

1️⃣ 创建Jenkins数据目录

bash
[root@devops ~]#mkdir -p /data/devops4/jenkins_home[root@devops ~]#chmod -R 777 /data/devops4/jenkins_home/

2️⃣ 定义Jenkins容器的资源tf文件

在devops目录下创建如下2个文件:

jenkins.tf

terraform
### 定义docker镜像(jenkins.tf)resource"docker_image""jenkins"{name="jenkins/jenkins:2.332.2-centos7-jdk8"keep_locally=true}resource"docker_container""jenkins"{image=docker_image.jenkins.namename="devops_tutorial"ports{internal=8080external=8080}ports{internal=50000external=50000}volumes{container_path="/var/jenkins_home"host_path="/data/devops4/jenkins_home"}}

main.tf

terraform
# 定义provider(main.tf)terraform{required_providers{docker={source ="kreuzwerker/docker"version ="~>2.13.0"}}}provider"docker"{}

3、terraform init 初始化

bash
[root@devops remote-vscode]#terraform init

image-20220414084938622

4、terraform plan 预览

bash
[root@devops remote-vscode]#terraform plan

image-20220414085011712

5、terraform apply 部署

bash
[root@devops remote-vscode]#terraform apply

image-20220414085052383

6、验证

bash
[root@devops remote-vscode]#docker ps |grepjenkins

image-20220414085145859

http:-docker命令-docker-compose-本地用tf来管理docker环境:tf有一个provider,一个插件,它是支持管docker的。所以,我们后面一个tf模板就把整个实验环境就跑起来了,最终可以一键拉起来。但是TF比较厉害,它的插件支持k8s,就是你不想使用yaml来管理k8s里的资源,那么TF也是可以通过插件来管理k8s里的资源的。此时,就行就需要你来写Tf的provider插件来着,但是还是yaml好使。这个TF太牛了!!(tf:管理你的基础设施的。)但这个工具也存在一定的危险性,我可以一键去创建,也可以一键去销毁。老师大力推荐!

📍 ansible和terraform的区别?

答:ansible和TF他们不是一个级别的东西: TF它管理的是你的服务器,其实TF主要是针对这个云供应商的,创建这些机器、网络、vpc……ansible是实现基础设置之上的,应用部署这块的; 他两之间可以结合去用;

📍 待提问:provider "docker"{……} 2375端口问题

image-20220412201923930

如果是本机的话,provider "docker"{……}这里可以省略!

🍀 老师这里有监听到这个包2375端口,但是为什么我自己的没有呢?但是可以可以成功部署jenkins容器。

老师说是docker服务默认监听的端口。。。。;😥

老师现象:

image-20230921084156036

自己现象:

image-20220416101003652

📍 搁置问题:如何在terraform里添加env,老师当时添加时报错了。。。

image-20220412215808332

📍 这个terraform网站是真的慢。。。

image-20220412213831635

📍 terraform命令

bash
terraforminit初始化terraformplan预览terraformapply部署

🍀 初始化

bash
terraforminit

image-20220412210533578

插件下载后存放位置:

image-20220412211501990

🍀 预览

bash
terraformplan

image-20220412211629951

image-20220412211710758

🍀 部署

bash
terraformapply

image-20220412211745866

image-20220412211840282

⚠️ 可以指定单个文件来来部署:

image-20220605093308741

🍀 销毁资源命令

bash
terraformdestroy

image-20220412210437676

📍 terraform使用方法

registry.terraform.io是terraform的仓库

image-20220412204044454

点击Browse Provider

image-20220412204132272

搜索docker

image-20220412204221416

image-20220412204251325

image-20220412204316200

使用文档:

image-20220412204405864

📍 测试:测试使用terraform命令销毁容器后,宿主机上的数据还在吗?-2022.5.5

bash
terraformdestroy

🍀 测试问题

  1. 使用terraform命令销毁容器后,宿主机上的数据还在吗
  2. 如果在的话,那么如果更新了gitlab.tf文件后,再次执行terraform apply后,需要提前删除宿主机上持久上的数据吗?-->猜测:应该是不需要的!

🍀 已经部署成功的gitlab实例

image-20220505094539389

image-20220505094551797

image-20220505094623822

查看下宿主机上持久了gitlab容器的目录:

image-20220505094725739

可以看到,当前是存在数据的!

🍀 此时,直接销毁刚才那个gitlab.tf那个资源

image-20220505094852590

image-20220505094915856

🍀 验证

可以看到之前创建的资源被删除了,但是持久到宿主机上的数据都还在;

image-20220505095005390

image-20220505095039951

📍 注意:如果镜像很大,可先用docker拉取下下来,再执行terraroem命令!

image-20220505100138221

image-20220505100125352

📍 测试:使用terradorm安装时应该不需要先在宿主机上创建相应目录把…?

image-20220524074010285

  • 开始测试:

image-20220524074834654

image-20220524074845484

  • 总结:

奇怪,没有自动在宿主机上创建相应应用目录,也是可以把这个应用跑起来的!!!

这个就感觉有点奇怪了……

之前的应用都是有手动创建宿主机上目录的;

image-20220524075037673

image-20220524075050585

本次就先放这里吧,作为一个遗留问题,后续统一学习terradrom时再研究;

📍 方法:terraform里这种用法!

image-20220524081646990

yaml
locals {volumes =[{container_path ="/data/devops4/sonarqube/sonarqube_conf"host_path ="/opt/sonarqube/conf"},{container_path ="/data/devops4/sonarqube/sonarqube_extensions"host_path ="/opt/sonarqube/extension"},{container_path ="/data/devops4/sonarqube/sonarqube_logs"host_path ="/opt/sonarqube/logs"},{container_path ="/data/devops4/sonarqube/sonarqube_data"host_path ="/opt/sonarqube/data"}]}resource "docker_image""sonar"{name ="sonarqube:8.9.8-community"keep_locally =true 
}resource "docker_container""sonarqube"{image =docker_image.sonar.namename ="sonarqube"ports {internal =9000external =9000}dynamic "volumes"{for_each =local.volumescontent {container_path =volumes.value["container_path"]host_path =volumes.value["host_path"]}}}

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http:

版权:此文章版权归 One 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

上次更新时间:

最近更新