The 技術 #1:VSCode×Dockerでubuntu×Python開発環境を構築する
作ったプログラムを他のPC上で使ってもらう時や、他のサーバーで稼働させる時、「謎のエラーで動かない...。」なんて経験ありませんか?
そんな経験とおさらばするために、Dockerを使いましょう。
Docker初心者がDockerを使用して開発を始めるところまでの手順を説明します。
はじめに
私はDocker初心者です。
私はPythonで開発をすることが多いですが、軽い処理はWindows OSを、Deep Learning用などの重い処理ではLinux OSを使用しています。
今後はLinuxでの開発が多くなりそうなので、開発環境をLinuxに統一したいなと考えていました。
今までpythonを使用した開発では仮想環境の構築にvenvを使用してきましたが、OSの違いによるエラーもなくしたいという思いからDockerの使用を検討していたところ、Windows 10 homeでもDocker Desktop for Windowsが使えるようになったので、公私ともにdockerを使うことにしました。
最近の転職市場ではAWS(やGCP)×Dockerのスキルを求めるところも増えている印象ですし、Dockerを勉強するモチベが上がりますね。
▶Dockerとは
非常に詳しく、またわかりやすく書かれています。
なぜDockerが世界で人気を集めているのかがよくわかります。
(日本でも徐々にDockerの本番導入率が増加。→リンク)
まとめ部分を引用します。
Dockerとは
他に実行しているプログラムから影響を受けない隔離された環境上で新たなプログラムを実行することを可能にする、コンテナ型の仮想環境を作成、配布、実行するためのソフトウェアです。
Dockerを使うことで次のようなメリットがえられる。
- 1台のPC上で簡単かつ安全に独立したサーバーを複数動かすことができる。
- アプリケーションのバージョン管理が楽になる(アップデートによってアプリケーションが壊れても、すぐに動いてたバージョンに戻せる)
- 相手がDockerを使える環境であれば、確実に動かせるソフトウェアを作ることができる(環境の違いを吸収できる)
▶Dockerを用いた開発手順
上記がイメージし易かったです。
開発手順は下記のような流れになります。
①ベースイメージをDocker Hubから選ぶ
(オフィシャルなOSイメージがよく使われる)
②ベースイメージを元にDockerfileを作成し、コンテナを生成する
③コンテナ内で開発を行う
④開発を終えたら動作させたいファイルが動くよう、Dockerfileに処理を記載する
⑤④で作成したDockerfileを元にDocker Imageを作成
⑥⑤で作成したDocker Imageが正常に動作するか確認して完成
▶開発環境
Windows 10 Home 64bit(バージョン:2004)
VSCode 1.48.1
Python 3.8.5
Docker Desktop for Windows
Windows 10 HomeにDocker Desktopをインストールする方法は下記のちこさんの記事が参考になります。
▶開発開始までの手順
手順、ファイル一式を上記のgithubにアップしました。
VSCodeでローカルPCの中にリモートコンテナを立ち上げ、開発をするところまでの手順を説明しています。
Dockerを使用した開発を行う際、
①開発フォルダの中にDockerfileを作成
②Dockerfileにベースとなるイメージを定義
③Dockerfileをビルドしてリモートコンテナを起動し開発(devcontainer.jsonは起動時に自動生成され、必要に応じて自分で変更する)
という手順を踏みます。
上記Githubに保存したコードは私が「Linux(ubuntu)OS上にPythonをインストールした環境を用意すること」を目的に①~③をした際のコードになります。
最低限必要なコードしか記載していないと思いますので、
どんなことをDockerfileに記載すればいいかがわかる最初の一歩になれば幸いです。
私自身いろんなサイトを見ましたが、Dockerfileにはたくさんのコードが記載されていて、最低限必要な部分がなんなのか迷ってしまいました。
実際に手を動かしていくといろいろ疑問が解消されていきますので、私と同じような境遇にいる方はぜひチャレンジしてみてください。
▶おわりに
Dockerへのハードルがだいぶ下がった感じがします。
次は自分の開発用のDockerfileを何個か作ってみようと思いました。
この前下記の記事でリバーサルフィルム(フィルムカメラ)を楽しんでもらえるサービスをつくりたいと書いたのですが、AWSかGCP上にDockerを使用してWebページを作ってみようかと思います。
それでは、良い発明ライフを。
頂いたサポートはみなさんの血肉になるような情報で還元させて頂きます!