Help us understand the problem. What is going on with this article?

VSCodeでDocker入門

対象

Dockerインストール済み
初めてDockerを使用する。

前提

コマンドラインは使える
VSCode インストール済み

本記事について

一般的なDockerの学習フローではdockerコマンドを学びつつ、イメージやコンテナの概念について理解し、その後docker-composeへと進んでいくと考える。

本記事ではイメージやコンテナ等の概念の説明は大きく省き、コマンドもvscodeの拡張機能で代用する。それによってdocker-composeのコマンドを最小限学んでさくっと動かすことで実践的にDockerについて理解していく。

本記事のゴール

docker-composeコマンドがいくつかつかえるようになる。
nodejsの実行環境が作れる様になる。

VSCode環境構築

スクリーンショット 2020-09-14 13.18.11.jpg

スクリーンショット 2020-09-13 19.36.04.png

これをあらかじめインストールしておく。

nodejs環境を作る

まずは適当な場所にnodejssampleというフォルダを作る。この名前は適当。

そしてそのフォルダ直下に以下のようにdocker-compose.ymlというファイルを作る。

docker-compose.yml
version: "3"
services:
    node: 
        image: node:14.10
        volumes: 
            - .:/project
        tty: true
        working_dir: /project
        command: bash

この内容については後ほど解説する。

そして、同階層にapp.jsを作成

app.js
const main = () => {
    console.log("hello node!");
}

main();

スクリーンショット 2020-09-13 19.42.35.png

こうなっていればOK

そうしたら一度Dockerの現在の状態を確認しておく。

VSCode左からDockerマークを選択すると以下のような画面になってると思う。

スクリーンショット 2020-09-13 19.43.38.png

Dockerが起動していなかったり、すでに何かしらDockerを動かしていたらこの画面にならないかもしれない。

確認できたら、コマンドラインでdocker-compose.ymlのある場所で以下のようにコマンドをうつ。

仮装環境を起動するコマンド

docker-compose up -d

するとダウンロードが始まって以下のような画面になる

nodejssample $ docker-compose up -d
Creating network "nodejssample_default" with the default driver
4f250268ed6a: Pull complete1b49aa113642: Pull complete
c159512f4cc2: Pull complete8439168fd8dc: Pull complete55abbc6cc158: Pull completee5c5821cd889: Pull complete5a7679f70bad: Pull completed827e86d1182: Pull complete2484b06a6da1: Pull complete
Digest: sha256:21658666c0eabc9006b279e826e540d20e2c835507347d9c2f3f7dd5820ec9e3
Status: Downloaded newer image for node:14.10
Creating nodejssample_node_1 ... done

そして、Dockerのタブの画面が以下のようになる。
スクリーンショット 2020-09-13 19.52.05.jpg
Dockerで作った仮想環境のことをコンテナと呼ぶ。
イメージはコンテナ作るためのもの。

スクリーンショット 2020-09-14 14.03.23.png

仮想環境が起動できたので、次はその仮想環境でnodejsを動かす。

スクリーンショット 2020-09-13 19.57.17.png

対象のコンテナを右クリック > Attack Shellを押す。
すると以下の様な画面がでる。

スクリーンショット 2020-09-13 20.03.04.png
これがコンテナの中に入った状態。

root@df80b994d93d:/project# ls
app.js  docker-compose.yml
root@df80b994d93d:/project#   

lsコマンドをうつと中にVSCodeのプロジェクトと同じファイルが表示される。
そして、ここはnodejs環境のコンテナなのでnodejsが使えるかどうか確かめる。

root@df80b994d93d:/project# node -v
v14.10.1

これが出たらOK

あらかじめ用意しておいたapp.jsを実行する。

root@df80b994d93d:/project# node app.js
hello node!

実行できた。

仮想環境を消す。

仮想環境は放置しておくと重いので、作業が終わったら消す。

スクリーンショット 2020-09-13 20.49.21.png

イメージを消す。

イメージの方は、これがあることによってdocker-compose up -dが早くなるため、頻繁に使うなら残しておいてもOK.

しばらく使わないなら消す。

スクリーンショット 2020-09-13 20.50.28.png

これで仮想環境の構築、仮想環境でのプログラムの実行、仮想環境の削除が一通りできた。

解説

docker-compose.ymlについて

docker-composeの基本的な構文は以下

docker-composeの構文
version: バージョン番号。
services:
    サービス名:
        サービスの設定...

versionは最新版が3
サービス名は自分でつける。なんでもOK。

docker-compose.yml
version: "3" # 最新版は3
services: # ここは固定
    node: # なんでも良いが、nodeのイメージを使ってるのでそのままnodeというサービス名に。
        image: node:14.10
        volumes: 
            - .:/project
        tty: true
        working_dir: /project
        command: bash

サービスの設定は多くあるが、詳しく知るためには公式ドキュメントを読むのが一番良い。

リファレンス

今回使った設定項目について1つずつ解説していく。

image
コンテナを作るためのイメージを記載。

image: イメージ名:タグ名

タグ名はバージョンととらえてOK

Dockerで使うイメージはDocker Hubというサイトにいろいろある。
nodeイメージ

スクリーンショット 2020-09-14 0.06.37.jpg

本記事で使ったタグはこれ

volumes
ローカルのフォルダとコンテナのフォルダをリンクさせる。

        volumes: 
            - ローカルのフォルダのパス:コンテナのフォルダのパス

これを設定しておかないと、コンテナからapp.js等のローカルに配置されたファイルをみることができない。

tty

tty: true

commandで指定した処理を行なった後すぐコンテナが停止しないようにする。
Attach Shellでコンテナに入る時は必須。

working_dir
そのまんまだが、コマンドを実行するときの場所。Attach Shellを行ったときもここで指定したフォルダに入る。

command
コンテナ起動時に実行する処理。
今回はbashを指定してるので、ターミナル開いて待っててっていう感じ。

他にもいろんな設定があるので別のDockerの記事をみて知らない項目があったらリファレンスを読むと良いと思う。

docker-compose up -dについて

リファレンス

docker-compose.ymlを読んで、必要であればイメージをダウンロードしてコンテナを作成するコマンド。

-dはバックグラウンドで起動するためのオプション。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした