fbpx

Docker Enterprise 3.0 ベータ版を試してみた: Dockerfileなしでイメージ作成、テンプレートなど意欲的な新機能を含む #docker #kubernetes #k8s

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

先日、Docker Enterprise 3.0ベータ版テスト参加者へライセンスが届いたので、早速テストしてみたので一部をご紹介いたします。

なお、「Docker Enterprise 3.0」とは単一の製品名ではなく、次の製品を総称するブランド名のようなものです:

  • Docker Engine 19.03.0-beta4 (3.0ベータ版時点、以降同様)
  • Universal Control Plane (UCP) 3.2.0-beta4
  • Docker Trusted Registry (DTR) 2.7.0-beta4
  • Docker Desktop Enterprise (Windows, Macのみ)

筆者はLinux上のVirtualBoxでテストしたため、今回はDocker Desktop Enterpriseに関しては触れていないことをご了承ください。

Universal Control Plane (UCP)

Dockerクラスタをブラウザで管理するウェブインターフェイスです。DockerだけでなくKubernetesも管理できます。

Docker Trusted Registry (DTR)

簡単に言うと、自前のDocker Hubです。セキュリティスキャン機能などを備えています。

Docker Engineの新機能

NVIDIA GPUサポート

Docker社側からはこれまで明確な言及のなかったNVIDIA GPUサポートについて、正式に含まれるようになりました。

$ docker container run --help
    :
      --env-file list                  Read in a file of environment variables
      --expose list                    Expose a port or a range of ports
      --gpus gpu-request               GPU devices to add to the
                                       container ('all' to pass all GPUs)
      --group-add list                 Add additional groups to join
    :

この --gpus がGPUサポートのための新しいオプションです。なお、依然としてnvidia-container-runtimeのインストールは必要です。

docker cluster コマンド

Docker Certified Infrastructure (DCI)の管理コマンドです。これを用いると VMware vSphereAmazon Web ServicesMicrosoft Azureのインスタンスを起動しつつ、UCP/DTRをインストールしてクラスタを作成することが可能となります。別バイナリだったDocker Machineを取り込み、さらに機能拡張したものと考えるとわかりやすいでしょうか? docker clusterコマンドはYAMLでクラスタを記述することができます。

$ docker cluster

Usage:  docker cluster [OPTIONS] COMMAND



Options:
      --dry-run            Skip provisioning resources
      --log-level string   Set the logging level
                           ("trace"|"debug"|"info"|"warn"|"error"|"fatal") (default "warn")

Commands:
  backup      Backup a running cluster
  begin       Creates an example cluster declaration
  create      Create a new Docker Cluster
  inspect     Show detailed information about a cluster
  logs        TODO: Fetch the logs of a cluster
  ls          List all available clusters
  restore     Restore a cluster from a backup
  rm          Remove a cluster
  update      Update a running cluster's desired state
  version     Print Version, Commit, and Build type

Run 'docker cluster COMMAND --help' for more information on a command.

docker context コマンド

Docker CLIの接続先を切り替えるためのコマンドです。単一のDocker CLIから、Swarmクラスタ、Kubernetesクラスタ、単一のDockerノードへと接続先を切り替えることができます。これまでは環境変数 DOCKER_HOST などを使っていましたが、それより簡単に切り替えが可能になりそうです。

$ docker context

Usage:  docker context COMMAND

Manage contexts

Commands:
  create      Create a context
  export      Export a context to a tar or kubeconfig file
  import      Import a context from a tar file
  inspect     Display detailed information on one or more contexts
  ls          List contexts
  rm          Remove one or more contexts
  update      Update a context
  use         Set the current docker context

Run 'docker context COMMAND --help' for more information on a command.
$
$ docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
$ docker context create k8s --default-stack-orchestrator=kubernetes --kubernetes config-file=$HOME/.kube/config --docker host=unix:///var/run/docker.sock
Successfully created context "k8s"
$ docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                ORCHESTRATOR
default *           Current DOCKER_HOST based configuration   tcp://localhost:2376          https://localhost:6443 (default)   swarm
k8s                                                           unix:///var/run/docker.sock   https://localhost:6443 (default)   kubernetes

docker assemble コマンド

開発済みのソースツリーに対して、使っている言語やフレームワークを検出し、Dockerfileがなくてもイメージを作ってくれるコマンドです。と聞くと夢のようなコマンドですが、現状対応しているのはMavenSprint Bootを使っているプロジェクトか、ASP.NET Coreのプロジェクトのみです。拡充を楽しみに待ちましょう。

docker assemble を使うには、まずバックエンドを起動します。

$ docker assemble backend start 
    :
Started backend container "docker-assemble-backend-vagrant" (4095005c3642)
Started backend → host port 5000 proxy container "docker-assemble-backend-vagrant-proxy-port-5000" (c4df8c21e76d)
  • Spring Boot プロジェクトの例

Docker化Sprint Bootデモから、 Dockerfile を削除して docker assemble を実施します。

$ git clone https://github.com/anokun7/docker-springframework
$ rm docker-springframework/Dockerfile docker-springframework/Dockerfile.maven
$ docker assemble build docker-springframework
    :
Successfully built: docker.io/library/hello-boot:1
$ docker container run --rm -d -p 8888:8080 hello-boot:1 
fd7b86ce9de03bb143b8d447a988b238618061377ec1db968747cc4c0d4dbd7c
$ docker logs fd7b86ce9de03bb143b8d447a988b238618061377ec1db968747cc4c0d4dbd7c

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.2.RELEASE)

2019-05-24 07:39:49.109  INFO 1 --- [           main] hello.Application                        : Starting Application v1 on fd7b86ce9de0 with PID 1 (/hello-boot-1.jar started by root in /)
2019-05-24 07:39:49.130  INFO 1 --- [           main] hello.Application                        : No active profile set, falling back to default profiles: default
  • ASP.NET Core プロジェクトの例

Docker化.NET Coreデモから、 Dockerfile を削除して docker assemble を実施します。

$ git clone https://github.com/mbentley/dotnetdemo
$ rm dotnetdemo/Dockerfile dotnetdemo/dotnetdemo/Dockerfile
$ docker assemble build dotnetdemo/dotnetdemo
    :
Successfully built: docker.io/library/dotnetdemo:latest
$ docker run -d --rm -p 8888:80 dotnetdemo 
86d4ee692526ff049d3bfd96bcd9126f1d71cde414dc30997f91543b6885b9df
$ curl -s localhost:8888 | grep h4
<h4>This environment is </h4>
<h4>served from 86d4ee692526 at 05/24/2019 07:50:26</h4>

docker app コマンド

Cloud Native Application Bundle (CNAB)仕様に基くDockerアプリケーションを管理するためのコマンドです(分散型アプリケーションのパッケージングと実行を行うクラウド非依存なオープンソース仕様: CNAB)。
こちらはDocker Composeを機能拡張したようなものと考えるとイメージしやすいかと思います。

まず雛形を作成します。

$ docker app init --single-file hello-world
Created "hello-world.dockerapp"

雛形を編集します。最初のパートはこのアプリの説明、真ん中のパートはDocker Composeファイル、最後のパートは値を定義しています。

$ vi hello-world.dockerapp
version: 0.1.0
name: hello-world
description: 
maintainers:
  - name: vagrant
    email: 

---
version: "3.6"
services:
  hello:
    image: hashicorp/http-echo
    command: ["-text", "${text}"]
    ports:
      - ${port}:5678

---
port: 8888
text: Hello world!

チェックします。

$ docker app validate hello-world.dockerapp
Validated "hello-world.dockerapp"
$ docker app inspect hello-world.dockerapp
hello-world 0.1.0

Maintained by: vagrant

Service (1) Replicas Ports Image
----------- -------- ----- -----
hello       1        8888  hashicorp/http-echo

Parameters (2) Value
-------------- -----
port           8888
text           Hello world!

Dockerアプリとして起動します。

$ docker app install hello-world.dockerapp --name my-app
Creating network my-app_default
Creating service my-app_hello
Application "my-app" installed on context "default"

動作確認します。

$ curl http://192.168.33.10:8888
Hello world!

docker-compose.yml ファイルとして書き出すこともできます。

$ docker app render -o docker-compse.yml hello-world.dockerapp
$ cat docker-compse.yml
version: "3.6"
services:
  hello:
    command:
    - -text
    - Hello world!
    image: hashicorp/http-echo
    ports:
    - mode: ingress
      target: 5678
      published: 8888
      protocol: tcp

書き出した docker-compose.ymlDocker Compose にも Docker Stack にも渡すことができます。

さらに、まとめてDocker Hubにプッシュ・プルすることもできます。

docker template コマンド

簡単に言えば、ソフトウェアカタログです。Docker Desktop EnterpriseでGUI上から使うこともできますが、CLIもあります。

$ docker template list
INFO[0000] fetching https://docker-application-template.s3.amazonaws.com/production/v0.0.8/library.yaml 
NAME                    TYPE          DESCRIPTION
aspnet-mssql            application   Sample asp.net core application with mssql database
nginx-flask-mysql       application   Sample Python/Flask application with an Nginx proxy and a MySQL database
nginx-golang-mysql      application   Sample Golang application with an Nginx proxy and a MySQL database
nginx-golang-postgres   application   Sample Golang application with an Nginx proxy and a PostgreSQL database
react-java-mysql        application   Sample React application with a Spring backend and a MySQL database
react-express-mysql     application   Sample React application with a NodeJS backend and a MySQL database
sparkjava-mysql         application   Java application and a MySQL database
spring-postgres         application   Sample Java application with Spring framework and a Postgres database
angular                 service       Angular service
aspnetcore              service       A lean and composable framework for building web and cloud applications
consul                  service       A highly available and distributed service discovery and KV store
django                  service       A high-level Python Web framework
express                 service       NodeJS web application with Express server
flask                   service       A microframework for Python based on Werkzeug, Jinja 2 and good intentions
golang                  service       A powerful URL router and dispatcher for golang
gwt                     service       GWT (Google Web Toolkit) / Java service
jsf                     service       JavaServer Faces technology establishes the standard for building server-side user interfaces.
mssql                   service       Microsoft SQL Server for Docker Engine
mysql                   service       Official MySQL image
nginx                   service       An HTTP and reverse proxy server
postgres                service       Official PostgreSQL image
rails                   service       A web-application framework that includes everything needed to create database-backed web applications
react                   service       React/Redux service with Webpack hot reload
sparkjava               service       A micro framework for creating web applications in Java 8 with minimal effort
spring                  service       Customizable Java/Spring template
vuejs                   service       VueJS service

独自のテンプレートを作成することもできます。

docker registy コマンド

Dockerレジストリを管理するコマンドです。

$ docker registry

Usage:  docker registry COMMAND

Manage Docker registries

Commands:
  events      List registry events (DTR Only)
  history     Inspect registry image history (DTR Only)
  info        Display information about a registry (DTR Only)
  inspect     Inspect registry image
  joblogs     List registry job logs (DTR Only)
  jobs        List registry jobs (DTR Only)
  ls          List registry images
  rmi         Remove a registry image (DTR Only)

Run 'docker registry COMMAND --help' for more information on a command.

まとめ

全体的に、Dockerエコシステムをより強固に確立していこうという狙いがあるように見えました。特にAssembleやTemplateはとても意欲的な機能です。今後の続報に注目していきたいと思います。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA