Docker Engine および Docker Compose のインストール

Docker Engine は、コンテナーの作成、実行、削除などの操作を行うためのプラットフォームです。Docker Compose は、複数のコンテナーを定義し、一度に起動するためのツールです。それを使って、使い捨てな開発環境を実現します。 以下の手順に従って、Ubuntu に Docker Engine および Docker Compose をインストールします。

  1. Docker Engine のインストール

    Ubuntu に Docker Engine をインストール。本家のインストール手順はこちらです。

    注意: sudo コマンドの初回使用時には、「Ubuntu の初期設定」で設定したユーザーのパスワードを求められる場合があります。

    • インストール用スクリプトをダウンロード
      curl -fsSL https://get.docker.com -o get-docker.sh
      
    • スクリプトを実行
      sudo sh ./get-docker.sh
      

      注意: 実際にインストールする前に、スクリプトの手順を確認するには、--dry-run オプションを使用してください。スクリプトを実行する前に、スクリプトの内容を確認することをお勧めします。

      操作画面イメージ

      下記のように出力されれば成功です。
       [sudo] password for appuser:
       # Executing docker install script, commit: 4c94a56999e10efcf48c5b8e3f6afea464f9108e
      
       WSL DETECTED: We recommend using Docker Desktop for Windows.
       Please get Docker Desktop from https://www.docker.com/products/docker-desktop/
      
      
       You may press Ctrl+C now to abort this script.
       + sleep 20
       + sh -c apt-get -qq update >/dev/null
       + sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates curl >/dev/null
       + sh -c install -m 0755 -d /etc/apt/keyrings
       + sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o /etc/apt/keyrings/docker.asc
       + sh -c chmod a+r /etc/apt/keyrings/docker.asc
       + sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list
       + sh -c apt-get -qq update >/dev/null
       + sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
       + sh -c docker version
       Client: Docker Engine - Community
       Version:           27.5.0
         
       〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
      
       ================================================================================
      
       To run Docker as a non-privileged user, consider setting up the
       Docker daemon in rootless mode for your user:
      
          dockerd-rootless-setuptool.sh install
      
       Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
      
      
       To run the Docker daemon as a fully privileged service, but granting non-root
       users access, refer to https://docs.docker.com/go/daemon-access/
      
       WARNING: Access to the remote API on a privileged Docker daemon is equivalent
                to root access on the host. Refer to the 'Docker daemon attack surface'
                documentation for details: https://docs.docker.com/go/attack-surface/
      
       ================================================================================
      
    • 今のユーザーを docker グループに追加
       sudo usermod -aG docker $USER
      
  2. Docker の自動起動設定

    Ubuntu 起動時に、Docker が自動起動するように、~/.bashrcファイルに設定を追記します。

    cat << EOF >> ~/.bashrc
    # Automatically start the Docker service.
    sudo /etc/init.d/docker start
    EOF
    
  3. Docker Compose のインストール

    Ubuntu に Docker Compose をインストール

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
    sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
    
    下記のように出力されれば成功です。
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 56.8M  100 56.8M    0     0  5678k      0  0:00:10  0:00:10 --:--:-- 4043k
    update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode
    update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in manual mode
    
  4. 起動確認

    Docker Engine の起動確認を行います。

    sudo service docker start
    

    Docker Engine のステータスを確認を行います。q を入力すると確認のプロセスが終了します。

    sudo service docker status
    
    下記のように出力されれば成功です。
     ● docker.service - Docker Application Container Engine
           Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
           Active: active (running) since Mon 2024-10-07 01:39:12 JST; 19min ago
     TriggeredBy: ● docker.socket
             Docs: https://docs.docker.com
         Main PID: 1707 (dockerd)
           Tasks: 9
           Memory: 23.3M
           CGroup: /system.slice/docker.service
                   └─1707 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    
     Oct 07 01:39:11 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:11.621541113+09:00" level=info msg="Loading containers: start."
     Oct 07 01:39:11 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:11.982773484+09:00" level=info msg="Loading containers: done."
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001453932+09:00" level=warning msg="WARNING: No blkio throttle.read_bps_device support"
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001510074+09:00" level=warning msg="WARNING: No blkio throttle.write_bps_device support"
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001516351+09:00" level=warning msg="WARNING: No blkio throttle.read_iops_device support"
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001519672+09:00" level=warning msg="WARNING: No blkio throttle.write_iops_device support"
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001534576+09:00" level=info msg="Docker daemon" commit=41ca978 containerd-snapshotter=false storage-driver=overlay2 version=27.3.1
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.001720657+09:00" level=info msg="Daemon has completed initialization"
     Oct 07 01:39:12 XXXXXXXX dockerd[1707]: time="2024-10-07T01:39:12.057976730+09:00" level=info msg="API listen on /run/docker.sock"
     Oct 07 01:39:12 XXXXXXXX systemd[1]: Started Docker Application Container Engine.