0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker engine + VSCode開発環境 備忘録

Posted at

概要

TensoorflowのGPU環境構築にあたってはインストールに関する情報も多く、インストーラも心持ちユーザフレンドリーになっているし、何より自前で環境構築するのに慣れてしまったこともあり、イライラすることはほぼなくなった。

昔は知識不足でGPU環境を構築することが困難だったのでTensorFlow Docker imageを使うことがままあった。その時はホスト環境のブラウザからコンテナに接続してJupyter notebookで開発することがもっぱらであった。

仕事でDockerを使う機会があり自分のDocker情報も更新されたので環境構築について備忘録に残す。
なお、(有料な)Docker desktopは使用しない。

  • 実施期間: 2023年3月
  • 環境:Host: Ubuntu20.04.2 LTS, Container: Ubuntu20.04.5 LTS

1. Docker engineインストール

オフィシャルの手順に沿うだけで完了する。

インストール後、Linux のインストール後を忘れずに実行すること。

2. Ubuntu imageのコンテナ化

Host OSと同じUbuntu20.04のイメージでコンテナ作成する。
コンテナのUbuntuにはPythonが入っていないので、一度にPython環境まで整えるためにコンテナ作成にはDockerfileをbuildする。
ソースコードはHost OSでも確認できるようにバインドマウントする。

FROM ubuntu:20.04

RUN mkdir /usr/local/src/python_src
RUN apt-get update
RUN apt-get install -y python3.8 python3.8-dev python3-pip
RUN pip3 install numpy pandas matplotlib

VOLUME /usr/local/src/python_src

Dockerfileをおいたディレクトリでイメージ(ubuntu:py38)とコンテナ(test_1)を作成する。

docker build -t ubuntu:py38 .
docker image ls

REPOSITORY              TAG          IMAGE ID       CREATED          SIZE
ubuntu                  py38         8f2cd82f8cb3   19 seconds ago   662MB

docker run --name test_1 -it ubuntu:py38 bash

起動したコンテナのterminalでUbuntuのバージョンくらい見ておく。

cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"

Host OSで別terminalを起動し、run中のコンテナ情報を抜き出してコンテナの/usr/local/src/python_srcがHost OSのどこにマウントされたか確認する。そこに簡単なpyファイルを作成する。

docker ps

CONTAINER ID   IMAGE         COMMAND   CREATED              STATUS              PORTS     NAMES
91fa06d195c2   ubuntu:py38   "bash"    About a minute ago   Up About a minute             test_1

docker inspect 91fa06d195c2 > test_1.JSON
cat test_1.JSON | jq ".[].Mounts[].Source"

"/var/lib/docker/volumes/a0020fa7a6ed93819b9099e7a7bdc311248891a5e86534137528bd415559d828/_data"

cd /var/lib/docker/volumes/a0020fa7a6ed93819b9099e7a7bdc311248891a5e86534137528bd415559d828/_data
sudo touch test.py
sudo vim test.py

vimで"hello world!"を出力するコード(割愛)を書いておく。

コンテナのterminalでそれが参照できるか確認する。

cd /usr/local/src/python_src
ls

test.py

Dockerの仕様上、マウント元(Host OS)のディレクトリを指定することはできず、Dockerが自動的にマウント元を作成する。つまり複数コンテナからHost OS上のひとつのディレクトリを参照することはできない(という理解)。

3. VSCode

下記サイトを参考にさせていただいた。

VSCodeの機能拡張にDev Containersをインストールしておく。これが起動中のコンテナに環境を接続してくれる。

Screenshot from 2023-03-05 14-05-04.png

表示されているコンテナはdocker ps -aで表示されるコンテナたちで、実行中のものには再生マークがついている。ここではコンテナtest_1を選択する。同時にPythonのインタプリタがコンテナ中の環境に切り替わる。起動していないコンテナを選択すると起動して接続してくれる。
接続すると、pythonのインタプリタが切り替わる。

Screenshot from 2023-03-05 14-08-14.png

編集するpyファイルを指定するため、コンテナ内のディレクトリを指定する。

Screenshot from 2023-03-05 14-07-25.png

OKを押すと、その中の全ファイルが表示されるので所望のものを選択する。

Screenshot from 2023-03-05 14-09-54.png

このままではデバッグモードにならない。
Host OSでもVSCodeを初めてインストールしたときと同じように、コンテナの環境でもVSCodeの実行が初めてとなるため機能拡張をインストールする。

Screenshot from 2023-03-05 14-11-57.png

これで開発環境の準備は終わり。
VSCodeで編集した内容はもちろんマウント元であるHost OSのディレクトリにそのまま反映される。

runで起動したコンテナのterminalはexitするだけでコンテナがstopする。

4. 開発を再開するとき

VSCodeを起動すると前回の環境がコンテナだったことを記憶しているためか、下図が表示される。
"Start Container"を選択すると、勝手にdocker startしてくれる。VSCodeを閉じてもこのコンテナはstart状態なので、terminalから必要に応じてdocker stopさせなければならない。

Screenshot from 2023-03-05 15-29-40.png

terminalを起動したければコンテナはあるのでstartしてterminalをアタッチする。

docker start --name test_1
docker exec -it text_1 bash

start状態にexecでアタッチしたので、このterminalをexecしてもコンテナはstart状態のまま。

番外(Docker Hubの全Tagの確認)

Docker Hubに置かれているオフィシャルのtagはStack Overflowによると下記で確認可能。

curl -s -S 'https://registry.hub.docker.com/v2/repositories/library/ubuntu/tags/' | jq '."results"[]["name"]' |sort

"focal"
"focal-20230301"
"jammy"
"jammy-20230301"
"kinetic"
"kinetic-20230217"
"latest"
"lunar"
"lunar-20230301"
"rolling"

docker run -it ubuntu:focal bash

タグはバージョン番号ではなくコードネームになっている。コンテナを作ってみたけど、最小構成で心もとなかったので使用していない。

以上

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?