【Day 5】Git Submodule x Run Docker x 启用第一个萝卜服务

tags: 铁人赛 DevOps Submodule DevOps

概述

碎念时间

  • 前面几篇大多都在设定环境
    • Wiwi Kuan 都说赞的 Terminal 环境
    • 惯用顺手的 文字编辑器,选用很多人使用、多数 Linux 环境有搭载的 vim
    • 吴宝春都在用的 版本控制,采 Git / GitHub 方式实现
    • 徐太宇推荐的 大平台环境,采 Docker 容器环境实现
  • 集结上述的内容,今天要来做一些事情
    • 我所规划的三十天内容,是要做出云端萝卜服务
    • 今天来点幼幼班实作

Git

git clone

  • 从 Git 仓库,下载原始码,俗称把专案「抓」下来。
  • 先前我们在 【Day 3】Git x GitHub x 版本控制的基础:吴宝春的成功秘诀
    所建立了一个 原始码仓库(Repository):exsky/ironman2021,来看看这个页面,有个绿色的按钮「Code」,看到彩色的按纽,按下去就对了!
  • 有几个可以选的项目,HTTPS、SSH、GitHub、CLI ⋯⋯
  • 目前预设按下按钮会出现的是 SSH,来复制格子内的内容
  • 开启 Terminal,切换到喜欢的目录。
git clone [email protected]:exsky/ironman2021.git
  • 抓下来之後,工作目录当下会多出一个新的目录,切进去看。
cd ironman2021
ls -al

git submodule

  • 身为 DevOps 为主要工作职责,着重在如何把服务建立起来。
  • 因此,那些服务怎麽去实作、排版之类的,会交给别人,像是前端工程师去做⋯⋯吧?!
  • 假设有个前端工程师写了一个简易的网页,并且放到 另外一个原始码仓库 的话⋯⋯就可以透过 git submodule 来描述,在 ironman2021 目录下,引入子模组。
git submodule add [email protected]:rita0124/daradish.git daradish
  • 然後,用 tree 看看整个目录及档案的结构
tree
zsh: command not found: tree
  • command not found? 那不就是内部或外部命令、可执行的程序或批次档

  • 可恶,跟防火墙一样很难入侵

  • 那因为之前没装过 tree,所以出现了 command not found...装起来就好了

brew install tree
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
(略)
  • 好了

Docker

  • 昨天,我们将 Docker Image 和 Docker Runtime 比喻为「Nespresso 咖啡胶囊」、「Nespresso 咖啡机」,还没谈到如何操作。
  • 以下我们浅谈一下 Docker⋯⋯

常用的 docker 指令(1) - docker images

  • 查看本机上的 容器映像档 (images)有哪些
docker images

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

你如果看到这段话,表示,Docker 的执行环境还没运作起来;从 Spotlight 唤醒他吧!

  • 再执行一次
docker images

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
docker101tutorial   latest    3a7a7c117231   23 hours ago   28.3MB
alpine/git          latest    b8f176fa3f0d   3 months ago   25.1MB
  • 这些 Image 是会占用电脑的容量的,如果没有用来起容器的话,可以把它删掉

常用的 docker 指令(2) - docker rmi

  • 删掉没用到的东西
docker rmi docker101tutorial

  • 备注:要指名欲砍掉的 image,除了写 "REPOSITORY" 名称外,也可以写 "IMAGE ID"

常用的 docker 指令(3) - docker pull

  • 我们在上一段,Git 的部分,去抓了 rita0124/daradish 这个东西
  • 那个 daradish (大萝卜网站) 乍看就是一个静态网页
  • 我想要在我目前的电脑,运作这个网站
  • 但是根据以前我所使用 macOS 作为开发机的经验来说
    • 在上面搞出一个 Apache2 (Httpd) 是一件吃力不讨好的事情
    • 应该是没有标准流程
    • 未来如果要做各种开发,设置这台电脑一定会变得跟炼蛊一样,巫术啊
  • 我现在需要一个网页服务器,来看看 Docker Hub 上的 Apache
    • The Apache HTTP Server Project
    • 勾勾写他是 Official Image
    • 超过十亿次下载 (1B+)
    • 下载指令在右边黑底白字,复制贴上,就是这麽简单。
  • 看结果

常用的 docker 指令(4) - docker run

  • 想要知道葫芦里面卖什麽药
    • 最快的方法可以看文件。
    • 次快的方法,连进去玩玩看。
    • 都没头绪的话,用 docker image inspect httpd:latest
  • 我们参考了文件,里面有提到如何起启用网页伺服(下图红框处)
  • 针对 docker run 命令的详细用法,可以参考官方文件
  • 重点就是,把 DocumentRoot Directory 挂载到容器中的 /usr/local/apache2/htdocs
docker run -d --name my-apache-app -p 8080:80 -v "$PWD"/daradish:/usr/local/apache2/htdocs/ httpd:latest

dc8155a04c737eff45ea9ff19160557f8e8709a3bb9a3e6a9362ec8c59909c22
  • -d: 当成 Deamon 跑在背景
  • -name: 帮容器贴上名字
  • -p: 串接 Host 机器 port 至 容器本身的 port
  • -v: 挂载档案、目录或是装置
  • 最後接上容器映像档档名 (Repository Name)

小结

  • 缓慢前进的一天
  • 预计明天来讲
    • 如何上 code
    • 撰写 Dockerfile

後记

  • 今天本来下班要来好好写文章,但我的同事表示要先吃晚餐,剩下的内容就放到明天吧。

<<:  Day2 Java 基本功(字)

>>:  【程序】参战 IT 铁人赛 ! 转生成恶役菜鸟工程师避免 Bad End 的 30 件事

建立第一个RESTful api server(重构篇)-1 (Day16)

在之前的开发过程中,会发现整个main.go越来越长,在阅读理解上会相对没有那麽直觉且快速,因此接下...

[Day29] Maker making IoT完赛心得与一些後续的期待!

完赛结语 今天是我们团队首次参加30天铁人赛的完赛日,老套路了,首先要感谢每个对本系列文章订阅与观看...

技术移转:把顾问当哆啦许愿的日常

请顾问辅导撰写 ISMS 程序书 充份说明企业或机构需求与资安目标(SPEC开好、说清楚、讲明白) ...

Day 28 - ROS 树莓派光达履带小车实作 (2)

延续昨天的进度,lidar装完以後就可以为SLAM做准备了。ROS用来做SLAM的package其实...

虹语岚访仲夏夜-23(专业的小四篇)

万里无云时 总觉得喘不过气 要问为什麽 一定是 无云天空下 只有我问我    该往那去 寂静夜深时...