作者学习环境:VMware虚拟机,centos7。
本人小白一枚,基础知识比较薄弱,有技术描述不当之处,请各位大佬指正。
当前学习(2022.5.13)完全参考同网站大佬juejin.cn/user/188199…
本贴记录主要为自己的心得和自己学习中踩过的坑。
1. 安装VMware16.2和centos7,虚拟机中安装docker。这些比较简单,就是随便搜了教程和安装包;
2. 根据juejin.cn/post/701774… 安装terraform(其实5.10在win环境试着安装,发现比较麻烦,在安装chocolatey的时候遇到各种跑不通的问题;又安装docker,发现学的东西又好多,比如镜像退出后怎么保存,学习到的不退出,一直在后台挂着,但是我又有疑问“那关机咋办”;并且win环境下的指令总觉得没有Linux终端友好;最终放弃了,以后有时间在学相关的知识吧)
此块的学习心得就是按照下面步骤安装一下yum-utils,添加hashicorp仓库,然后安装terraform。流程中没有报错的地方,安装后执行“terraform version”,显示terraform的版本号,即表示安装成功。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
3. 今天主要做的就是试着用terraform跑了一下它的“hello world”
教程整体是编写了一个基于Docker启动nginx的例子,要求虚拟机中已经装好terraform,docker。
3.1 在terraform的执行过程中,每次使用到terraform init命令,terraform都会分析代码中的Provider,并尝试下载provider插件到本地。如果不做处理,每个项目执行后都会有。为避免上述情况出现,缓存provider,其他项目执行时,会拷贝这个内容到项目目录。具体做法是①在HOME目录中的.terraform.d文件夹新建plugin-cache文件夹②建好文件夹执行代码。
export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"
学习到了:《home目录,根目录》,首先Linux有root和普通用户两种用户,根目录是/,两个用户的家目录分别为:/root,/home/xxx(一般是);用户对自己的家目录有完整权限,对于普通用户默认是/home/xxx,可以在新建用户时修改,也可以在建后修改。用户回到家目录的指令是 cd,
(思问:为什么每次都要下载provider,没有集成或者terraform自带此“功能”?,希望在以后学习中可明白)
3.2 为接下来的项目mkdir learn-terraform-docker-container,进入文件夹后touch main.tf
然后定义资源,编写资源文件main.tf,原文链接有点问题,我去GitHub上搜索了一下:github.com/kreuzwerker…
terraform {
#定义所需的Provider
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
# 配置docker provider
provider "docker" {}
#创建一个docker镜像资源
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
#创建一个docker容器资源
#这部分的资源定义,类似"docker run --name nginx -p8080:80 -d nginx:latest"
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
#接下来还可以继续定义服务资源
在当前目录下执行terraform init初始化环境,在掘金网站中复制的代码,可能会编译错误,咨询了大佬说是可能格式问题,yaml格式比较严格,对报错的行数把多余的空格删除后就通过了,代码如果没有错误的情况下,执行若仍有错误就是网络的问题了,换可上外网环境会好一些。
(思考:main.tf资源文件作用:定义所需的Provider、配置docker provider、创建一个docker镜像资源、创建一个docker容器资源……)
当前文件夹中目录:
[root@hadoop100 learn-terraform-docker-container]# ls -al
总用量 20
drwxr-xr-x. 3 root root 123 5月 16 17:41 .
drwxr-xr-x. 3 root root 65 5月 12 16:30 ..
-rw-r--r--. 1 root root 580 5月 13 18:15 main.tf
drwxr-xr-x. 3 root root 23 5月 12 17:12 .terraform
-rw-r--r--. 1 root root 1264 5月 12 17:12 .terraform.lock.hcl
-rw-r--r--. 1 root root 4238 5月 12 19:15 terraform.tfstate
-rw-r--r--. 1 root root 155 5月 12 19:15 terraform.tfstate.backup
.terraform隐藏文件夹中存储着我们下载的Provider插件内容(打开后发现和plugin-cache文件夹中文件相同),.terraform.lock.hcl记录了provider插件的一些依赖信息。
3.3 预览资源部署情况terraform plan,在相应的工程文件夹执行,
执行完成后,会发现增加了两个资源,包括镜像和容器,对应的执行过程为:
resource "docker_container" "nginx"
resource "docker_image" "nginx"
接下来执行部署资源terraform apply,部署完成后,查看docker容器中是否创建了nginx:docker ps;
结果显示创建成功,然后curl访问一下能否获取到主页。
停止容器,运行terraform destroy。