karasuex54’s blog

プログラミングよりイリヤの方が好き

docker-composeでdenoの環境を作る

はじめに

お久しぶりです、からすさんです。タイトル通りdocker-composeでdenoを試すための環境を作る記事です。本記事の環境は次の通りです。

Ubuntu 20.04.3 LTS (Focal Fossa)
Docker version 20.10.8
docker-compose version 1.26.0

docker-compose

次のようにdocker-compose.ymlを作成します。

version: '3'
services:
  app:
    image: denoland/deno:1.15.1
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    command: /bin/bash
    tty: true

command: /bin/bashtty: trueはコンテナを起動させ続けるために記述しています。

コンテナ起動

次のコマンドで起動させます。

$ docker-compose up -d

コンテナが実行中であるかを次で確認します。

$ docker-compose ps
      Name                     Command               State                    Ports                  
-----------------------------------------------------------------------------------------------------
deno-docker_app_1   /tini -- docker-entrypoint ...   Up      0.0.0.0:8000->8000/tcp,:::8000->8000/tcp

コンテナ内でdenoを試す

先ほど起動させたコンテナ内でコマンド実行を行うために、次のコマンドを実行させます。

$ docker-compose exec app bash
root@xxx:/#

コンテナ内でdeno --versionと実行させて、次のような出力がされ、denoの環境作りが終えました。

root@xxx:/# deno --version
deno 1.15.1 (release, x86_64-unknown-linux-gnu)
v8 9.5.172.19
typescript 4.4.2

備考

tty

ttyは、UNIXで同名のコマンドがあり、「標準入出力となっている端末デバイスの名前を表示する」コマンドみたいです。

$ tty
/dev/pts/1

同じ計算機上で複数ターミナルを起動しているときに/dev/pts/1/dev/pts/2があった時に/dev/pts/1側のターミナル上で

$ echo "hello" > /dev/pts/2

とコマンドを実行させると/dev/pts/2側のターミナル上にhelloと出力させることができるみたいです。

Dockerにおけるtty

run — Docker-docs-ja 19.03 ドキュメント

によると

疑似ターミナル (pseudo-TTY) を割り当て

だそうです。

tty: turecommand: /bin/bash

docker-compose.yml内でtty: turecommand: /bin/bashの処理を行わなければ、コンテナを起動させた時に、コンテナがすぐに終了してしまいます。これは、コンテナを起動させ続けるためのプロセスが存在しないため、コンテナが正常終了してしまうからです。そのため、今回はコンテナを動かし続けるため、ターミナル上でbashを実行させプロセスが無くならないようにしています。

おわりに

間違った内容等があったら、こっそり教えてください!