LoginSignup
5
2

More than 1 year has passed since last update.

Windows(WSL2)上にdoodのコンテナを作る

Last updated at Posted at 2022-08-27

最初に結論

これをクローンしてコンテナの中に入ればおk

DooDとは

Docker outsite of Dockerの略です。Docker内部のコンテナからホストのDockerを操作する方法です。DinD(Docker in Docker)という方針もありますが今回はこちらで。

どうしてそんなことを?

インターンで働いている企業の開発環境がMacです。Docker関連にMakeファイルが用意されており、Dockerコマンド、Goコマンド、Unix系コマンドが必要になったためです。
できるだけローカルの環境を汚さずに開発をしたかったため、Docker上に環境を置きたいと思ったのですが、環境構築の時点でGoのコマンドを使用しているため本来であればローカルにGoをインストールする必要がありました。
DooDを採用することで、ローカルのように扱えるGoのコンテナ、実際に運用しているコンテナの2つによって、擬似的に同じ環境を作ります。

ディレクトリ構成

ディレクトリ構成
.
|-- .devcontainer
|   |-- devcontainer.json
|   `-- docker-compose.yml
|-- Dockerfile
|-- docker-compose.yaml
|-- go.mod
|-- main.go
`-- pkgs
    `-- pkg1.go

こんな感じになります。最小限のGoプログラムは書きたいと思ったので適当な構造を作りました。

内容解説

Dockerfile
FROM golang:1.19
#Debianが指定される
WORKDIR /go/src/work

RUN go install -v golang.org/x/tools/gopls@latest
RUN go install -v github.com/ramya-rao-a/go-outline@latest
RUN go install -v github.com/go-delve/delve/cmd/dlv@latest
RUN go install -v honnef.co/go/tools/cmd/staticcheck@latest
#Go周辺の便利機能インストール

RUN apt update
RUN apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
#Dockerインストール準備
#Dockerドキュメント https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/debian/

RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
RUN echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

RUN apt update

RUN apt install docker-ce docker-ce-cli containerd.io -y
#本体インストール
RUN curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
#docker-composeのインストール、実行権限付与

Dockerfileでは公式イメージにDockerCLIをインストールしています。結構手順が多くハマったこともありましたがこれで落ち着きました。

docker-compose.yaml
version: '3'
services:
  go_host:
    build: .
    container_name: "go_host"
    tty: true
    stdin_open: true
    command: /bin/bash
    #ホストのディレクトリをコンテナにマウント
    volumes:
      - .:/go/src/app
      - /var/run/docker.sock:/var/run/docker.sock
      # - ./env/.ssh:/root/.ssh
      # ssh でgitなどをしたい場合設定を置くと良い

/var/run/docker.sock:/var/run/docker.sockの部分でWSLに存在するDockerに。コンテナがアクセスできるようにしています。これによりDooDを実現しています。sshでgitなどもしたいのでssh用の設定もおいておくと良いです。また、composeのcommandにlocalでgit configを設定しておくとコンテナの中でだけ決まったアカウントを使える、みたいな環境になってくれてとても良いです。

結論

業務で使える環境が用意できた。この記事がWindowsプログラマーの助けになれば幸いです。

5
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
5
2