Docker_イメージからコンテナを作成してみる #126日目
Dockerに関する学びの続きです。
前回の記事はこちらです。
今回はこちらのチュートリアルに沿って進めてみました↓。
Dockerとはコンテナという箱のようなものにOSやソフトウェアがインストールされた環境を閉じ込めておくことができるものです。このコンテナは、Dockerfileからイメージというものを作成し、イメージからコンテナを作ります。
イメージからコンテナを作る、といってもピンと来ませんが、前回の記事で紹介したDockerのチュートリアルでも「build the image」という行程を経てコンテナが作られていました。
この辺の理屈は追い追い理解するとして、ここではイメージからコンテナを作る、そしてそれをビルドと言う、という認識だけ持って進めたいと思います。
まずDockerfile(拡張子なし)を作り、以下のコードを記述します。
各コードの詳細は動画の中の説明をご参照ください。大まかには言うと、DockerコンテナにLinuxのubuntuを立てて、そのubuntu上にAnacondaをインストールし、Jupyter Labを起動する記述です。
FROM ubuntu:latest
RUN apt-get -y update && apt-get install -y sudo wget vim git curl gawk make gcc
RUN wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh && \
sh Anaconda3-2019.03-Linux-x86_64.sh -b && \
rm -f Anaconda3-2019.03-Linux-x86_64.sh && \
sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - && \
sudo apt-get install -y nodejs
ENV PATH $PATH:/root/anaconda3/bin
RUN mkdir /workspace
CMD ["jupyter-lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--LabApp.token='"]
コードを書いて保存したらターミナルを開き、以下のコードでDockerfileからイメージを作成(ビルド)します。ちなみにjlabというのはイメージの名前で、ここは任意です。
docker build -t jlab:latest /Users/ファイルまでのパス/MyDocker
実行すると以下のような画面になります。
実行完了には結構時間がかかり、自分の場合は上記のコードで4分かかりました。調べてみるとビルド時間短縮のノウハウ記事がたくさん出てきたので、そもそも時間がかかるものみたいです。
完了すると以下のように表示されます。
anacondaをインストールするところに時間がかかったみたいですね。
[+] Building 239.4s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.83kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.9s
=> [1/4] FROM docker.io/library/ubuntu:latest@sha256:8ae9bafbb64f63a50caab98fd3a5e37b3eb837a3e0780b78e5218e63193961f9 0.0s
=> CACHED [2/4] RUN apt-get -y update && apt-get install -y sudo wget vim git curl gawk make gcc 0.0s
=> [3/4] RUN wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh && sh Anaconda3-2019.03-Linux-x86_ 215.1s
=> [4/4] RUN mkdir /workspace 0.6s
=> exporting to image 21.7s
=> => exporting layers 21.7s
=> => writing image sha256:d0cfbe68ee668e596c132cb90a45a51de29aa38794b5cebc477c6a045289ca60 0.0s
=> => naming to docker.io/library/jlab:latest 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
無事にイメージが作られたか以下のコードで確認します。
docker images
作成した「jlab」がREPOSITORYに表示されていればOKです。
REPOSITORY TAG IMAGE ID CREATED SIZE
jlab latest d0cfbe68ee66 10 minutes ago 3.89GB
docker101tutorial latest 150b7a52be5a 47 hours ago 28.8MB
alpine/git latest c6b70534b534 3 months ago 27.4MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
続いて、作成したイメージからコンテナを作成します。
以下のコードを実行します。--name のあとにはイメージの名前とイメージIDが入る形です。
docker run -p 8888:8888 --name jlab d0cfbe68ee66
↓こんな感じの表示が出たら成功です。
[I 12:55:00.970 LabApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 12:55:01.525 LabApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 12:55:01.525 LabApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[W 12:55:01.526 LabApp] JupyterLab server extension not enabled, manually loading...
[I 12:55:01.528 LabApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 12:55:01.528 LabApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[I 12:55:01.528 LabApp] Serving notebooks from local directory: /
[I 12:55:01.528 LabApp] The Jupyter Notebook is running at:
[I 12:55:01.528 LabApp] http://(e82eb6aedbaf or 127.0.0.1):8888/?token=...
[I 12:55:01.528 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
しかしWindowsだとここから表示させるのにもうひと手間かかるらしく、今日は一旦ここまでにします。私はなぜかjupyter notebookが表示され、ログインを求められたのでそっと閉じました。
Macだとlocalhost:8888にアクセスすればJupyter labが使える状態になっているらしいです。
とりあえず今日はここまで。
お読みいただきありがとうございました!