How to install Docker

1. Dockerのインストールの仕方

  1. 古いバージョンをアンインストール

    $ sudo apt-get remove docker docker-engine docker.io containerd runc
    

    It’s OK if apt-get reports that none of these packages are installed.

1.1 Install methods

Dockerのリポジトリをセットアップしてそこからインストール方法が推奨されている。

異なる方法もあるが、ここではリポジトリからインストールを行う。

  1. リポジトリの設定

    $ sudo -E apt-get update
    $ sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
  2. Dockerの公式GPGキーを追加

    $ sudo mkdir -p /etc/apt/keyrings
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
  3. 次のコマンドを使用して、リポジトリを設定

    $ echo \
     "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

1.2 DockerEngineのインストール

  1. aptパッケージインデックスを更新し、Docker Engine、containerd、Docker Composeの最新バージョンをインストールするか、次の手順に進んで特定のバージョンをインストールする
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Docker Engineの特定のバージョンをインストールするには、リポジトリに使用可能なバージョンをリストしてから、以下を選択してインストールを行う
    1. リポジトリで利用可能なバージョンを一覧表示

      $ apt-cache madison docker-ce
      
    2. たとえば、2番目の列のバージョン文字列を(5:20.10.16~3-0~ubuntu-jammy)使用して特定のバージョンをインストールするならば、次のようなコマンドを実行する

      $ sudo apt-get install docker-ce=5:20.10.13~3-0~ubuntu-hirsute docker-ce-cli=5:20.10.13~3-0~ubuntu-hirsute containerd.io docker-compose-plugin
      

1.3 proxyの設定

  1. Docker Engine の proxy 設定 docker pull などでイメージを落としてくる場合はDocker Engine にプロキシ設定をする必要がある。

    /lib/systemd/system/docker.serviceで環境変数を指定。[Service]の欄の下にEnvironmentを追記すればOK!

    [Service]
    Environment=HTTP_PROXY=http://{HOST}:{port}
    Environment=HTTPS_PROXY=http://{HOST}:{port}
    
  2. Docker コンテナ起動時の proxy 設定 ~/.docker/config.json を書いておくとコンテナ内に HTTP_PROXY などを自動で設定してくれる

    ※Docker Compose のときにはつかえない?

    {
    "proxies": {
        "default": {
        "httpProxy": "http://{HOST}:{port}",
        "httpsProxy": "http://{HOST}:{port}"
        }
    }
    }
    
  3. proxy設定の反映とDockerを再起動

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    

やってみたけどあまり意味のなかった設定

  • upstartの人

    $ sudo cat /etc/default/docker
    (省略)
    export no_proxy='export no_proxy=127.0.0.1,localhost,xxx.xxx.xxx.xxx'
    export NO_PROXY="${no_proxy}"
    export http_proxy='http://your.proxy.url:port/'
    export HTTP_PROXY="${http_proxy}"
    export https_proxy='https://your.proxy.url:port/'
    export HTTPS_PROXY="${https_proxy}"
    
  • Systemdの人

    $ sudo cat /etc/systemd/docker.service
    (省略)
    [Service]
    Environment="HTTP_PROXY=http://your.proxy.url:port/" "HTTPS_PROXY=https://your.proxy.url:port/"
    

    ※ /lib/systemd/system/docker.serviceと併用しようとするとDockerが起動しなくなるので注意!2つの設定が競合するのかな?

  • docker.service.dにファイルの追加

    $ cd /etc/systemd/system/
    $ mkdir docker.service.d
    $ sudo nano http-proxy.conf
        -> 内容の書き込み
    
    $ cat /etc/systemd/system/docker.service.d/http-proxy.conf
    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:8080/"
    Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
    

1.4 確認

  1. hello-worldイメージを走らせ、Dockerが正しくインストールされていることを確認
    $ sudo docker run hello-world
    

2. Dockerのアンインストール方法

  1. Docker Engine、CLI、Containerd、およびDockerComposeパッケージをアンインストール

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
  2. ホスト上のイメージ、コンテナー、ボリューム、またはカスタマイズされた構成ファイルは自動的に削除ない。すべてのイメージ、コンテナー、およびボリュームを削除するには下記を実行

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd
    

※編集した構成ファイルは手動で削除する必要がある

3. 問題とその解決策

3.1 $ sudo docker run hello-worldを実行するとタイムアウトしてしまう

インターネットに接続できない

-> proxyを設定(上記参照)

proxy 設定してもDockerイメージが取得できない(conectできない)…

おそらく公開鍵の問題!

apt updateなどを実行すると、「公開鍵を利用できないため、以下の署名は検証できませんでした」というエラーが出る。

つまりGPGエラーが問題だった!

ということでOpenGPG鍵をインポート

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-k

DockerのインストールでもGPG鍵キーのインストールはしているが、おそらく以下のどちらかが問題だった…

  • Install methodの 2. でもインストールしてるけどetcのところをusrにしなければならなかった
  • 1.2 DockerEngineのインストールはどちらも実行してしまい、DockerイメージをダウングレードしてしまったためGPGエラーが起こった(?)

補足(やってみたけど意味のなかったこと)

GPGエラーについて

W: 署名照合中にエラーが発生しました。 リポジトリは更新されず、過去のインデックスファイルが使われます。 GPG エラー: http://packages.cloud.google.com/apt cloud-sdk-xenial InRelease: 公開鍵を利用できないため、 以下の署名は検証できませんでした: NO_PUBKEY 6A030B21BA07F4FB

と出力されたため、apt-keyコマンドでパブリックキーを追加した(パブリックキーの有効期限切れだと思った…)

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A030B21BA07F4FB

-> apt-keyではproxyにうまく接続できない問題が発生…

-> --keyserver-optionを使用してproxyサーバを指定

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-option http-proxy=http://x:y@proxy:port --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.oqJcUg9wwq --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-option http-proxy=http://x:y@proxy:port --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
gpg: 鍵A88D21E9をhkpからサーバーkeyserver.ubuntu.comに要求
gpg: 鍵A88D21E9: 公開鍵“Docker Release Tool (releasedocker) <docker@dotcloud.com>”を読み込みました
gpg: 処理数の合計: 1
gpg:               読込み: 1  (RSA: 1)

3.2 インターネットに(ブラウザで)接続できない

proxyの設定とGPG鍵のインストールで$ sudo docker run hello-worldは実行できるようになったが、未だChromeやFireFoxが使えない(インターネットに接続できない)…

  1. docker ではUbuntuの以下4つのバージョンでしか正常に動作することが保証されてなかったため、Ubuntu21.04ではうまく行かなかった

    • Ubuntu Jammy 22.04 (LTS)
    • Ubuntu Impish 21.10
    • Ubuntu Focal 20.04 (LTS)
    • Ubuntu Bionic 18.04 (LTS)
  2. 22.04 に upgrade したら使えるように! → Ubuntu22.04 のproxy設定を手動にしたら使えるようになった!

参考

Dockerのインストール

proxy設定

問題

GPGエラーについて