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を動かしてみよう

Last updated at Posted at 2022-06-22

Dockerって何?

Dockerとは、コンテナ型の仮想環境を構築するOSSのプラットフォーム。イメージ(環境のテンプレート)を元にコンテナ(独立したインスタンス)を作成することで同一のアプリケーションを配布したり、テストを行うことができる。これを軽量かつ高速に行うことができるため、CI/CDを行う上で適している。

image.png

導入

Docker Desktopを入れる。

動かしてみよう

初期状態ではローカルにはイメージは含まれていない。
image.png
同様にコンテナもない。(チュートリアルが出てるが一旦無視する)
image.png

公式イメージからコンテナを作る

ターミナルから、以下のコマンドでubuntuイメージを動かしてみる。

docker run -itd ubuntu

これでubuntuを実行する。

ローカルには存在しないので、公式からイメージがダウンロードされる。
image.png
これを元にコンテナが作られる。
image.png

同様のイメージ一覧、コンテナ一覧の内容がコマンドからも取得できる。

docker image ls
docker ps -a

ここで-aは実行中以外も見れるようにするためのオプション。

補足

基本的にはdocker run オプション イメージ名で実行する。オプションの-dはバックグラウンドでの実行の指定、オプションの-it標準入力、標準出力の指定。これを指定しないと、何もプロセスを実行することがないコンテナは勝手に終了してしまう。

今回はubuntuを指定したが、そのほかにも公式で用意されているイメージはいろいろある↓。

ターミナルから動かしてみよう

作成したコンテナを動かしてみよう。
ここからターミナルを実行できる。
rapture_20220623010625.jpg

ls

とか叩いて

bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

とか出ればOK。

以下のコマンドをローカルのターミナルから実行することでコンテナのターミナルを開くこともできる。

docker container exec -it <コンテナid> bash

(指定したコンテナでbashを実行、-itで入出力をつなげている)

同じように、元のターミナルから以下のコマンドを叩いても実行できる。

docker exec <コンテナid> ls

これでも同じ出力が出る。

コンテナを終了しよう

コンテナは以下のコマンドで停止、削除することができる。

docker stop <コンテナid>
docker rm <コンテナid>

コンテナを作ってみよう

ここまでは公式で用意されているイメージを用いたが、今度はコンテナを作成してみる。Dockerfileというものを作成する。

プロジェクト用のディレクトリを作成し、そこにDockerfileというファイルを作成する。

Dockerfile
FROM ubuntu
RUN apt update
WORKDIR /app
COPY . .
  • FROMで元となるイメージを指定する。今回はubuntuを指定する。
  • RUNでコマンドを実行する(apt updateを動かす)。
  • WORKDIRでディレクトリを指定する。
  • COPYで現在のローカルマシンからコンテナへファイルを移す。

test-imageという名前を指定してイメージをビルドする。

docker build -t test-image .

これでイメージが作られる。

image.png

このイメージを元にコンテナを作る。

docker run -itd test-image

image.png

作成したコンテナのターミナルを開いてみると、

  • apt updateが実行済で
  • /appがカレントディレクトリで
  • ディレクトリの中身がコピーされている(Dockerfileが入ってる)

ことがわかる。

getting-startedを動かしてみよう

getting-startedに従ってnode.jsのアプリを動かしてみる。

まずは以下のレポジトリからcloneする。

この中の/app下のみを用いる。このディレクトリに以下のDockerfileを作成する。

FROM node:12-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

この中身を確認してみる。

  • FROMで公式イメージのnodeを指定する。さらに12-alpineというタグを付ける。
    • alpineは軽量化されたLinux環境。これを使うことを推奨されている。aptじゃなくてapkを使う、といった違いがある。
    • タグ一覧
  • RUNapk addを動かし、必要なパッケージを入れる。
  • WORKDIRでディレクトリを指定する。
  • COPYで現在のローカルマシンからコンテナへファイルを移す。
  • RUNyarn install --productionを実行。
  • CMDnode src/index.jsを実行する。
    • CMDはコンテナ作成時に実行される、RUNはビルド時に実行される
  • EXPOSEで指定したポートをlistenする

getting-startedという名前でイメージを作る。

docker build -t getting-started .

コンテナを作成する。動かすコマンドがあるので-itは不要。代わりに-p 3000:3000オプションをつけてポート3000からつながるようにする。

docker run -dp 3000:3000 getting-started

これで実行されたので、http://localhost:3000/ にアクセスしてみる。
rapture_20220623034233.jpg

こういうアプリが動いていたら成功。

Docker-Composeを使う

Docker Composeを用いると、複数のコンテナからなるアプリケーションの起動・停止を簡単に行うことができるようになる。これを使ってみる。

入っているか確認。

docker-compose version

なければ以下↓よりインストール。

以下のファイルdocker-compose.ymlを作成する。ここまで作成した二つのイメージを動かしてみる。

version: '3.7'

services:
  app1:
    image: test-image
    working_dir: /app
    tty: true
  app2:
    image: getting-started
    ports:
      - 3000:3000
  • versionschemaのバージョン。
  • services下で動かすサービスを指定する。app1app2と適当に名前を付けた。
  • app1では先ほど作ったtest-imageを指定する。
    • working_dirを指定できる。
    • tty: trueで標準出入力を指定。これで勝手に落ちない。
  • app2では先ほどのgetting-startedを指定する。
    • portsを指定して接続できるようにする。

これらの設定を行い、以下のコマンドで動かす。

docker-compose up -d

これで指定した二つのコンテナが起動すればOK。

docker-compose down

これで停止できる。。

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?