我试着用 VS Code 中的 DevContainer 进行操作

你好!我是GxP的Higo。
这篇文章是Growth Expert Partners的2023年Advent Calendar的第一天!
这是我第一次在日历上来写文章!
学习Docker不仅可以记录,而且能够达到一举两得的效果!

首先

这次我想记录一下我学习Docker的过程。我会写到搭建Go语言环境并进行Hello World的部分。选择Go语言并没有特别的意义,只是因为买了一本书,想尝试一下!此外,我希望在不污染本地环境的情况下进行语言环境的构建,所以将使用一个名为Devcontainer的工具。如果能够使用Docker,就可以快速地使用各种编程语言,而且无需考虑物理服务器,可以轻松地进行Web应用程序的测试和尝试。让我们试试看吧。

Docker是什么?

如果我们进行调查,很快就能找到答案。简单来说,它利用容器技术快速构建虚拟环境。

DevContainer是什么?

通过创建Docker容器作为开发环境,可以简单地在容器内完成所需的库、运行时版本和扩展功能,以下是官方说明。

安装

1. 安装Docker Desktop和VS Code。
2. 在VS Code中安装一个名为Remote Development的扩展功能。

Docker Compose 是什么

未来我们打算使用多个容器进行开发,因此我们会使用一个名为Docker Compose的工具。其相关信息可以在官方文档中找到。

使用YAML文件来配置应用程序的服务,只需执行一个命令,即可生成和启动所有基于配置内容的服务。这是用于定义和运行Docker应用程序的工具。

简单来说,以前您只能通过一个容器执行命令进行操作,现在您可以操作多个容器。

容器启动的过程

主要的有三个。

1. 创建Dockerfile
如果在docker-compose.yml文件中直接指定镜像,则不需要Dockerfile来运行Docker Compose中的容器。但是,如果需要对现有镜像进行附加配置或自定义,则需要创建Dockerfile,并在docker-compose.yml中引用它。

创建docker-compose.yml文件
这是docker Compose的配置文件,以YAML格式记录即将创建的容器的初始状态。

当在存放docker-compose.yml文件的目录中执行docker compose up命令时,会构建和启动docker-compose.yml文件中定义的所有服务(容器)。

我通过阅读这个网站对docker-compose有了参考。
【初学者向】图解]Docker Compose是什么?现役工程师易懂解释与Docker的区别

搭建环境

现在,简单的说明结束了,我们开始进行环境搭建。
我们需要创建一个文件夹,并准备好Dockerfile和docker-compose.yml文件。

FROM golang:1.15.6
RUN apt-get update && apt-get install -y curl
version: '3'
services:
  golang:
    build:
      dockerfile: Dockerfile
    volumes:
      - ..:/workspace/golang/  # プロジェクトルートをマウント
    tty: true
{
    "dockerComposeFile": "docker-compose.yml",
    "service": "golang",
    "workspaceFolder": "/workspace/${localWorkspaceFolderBasename}"
}

这次几乎不需要Dockerfile。
这是为了将来在DevContainer中添加扩展功能而预先创建的。
可以使用docker-compose来创建go环境本身。
由于这次没有将扩展功能放入DevContainer中,所以需要通过命令来执行go。

打开Windows PowerShell并确认Docker已安装。

docker --version

如果没有安装的话,我们就从安装开始做吧。

cd {プロジェクトフォルダにしたい場所}

在我这个情况下,使用了以下的命令。

 cd .\Documents\golang\

根据docker-compose.yml文件创建镜像和容器。
如果想要在Dockerfile中添加扩展功能并重新创建,可使用–build选项。

docker compose up
スクリーンショット 2023-11-30 123400.png
スクリーンショット 2023-11-30 123801.png
スクリーンショット 2023-11-30 124220.png
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

由于未安装扩展功能或模块,可能会出现找不到模块的警告信息,但由于只需显示“Hello World”,因此将继续进行。

cd go/src
go run main.go
スクリーンショット 2023-11-30 124833.png

最后

只花了5分钟就创建了环境,真的只是简单地创建了环境,从这里开始需要着手逐渐添加扩展功能等,整理开发环境是必要的,但暂且先尝试着去接触一下吧!能够准备各种语言的环境和Linux环境而不弄乱环境,感觉非常方便。不过,我主要使用的IDE是IntelliJ,所以也许不能用它试一试。

文献引用

 

广告
将在 10 秒后关闭
bannerAds