使用可能なコンテナイメージの作成


あなたは、コンテナイメージを確認するために使用可能なことを知っていましたか?それは実際には、オンラインで見つけるいくつかのDockerFilesと比較して画像を作成する非常に読みやすい方法です(あなたがそう思わない場合は、おそらく100 +行であるものを読むことはありません).この記事では、可憐なベンダーを使用してビルドイメージを見てみましょう.これは最小限のファズでイメージを作る良い方法になります.
必要に応じてリフレッシュが必要ですか?It was introduced in the last article, so feel free to read it to refresh the concepts ( themkat . netで).あなたはおそらく、賢明な最初の基礎を知ることなく、有益なベンダーの多くの使用を得ることはありません.
最後の記事では,実現可能なコンテナ画像を簡単に議論した.An external blog article on that very subject was linked to , そして、あなたがそれを読むならば、あなたはDockerとbuildahコマンドを使っている多くのマニュアルステップを見たかもしれません.これは、ちょうど適切なコンテナ画像を作るために、ボイラープレートコードの多くのようです?その考えから.ansible-bender 生まれた!使いやすいベンダー使用Buildah あなたのイメージを構築するPodman それらを扱うには(画像を押したり、ログをビルドしたり、画像を検査するなどのコマンドがあります.BuildaHは、外部のプログラムに依存しないコンテナイメージビルダーで、コンテナランタイムのコンテナをビルドできます.非常に大きな欠点は、GNU/Linuxベースのシステムでのみサポートされているということです.Mac OS Xを使用しているならば、悪いニュースです(あるいは、Windowsユーザー、UGHの場合は、神を禁じます).この問題を解決するI made a Docker image これには、他のプラットフォームで実行可能なベンダーを実行するために使用できるビルダとすべての依存関係が含まれます.ちょっとGNU/Linuxベースのシステムでそれを使用するより少し遅いかもしれませんが、全くそれを使用することができないことを打ちません!
このようなツールをプレーンdockerfileと比較することに関しては、いくつかの長所と短所があります.
長所
  • あなたがネットのまわりで見つける若干のDockerfileより読みやすい方法でありえます.可読性は読むのが美しいので、これは私の見解でかなり大きな利益です.DockerFilesで嫌いではありません、私はそれらが同様に書くのが楽しいと思います.彼らがあまりに大きくなるならば、彼らはちょうど書くのが退屈になります.
  • すでにあなたのインフラストラクチャを構築するための可用性の脚本を使用して?それから、それらを使用することを考慮することができます.
  • 輸入された役割、脚本などは、分子のようなツールを使っている正しいふるまいのためにテストされることができます.
  • インポート可能な役割、遊び心などの銀河系からより速く(あなたがコースをオフに画像の種類に応じて)画像を構築することができます.
  • 短所
  • ベースイメージはPythonをインストールする必要があります.実行中にこれを行うことができますby turning off gather_facts and installing it during playbook run .
  • いくつかの粗いエッジ、特にキャッシュ機構.ほとんどの問題は使用することによって解決されます.それらの問題が将来貢献者によって固定されることができるので、本当にショーストッパーでありません.あなたが何を持っているかについて感じているなら、それはたぶんあなたでしょうか?
  • 結局、それは味に降ります.あなたが本当にAnsibleとその表現力が好きであるならば、私はあなたが可憐なベンダーを使って楽しむと思います.

    可用性ベンダーの使用


    それで、あなたは直接、または、上記のようなイメージを使用することによって、可用性ベンダーをインストールしました.次は何ですか.あなたがビルトインとポッドマンをインストールしたならば、あなたは直接道具を使うのを始めることができます!あなたのために挿入可能なベンダーの特定の変数を使用して脚本をしたい場合は、ansible-bender init コマンド、および脚本.YMLファイルはあなたのために作成されます.本質的には、それはどのような有益なベンダーの脚本は本当にですいくつかの特別な変数を持つ通常の再生可能な脚本.これらの特殊変数はcovered in depth in the documentation .
    あなたは不思議かもしれません:私が1つ以上の遊びでAnsibleCamベンダー変数を持っているならば、何がそれから起こりますか?最初のプレーからの変数だけが使用されます.その向こうに、あなたは複数の遊びを持つために自由です.
    話は安い、いくつかの例を見てみましょう!

    例:コンテナ化Emacsの設定


    最後の記事からトレンドを継続!(注:最後の記事on themkat.net ) Emacsセットアップを使用してイメージを準備しましょう.
    ---
    - name: Emacs setup - Containerized 
      hosts: all
    
      vars:
        ansible_bender:
          base_image: python:3.9-slim-bullseye
    
          target_image:
            name: myemacs
            cmd: bash
            user: themkat
            working_dir: /home/themkat
    
      pre_tasks:
        - name: Update package archives (Debian-based)
          apt:
            update_cache: true
            cache_valid_time: 7200
          when: ansible_os_family == "Debian"
    
      tasks:
        - name: Make sure Emacs and git is installed
          package: 
            name:
              - emacs
              - git
            state: present
    
        - name: Create themkat user
          user:
            name: themkat
            create_home: true
            state: present
    
        # had issues with using the home symbol + become_user here. Might be an issue to look out for
        - name: Download Emacs  config
          #become_user: themkat
          git:
            repo: https://github.com/themkat/.emacs.d.git
            dest: /home/themkat/.emacs.d
    
        - name: Make themkat the owner
          file:
            path: /home/themkat/.emacs.d
            owner: themkat
            recurse: true
            state: directory
    
    注意:上記のコメントで見たように、私はBoomeMountユーザーとホームシンボル/チルダでいくつかのマイナーな問題を経験しました.これらは、可用性ベンダーやコンテナに関するバグです.まだ犯人を見つけるために十分にテストされていないので、何かを認識するようにこれを提示する.
    どうやってこれを作るの?コマンドを使うansible-bender build playbook.yml . なぜ私たちは“Debianのとき”-それは常にそのベースイメージでDebianであるときにチェックしているかもしれません.理由は簡単です:これを行うことにより、セットアップを柔軟に保つ.Fedoraイメージが欲しかったら、コマンドラインから簡単にオーバーライドできますansible-bender build playbook.yml fedora:35 .
    上で見ることができるように、イメージを作成するために使用される可用性ベンダー1にプレーン可用性のプレイブックとの違いは、そんなに大きくないです.基本的なイメージのような単純なイメージ関連の変数だけでなく、結果として生じるイメージ名、実行するコマンド、一般的にコンテナイメージを作るとき、我々は標準的な設定をします.

    例:単純なスプリングブーツアプリケーションイメージ


    ビルド中にボリュームと使用可能なロールの使用方法を示すことによって、少し違うことをしましょう.アプリケーションをコンテナーにパッケージ化したいのは珍しいことではありませんし、簡単にするために、PlayBook自体と同じディレクトリに置くことができません.この例をあまり高度にしないために、私たちは単にSpring Initializr 変更なしでif you prefer a terminal UI, there is one for that too ). Javaセットアップを使用して、Javaを設定するためにGeerlingMiles Javaロールを使用します.
    ---
    - name: Containerized Spring Boot app
      hosts: all
      vars:
        ansible_bender:
          base_image: fedora:35
          target_image:
            cmd: java -jar /app/spring-app.jar
            name: spring-app-example
          working_container:
            volumes:
            - "{{ playbook_dir }}:/src"
    
      roles:
        - role: geerlingguy.java
          java_packages:
            - java-11-openjdk
    
      tasks:
      - name: Make app directory that will include our application
        file:
          path: /app
          state: directory
    
      - name: Build application
        command:
          chdir: /src
          cmd: ./mvnw clean install
          creates: /src/target/spring-app-0.0.1-SNAPSHOT.jar
    
      - name: Copy jar file to app directory
        copy:
          remote_src: true
          src: /src/target/spring-app-0.0.1-SNAPSHOT.jar
          dest: /app/spring-app.jar
    
    これを実行するために、我々はgeerlingguyをインストールするために、賢明な銀河を使わなければなりません.Java最初に、要件ファイルまたは直接のどちらかansible-galaxy install geerlingguy.java ). その後、我々は単に最後の例のように我々のイメージを構築することができます.
    何が起こるのですか.Maven Spring Bootプロジェクトをビルドし、結果のJARファイルをappディレクトリに置きます.SRCの内容を削除してはいけませんか?すべてのソースコードとビルドファイルは最終的なイメージに含まれませんか?だめ!構築が完了すると、srcはマウントされず、ディレクトリは空です.かなりきれい!

    便利なコマンド


    可用性ベンダーはかなりa few useful commands beyond just building images . 以前のビルドログを取得したい場合は、実行できます.画像を検査する簡単です.しかし、私にとって、最も役に立つことはおそらくイメージを押すことです.必ずしも中央の倉庫または何かでなく、Dockerに.私は認めなければならない、私はまだDockerを使用します.最初の例のようにMyMacsイメージを構築して、タグ0.1でDockerデーモンにプッシュしたいとしましょう.それから以下を実行します:
      ansible-bender push docker-daemon:myemacs:0.1
    

    概要


    要約すると、可用性ベンダーは確かにいくつかの楽しさと便利なユースケースを持っている有望なツールのようです.画像を作るには、特に大きなもののために、非常に読める方法のようです.DockerFilesはすぐに厄介な取得し、その問題のためのAntidoteかもしれない.