LoginSignup
8
2

こんにちは!GxPの肥後です
この記事はグロースエクスパートナーズ Advent Calendar 2023 1日目です!
カレンダーの先頭は初めてです!
Dockerは勉強中で記録の意味でもかけるので一石二鳥ですね!

初めに

今回はDockerの勉強がてら触っていたので、その内容を記載しようと思います。
go言語の環境を作ってhello wolrdをするところまで書きます。
goを選んだ理由に意味はなくて、書籍買ったので触ってみようと思ったからです!!
また今回はローカル環境を汚さずに言語の環境構築をしたいため、Devcontainerというものを用います。
Dockerを使えるといろんな言語を迅速に使えたり物理サーバーを考慮することなく手軽にWebアプリの動作確認ができそうで気軽に何かを試すことが可能になるかと思いますので試していきましょう。

Dockerとは

調べたらすぐに出てくるのですが簡単に言いますと、コンテナ技術を利用して、
仮想環境を素早く構築できるものです。

DevContainerとは?

簡単に説明しますがDockerコンテナを開発環境として作成することで、その環境に必要なライブラリやランタイムのバージョン、拡張機能をコンテナ内で完結させることができます。
公式の説明はこちら。

インストール

1.Docker DesktopVS Codeをインストールします。
2.VS Code内の拡張機能でRemote Developmentという拡張機能をinstallします。

Docker Composeとは

将来的に複数コンテナを使って開発する想定があるのでDocker Composeというツールを使用します。
公式ドキュメントに記載があります。

複数のコンテナを定義し実行する Docker アプリケーションのためのツール
YAMLファイルを使い、アプリケーションのサービスを設定し、コマンドを1つ実行するだけで、設定内容>に基づいた全てのサービスを生成・起動

簡単に言うと今まで一つのコンテナをコマンド打って操作してましたが複数のコンテナを操作できますよということですね。

コンテナ起動の流れ

主に3つです。
1.Dcokerfileの作成
docker-compose.ymlファイルで直接イメージを指定すれば、Docker Composeでコンテナを起動するためのDockerfileは必要ないですが、既存のイメージに対して追加の設定やカスタマイズを行う場合は、Dockerfileを作成し、それをdocker-compose.ymlから参照します。

2.docker-compose.ymlの作成
docker Composeの設定ファイルであり、これから作成するコンテナの初期状態をYAML形式で記載します。

3.docker-composeコマンドでコンテナ起動
docker-compose.ymlファイルが存在するディレクトリでdocker compose upコマンドを実行すると、docker-compose.ymlファイルに記述された全てのサービス(コンテナ)をビルドし起動します。

docker-composeについては私はこのサイトを見て参考になりました。
【初心者向け・図解】Docker Composeとは?Dockerとの違いを現役エンジニアがわかりやすく解説

環境構築

さて、簡単な説明は以上で環境構築に入っていきます。
フォルダを作りDockerfileとdocker-Compose.ymlを用意します。

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

Dockerfileは今回ほぼ不要です。
これは将来的にDevContainer内に拡張機能をいれるために予め作っておきます。
goの環境自体はdocker-composeで作れます。
拡張機能を今回Devcontainer内に入れないのでコマンドでgoを実行してあげる必要があります。

WindowsPowerShellを開きDockerが入っているのを確認。

docker --version

入っていなかったらインストールからやりましょう。

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

私の場合は以下のコマンドになりました。

 cd .\Documents\golang\

docker-compose.ymlをもとにイメージとコンテナを作成します。
Dcokerfileに拡張機能を追加して再作成したい場合は--buildオプションを使用します。

docker compose up

無事にコンテナは起動できたようです
スクリーンショット 2023-11-30 123400.png

次にVS CodeでDevContainerに入っていきたいと思います。
方法は簡単で以下のマークをまず押下します。左下にあります。
スクリーンショット 2023-11-30 085542.png
そうすると実行中のコンテナにアタッチというメニューがありますので押下し
実行中のコンテナ一覧が表示されます。先程作ったコンテナ内に入ります。
無事に入れました。左下の表記も変わってますね。
スクリーンショット 2023-11-30 123801.png

Hello Worldを表示するためにgoフォルダを作成しその直下にsrcフォルダを作成します。
スクリーンショット 2023-11-30 124220.png

main.go
package main

import "fmt"

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

拡張機能やmodule類を入れてないのでmoduleが見つからない警告文が出ますがHello Worldを表示させるだけなのでこのまま行きます。

cd go/src
go run main.go

無事に出せることができました!
スクリーンショット 2023-11-30 124833.png

最後に

5分で環境が作れましたね!!
本当に簡易的に環境を作っただけですのここから本格的に拡張機能等を入れていき開発環境の整えて行く必要がありますがとりえあず触ってみよう精神でやってみました!
環境汚すことなくいろんな言語の環境やLinux環境も用意できるのでかなり便利に感じました。
しかし、メインで使っているIDEがIntelliJ ですので、それでもできないかも試してみようかなと思います。

参考文献

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2