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 vSphere、Amazon Web Services、Microsoft 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がなくてもイメージを作ってくれるコマンドです。と聞くと夢のようなコマンドですが、現状対応しているのはMavenとSprint 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.yml は Docker 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はとても意欲的な機能です。今後の続報に注目していきたいと思います。