SlideShare a Scribd company logo
Developing inside a
Container
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh
自己紹介: arukoh
エンジニアリング
バックエンド
アーキテクト
ITエンジニア性格診断
技術職人型エンジニア
科学者タイプ
趣味
サッカー観戦
ドライブ/旅行
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 2
2
今日は、
Dev Containerとは
良いところ/できること
気になること/困ったこと
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 3
3
今日は、
Dev Containerとは
良いところ/できること
気になること/困ったこと
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 4
4
Dev Container
Developing inside a Container
The Visual Studio Code Remote - Containers extension lets
you use a Docker container as a full-featured development
environment. It allows you to open any folder inside (or
mounted into) a container and take advantage of Visual
Studio Code's full feature set. A devcontainer.json file in
your project tells VS Code how to access (or create) a
development container with a well-defined tool and runtime
stack. This container can be used to run an application or to
separate tools, libraries, or runtimes needed for working
with a codebase.
https://code.visualstudio.com/docs/remote/containers
https://code.visualstudio.com/docs/remote/containers 5
5
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 6
6
Developing
inside a
Container
と
Developing
in WSL
2022/8/27 とっとるびー第45回
2022/8/27 とっとるびー第45回
Online @arukoh
Online @arukoh 7
7
Windows(WSL2)でDevContainerすると
8
8
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh
デモる
Ruby会なので

Ruby on Rails開発の始め方を
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 9
9
ファイル構成
基本は、
$ tree -a .

.

├── .devcontainer

│   ├── Dockerfile

│   └── devcontainer.json

├── ..

10
10
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh
今日は、
Dev Containerとは
良いところ/できること
気になること/困ったこと
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 11
11
ポータビリティ
Dockerが動けばどこでも

(基本的には)
Local / RemoteHost
Windows(WSL)/MacOS/Linux
WSL2
Remote - WSL extension
remote SSH host
Remote - SSH extension
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 12
12
環境をコードで管理
GitHubに置いておこう
そうすれば、CodeSpacesでも!
GitHub Codespaces extension
壊してもリビルドで元通り
変更管理もされるしね
https://github.co.jp/features/codespaces
https://github.co.jp/features/codespaces 13
13
MS製イメージ多数
2022/08時点で全83イメージ
メジャーなOSイメージをベース
Debian/Ubuntu/CentOS/RHEL/Alpineあたり
言語/フレームワーク/用途別
DevContainer用にカスタム
カスタム内容は後述
独自のベースイメージも選択可
glibc based Linux なら may work らしい
14
14
https://github.com/microsoft/vscode-dev-containers/tree/main/containers
https://github.com/microsoft/vscode-dev-containers/tree/main/containers
DevContainer用カスタム
oh-my-bash
プロンプトのデコレ
zsh + oh-my-zshも
none-root user
uid/gid自動解決
ホストのuid/gid
Permission問題回避
その他、イメージ毎に色々
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 15
15
dotfiles
dotfiles repositoryのサポート
起動時にdotfilesをインストールしてくれる
in settings.json
{

"dotfiles.repository": "your-github-id/your-dotfiles-repo",

"dotfiles.targetPath": "~/dotfiles",

"dotfiles.installCommand": "~/dotfiles/install.sh"

}

16
16
https://code.visualstudio.com/docs/remote/containers#_personalizing-with-dotfile-repositories
https://code.visualstudio.com/docs/remote/containers#_personalizing-with-dotfile-repositories
docker compose
もちろんサポート
例えば、BE開発時にDB起動
例えば、FE開発時にBEモック起動
in devcontainer.json
{

"name": "[Optional] Your project name here",

"dockerComposeFile": "../docker-compose.yml",

"service": "the-name-of-the-service-you-want-to-work-with-in-vscode",

"workspaceFolder": "/default/workspace/path/in/container/to/open",

"shutdownAction": "stopCompose"

}

17
17
https://code.visualstudio.com/docs/remote/create-dev-container#_use-docker-compose
https://code.visualstudio.com/docs/remote/create-dev-container#_use-docker-compose
Docker outside of Docker(DooD)
docker composeしていてお隣さんに入りたくなるときは
in docker-compose.yml
volumes: ['/var/run/docker.sock:/var/run/docker.sock']

in Dockerfile
RUN apt-get install docker-ce-cli

RUN chown vscode.vscode /var/run/docker.sock # for no sudo

(セキュリティ上の観点でご利用は計画的に)
18
18
https://github.com/microsoft/vscode-dev-containers/tree/main/containers/docker-from-docker
https://github.com/microsoft/vscode-dev-containers/tree/main/containers/docker-from-docker
拡張機能の管理
コンテナ固有
コンテナ作成時にインストール
開発PCローカルとは別管理
"extensions": ["rebornix.Ruby"]

ユーザ固有&コンテナ共通
user settings.json
"remote.containers.defaultExtensions": [

"eamodio.gitlens",

"mutantdino.resourcemonitor"

]

2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 19
19
今日は、
Dev Containerとは
良いところ/できること
気になること/困ったこと
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 20
20
Dev container features (preview)
指定したツールがコンテナにインストールされる仕組み
docker compose と一緒に使えない?
未サポート?
previewだからバグってる?
バージョン未指定の tmp/docker-compose.yml が生成
自前の yml とバージョンミスマッチで怒られる
ERROR: Version mismatch: file 

/path/to/docker-compose.yml specifies version 3.0 

but extension file 

/tmp/docker-compose/docker-compose.devcontainer.build-1661519850160.yml

uses version 1

21
21
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh
名前解決トラブル(若干余談)
コンテナ内で getaddrinfo EAI_AGAIN エラー
自分は遭遇してないが、よく耳にする
すべての正引きに失敗するわけではない
たちが悪い
DevContainerが、というよりDocker内蔵DNSの問題?
--dns 8.8.8.8 で回避が常套化
原因はよくわかっていない
22
22
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh
IPガチャ(完全に余談)
WSL固有の問題、3年前からのOpen Issue
WSLに割り当てられるサブネットが毎回変わる
Windows起動の度に変わる
ホームルータはだいたいクラスCなので
どうやらクラスBからランダムに決まるっぽい
固定できない(頑張ってる人はいる)
何が起こるかというと、Dockerと被る
DockerのデフォルトはクラスB
docker0 は 172.16.0.1/16
docker network create するとsize 16 で最大16個
23
23
https://github.com/microsoft/WSL/issues/4467
https://github.com/microsoft/WSL/issues/4467
今日は、
Dev Containerとは
良いところ/できること:8つ
気になること/困ったこと:3つ
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 24
24
Happy Developping !
楽しい開発ライフを~
2022/8/27 とっとるびー第45回 Online @arukoh
2022/8/27 とっとるびー第45回 Online @arukoh 25
25

More Related Content

Similar to Developing inside a Container

Similar to Developing inside a Container (20)

Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
RICC PIoT Workshop ハンズオン
RICC PIoT Workshop ハンズオンRICC PIoT Workshop ハンズオン
RICC PIoT Workshop ハンズオン
 
Dockerだけではないコンテナのはなし
DockerだけではないコンテナのはなしDockerだけではないコンテナのはなし
Dockerだけではないコンテナのはなし
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へ
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
 
貧乏人でも出来るお手軽docker
貧乏人でも出来るお手軽docker貧乏人でも出来るお手軽docker
貧乏人でも出来るお手軽docker
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
Free Hardware and Open Processes | フリー・ハードウェアとオープン・プロセス
Free Hardware and Open Processes | フリー・ハードウェアとオープン・プロセスFree Hardware and Open Processes | フリー・ハードウェアとオープン・プロセス
Free Hardware and Open Processes | フリー・ハードウェアとオープン・プロセス
 
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
 

Developing inside a Container