Dockerが動くLXCコンテナのプロファイル

しばらく前にDockerが動くLXCコンテナのプロファイルを書いたので、貼り付けます。Ubuntu 20.04用です。18.04などでも動くと思います。
storage backendはzfsでしか試していません。
cloud-configで、ユーザーを作ったりDockerのレポジトリを追加したりパッケージをインストールしたりしています。
docker-composeコマンドと、docker-composeのbash completionもインストールされます。

config:
  security.nesting: "true"
  user.user-data: |
    #cloud-config
    #ssh_pwauth: no
    ssh_pwauth: yes
    apt:
      primary:
        - arches: [default]
          uri: http://ftp.naist.jp/pub/Linux/ubuntu/
    users:
      - name: docker
        passwd: $6$9CiMkNR5Cj50qjKQ$TRyisZVTOPMFW2I.F9SFSeNBhXhrMoPPhVzcOo..f0RdIbGU5z8QWXQtxH1cGTm6cSNhQArnrZWWCue9fDQie/
        lock_passwd: false
        #ssh_import_id:
        #  - gh:jkbys
        #ssh-authorized-keys:
        #  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDl8kFVmvZEPkXBlj0Up3QAG/u86+6U8cWAM4uT9UE9p jkbys@ubuntu-vm
        groups: sudo
        shell: /bin/bash
    package_update: true
    package_upgrade: true
    packages:
      - tzdata
      - bash-completion
      - cron
      - iptables
      - ufw
      - iputils-ping
      - less
      - locales
      - rsync
      - vim
      - curl
      - language-pack-ja
      - manpages-ja
      - manpages-ja-dev
      - apt-transport-https
      - ca-certificates
      - gnupg-agent
      - software-properties-common
    runcmd:
      - timedatectl set-timezone Asia/Tokyo
      - localectl set-locale 'LANG=ja_JP.utf8'
      - update-alternatives --set editor /usr/bin/vim.basic
      - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&
        add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" &&
        apt update && apt install -y docker-ce docker-ce-cli containerd.io &&
        gpasswd -a docker docker
      - COMPOSE_VERSION=`git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1`
      - curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose &&
        chmod +x /usr/local/bin/docker-compose
      - curl -L https://raw.githubusercontent.com/docker/compose/${COMPOSE_VERSION}/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
description: Docker on LXC
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: docker
used_by: []

以下、最低限のメモです。

aptミラーを「http://ftp.naist.jp/pub/Linux/ubuntu/」にしてあります。適切なミラーに変えて使ったほうがいいです。

ユーザー名を「docker」、初期パスワードを「docker」にしてあります。参考にされる場合は適切に変更してください。「ssh_import_id:」を有効にしてsshの公開鍵をインポートさせることもできます。「gh:ユーザー名」でGitHubからインポートされます。「ssh-authorized-keys:」にAuthorized Keysを直接書くこともできます。詳しくはcloud-initのドキュメントに載っています。なお、パスワード認証を使わないなら「ssh_pwauth: no」にしたほうがいいでしょう。

「docker」という名前でプロファイルを保存した場合は、以下のようなコマンドでコンテナが起動します(docker-hostはコンテナ名の例)。

lxc launch ubuntu:20.04 -p docker docker-host

コンテナがスタートした後、ユーザーが作られ、Dockerのインストールが終わるまでしばらく時間がかかります。

上の例ではUbuntu 20.04 LTSのイメージを使っていますが、snapなどが含まれないUbuntu Minimalイメージを使う場合は、以下のように実行します。Dockerを動かすだけなら、こちらのほうがコンテナのサイズやメモリ消費を節約できます。

lxc remote add --protocol simplestreams ubuntu-minimal https://cloud-images.ubuntu.com/minimal/releases
lxc launch ubuntu-minimal:20.04 -p docker docker-host

コメント

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