# 手把手教你使用Google Container-Optimized OS定制系统

%[https://youtu.be/Mhz9rXUw1lo]

这篇文章我们来详细介绍如何在谷歌云服务器(GCP)上运行使用Docker。
文末有本文对应的视频教程，不喜欢读文字的朋友可以直接观看视频教程。

首先我们几句话聊下Docker。Docker是时下比较流行的容器化技术的代表，Docker 是一个开源的应用容器引擎。实际Docker技术自2013年以来都在逐步流行，只是近些年随着互联网技术从传统架构向云架构到容器化、微服务化的过度过程，Docker技术也随之愈发的流行。

Docker作为容器化技术的代表，具有轻量、安全、标准、可伸缩、即抛等诸多优秀的特点。关于Docker的知识还有很多，这里不再展开，有兴趣的同学可以自行了解学习。

闲话至此，下面我们来为大家介绍如何在谷歌云(GCP)服务器运行Docker。谷歌云为每个新用户提供了300美金的为期一年的试用额度，通通各种方式基本基本可以无限重置，是众多羊毛党乐此不疲的项目，如果有新手同学不熟悉或者感兴趣，后期我会制作一期详细的视频教程。


谷歌云使用Docker有两种方式，原生Linux安装运行Docker和使用`Container-Optimized OS`。

## 1. 原生Linux运行Docker

最常用的方式就是在`Computer-Engine`中创建VM实例并安装诸如CentOS等常见的发行版Linux系统，然后在原生Linux系统中按照常规方式安装Docker，此方式简单易行，直接参考Docker官方文档即可，新手同学可以参考 CentOS 8安装Docker 这篇的文档，下面为不喜欢读文字的观众老爷们送上视频教程。

%[https://youtu.be/Mhz9rXUw1lo]

下面为国内无法访问YouTube的朋友放上B站视频。

<iframe src="//player.bilibili.com/player.html?aid=82645178&bvid=BV1YJ411G7Ze&cid=141402586&page=1" style="zoom:280%;max-width:100%;max-height:100%"></iframe>

## 2. Container-Optimized OS

本文的重点就是为大家介绍在谷歌云(GCP)上这种更妥帖的Docker运行使用方式。

`Container-Optimized OS` 是适用于 `Compute Engine` 虚拟机的操作系统映像，专为运行 Docker 容器而优化。`Container-Optimized OS` 由 Google 维护，基于 `Chromium OS` 开放源代码项目。一句话概括，`Container-Optimized OS`就是Google为运行Docker而定制优化的Linux操作系统，以让Docker使用更加简洁高效。

### 2.1 系统安装
要使用`Container-Optimized OS`只需要在新建VM实例时，选择启动磁盘的时候选择`Container-Optimized OS`系统即可，过程如下图所示：


![GCP操作系统选择](https://cdn.hashnode.com/res/hashnode/image/upload/v1658770018616/smc6Obaax.jpg align="left")

VM实例默认已经为我们安装好了最新版的Docker并做好了参数调优配置，实例创建完成之后，就可以直接在系统中查看和使用Docker，可以通过以下指令进行简单测试。

```bash
# 查看docker版本信息
docker --version
 
# 运行hello-world实例程序
docker run hello-world
```

### 2.2 安装扩展应用
`Container-Optimized OS`默认已经帮我们安装了少量的常用应用，如 `git/vim/ssh`等，但很多情况下这不足以满足我们的个性化需求，如运维人员喜欢使用 `htop` 来检测系统资源使用情况，此时就需要我们手动安装 `htop` 。

作为定制化系统，`Container-Optimized OS` 并不包含程序包管理器，但我们可以使用预先安装的`CoreOS` 工具箱(`/usr/bin/toolbox`)实用程序来安装所需的其他任何程序包或工具。

首次在命令行执行 `toolbox` 命令，可以看到系统会首先去拉取`toolbox`镜像，然后创建一个特殊的`toolbox`容器。`toolbox`容器内部为了提供了一个类似于 `Debian shell` 的环境，我们可以在`toolbox`容器肆意妄为了，比如通过下面的命令安装 `htop`。

```bash
# 安装htop
apt-get update && apt-get install -y htop
 
# 运行htop
htop
```

除了以上方式我们还可以使用简写表示法来调用工具箱中的工具。如：

```bash
toolbox apt-get update && apt-get install -y htop
toolbox htop
```

### 2.3 数据共享
`toolbox`是一个特殊定制容器，通过 `docker ps -a` 看不到其信息，容器退出之后其资源也不会被释放，再次进入容器其资源依然可以正常访问。如果要共享数据，我们也不能使用普通容器一样挂载卷。

默认情况下，`toolbox`容器与宿主机存在以下路径映射关系，`/ : /media/root` 。宿主机的更路径会默认映射到`toolbox`容器的 `/media/root` 目录。借由此映射关系我们就可以在`toolbox`与宿主机之间共享数据。

<iframe src="//player.bilibili.com/player.html?aid=83273851&bvid=BV1MJ411H7pG&cid=142464001&page=1"  style="zoom:280%;max-width:100%;max-height:100%"></iframe>

推荐大家按照视频讲解逐步操作，中间遇到任何问题可以在文末留言。完整视频内容可访问 [YouTube](https://youtu.be/JM27l8SWCDQ) / [B站](https://www.bilibili.com/video/av83273851/) 查看，也欢迎加入 [TG群](https://t.me/colinchang) 讨论交流。
