Dart言語用Docker環境設定

Dart用docker環境Docker

Dart言語用Docker環境についてメモ書き。

概要

Dart言語を検証するためのDocker環境設定。
DartはクロスプラットフォームFlutterの開発言語。
Dartはシングルバイナリにコンパイルもできる優れもの。複数プラットフォームに対応しているので、これから採用が進むと思う。
前提条件:DockerHubからDartイメージをダウンロードしている事。

dockerfile

イメージビルド用のdockerfileを作成。

FROM dart:2.19.1
WORKDIR /app
COPY pubspec.* ./
RUN dart pub get

パッケージの依存関係を解決できるよう、ローカルディレクトリにpubspec.yamlを用意。
「COPY pubspec.* ./」と「RUN dart pub get」でパッケージを追加できるようにしている。ここら辺の設定はDocker Hubの本家サイトに書いてある。

pubspec.yaml

pubspec.yamlには最低限必要なことのみ記載。

name: darttest
environment:
  sdk: '^2.12.0'

docker-compose.yaml 

コンテナの設定を記載。
ローカルにappディレクトリを追加し、コンテナでマウントしている。
dartファイルはappディレクトリに置く。そうする事でローカルのdartファイルをコンテナから実行できる。

version: '3'
services:
  dt:
    build: .
    volumes:
      - ./app:/app

appディレクトリ配下に実行確認用のtest.dartファイルを作成。

void main(){
	print('Hello World');
}

実行確認

コンテナからdartコマンドを実行。
初回なのでビルド後に「Hello World」が出力される。

% docker-compose run --rm dt dart run test.dart
[+] Building 23.1s (9/10)                                                                                                                    
 => [internal] load build definition from dockerfile                                                                                    0.0s
 => => transferring dockerfile: 102B                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/dart:2.19.1                                                                          3.5s
 => [auth] library/dart:pull token for registry-1.docker.io                                                                             0.0s
 => [1/4] FROM docker.io/library/dart:2.19.1@sha256:86d317e7e92835424db0263cd0cef52c7317aac51925846ead49178b7108189a                   19.5s
 => => resolve docker.io/library/dart:2.19.1@sha256:86d317e7e92835424db0263cd0cef52c7317aac51925846ead49178b7108189a                    0.0s
 => => sha256:86d317e7e92835424db0263cd0cef52c7317aac51925846ead49178b7108189a 776B / 776B                                              0.0s
 => => sha256:3c9996f8ec75117d15046b610d2b93b84f17909c53af89e395965984200a96e1 1.17kB / 1.17kB                                          0.0s
 => => sha256:e2a1110a7b169f68bbb6f84764a7742fc03f863fdaa244d74eb2ac5e01ebeed6 5.70kB / 5.70kB                                          0.0s
 => => sha256:f79f8cc5c20d534298dd6317333f38b7691da6d66e063ff10699727982c852be 30.04MB / 30.04MB                                        5.4s
 => => sha256:875e2c857f9031f1928346d5a7013fef3c248a5ee290ea78540b9ef451786cf9 45.01MB / 45.01MB                                       10.1s
 => => sha256:d57c837d524850bdc639ce14b14dfc733d64899b719ca687282f76b3db7d6241 1.56MB / 1.56MB                                          1.0s
 => => sha256:65212c00c6e09623e7f0d937583e3cf5ed9f6b3de7f9883e109302b23f99c962 129.33MB / 129.33MB                                     16.1s
 => => extracting sha256:f79f8cc5c20d534298dd6317333f38b7691da6d66e063ff10699727982c852be                                               1.3s
 => => extracting sha256:875e2c857f9031f1928346d5a7013fef3c248a5ee290ea78540b9ef451786cf9                                               1.5s
 => => extracting sha256:d57c837d524850bdc639ce14b14dfc733d64899b719ca687282f76b3db7d6241                                               0.1s
 => => extracting sha256:65212c00c6e09623e7f0d937583e3cf5ed9f6b3de7f9883e109302b23f99c962                                               2.2s
 => [internal] load build context                                                                                                       0.0s
 => => transferring context: 84B                                                                                                        0.0s
 => [2/4] WORKDIR /app                                                                                                                  0.6s
 => [3/4] COPY pubspec.* ./                                                                                                             0.0s
 => [4/4] RUN dart pub get                                                                                                              0.5s
 => exporting to image                                                                                                                  0.0s
 => => exporting layers                                                                                                                 0.0s
 => => writing image sha256:d8c761fbb6df467b89b40b39df0f883e3fdbbf880ce47bcb3dce3f737af712c7                                            0.0s
 => => naming to docker.io/library/dart-dt                                                                                              0.0s
  ╔════════════════════════════════════════════════════════════════════════════╗
  ║ The Dart tool uses Google Analytics to report feature usage statistics     ║
  ║ and to send basic crash reports. This data is used to help improve the     ║
  ║ Dart platform and tools over time.                                         ║
  ║                                                                            ║
  ║ To disable reporting of analytics, run:                                    ║
  ║                                                                            ║
  ║   dart --disable-analytics                                                 ║
  ║                                                                            ║
  ╚════════════════════════════════════════════════════════════════════════════╝

Hello World

dart用のイメージファイルが作成されている。

% docker image ls 
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
dart-dt         latest    d8c761fbb6df   2 minutes ago   629MB
mysql_mysqldb   latest    3b546580ac85   12 days ago     790MB
postgresql_db   latest    6f6640a850ad   2 weeks ago     266MB

コメント

タイトルとURLをコピーしました