Ubuntu 18.04で静的実行可能ファイルを使用してDocker CEおよびその後の設定をインストールする

13949 ワード

Ubuntu 18.04で静的実行可能ファイルを使用してDocker CEおよびその後の設定をインストールする
先日、最新のUbuntu 18.04 LTSをインストールし、上にdockerをインストールしようとしたところ、docker公式のソフトウェアソースにUbuntu 18.04のインストールパッケージバージョンがないことがわかりました.システムが新すぎて、公式はまだ作成できていないかもしれません.以前はUbuntu 17.04でもそうでしたが、前回は17.04で公式のソフトウェアソースに16.04の.debインストールパッケージをダウンロードしてローカルに直接インストールしたので、正常に動作しました.しかし、この方法は少し頼りにならないと思います.もし異なるバージョンのインストールパッケージが少し互換性がなければどうしますか.そこで今回は、静的実行可能ファイルのインストールを公式に提供することを選びました.ここに記録しておきます.省の次回のインストール時に公式サイトに行ってドキュメントを見ますが、なぜかdockerドキュメントのページはいつも壁になっています.また、公式のソフトウェアソースもアクセスが遅く、国内のミラーソースを探さなければなりません.ここでメモを取って、次のインストール時間を節約します.
政府がターゲット環境にインストールパッケージを提供していない場合は、このインストール方法を使用します.
このインストール方法が面倒であることを嫌う場合は、公式にUbuntu 17.10に提供されている.debパッケージのインストールを直接ダウンロードします.理論的に17.10に提供される.debパケットも18.04に適用される.しかし、本人は完全にテストしていません.17.10で16.04の.debインストールパッケージを使っただけです.
$ wget http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/artful/pool/stable/amd64/docker-ce_18.03.1~ce-0~ubuntu_amd64.deb
$ sudo dpkg -i docker-ce_18.03.1~ce-0~ubuntu_amd64.deb

これにより、システムのsystemdツールを自動的にdockerバックグラウンドプロセスを管理し、設定上の面倒を省くことができます.
静的バイナリ・ファイル・アーカイブの取得
公式ソースからダウンロード
$ wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz

https://download.docker.com/linux/static ディレクトリの下には、stable、edge、testの3つのブランチバージョン、および異なるハードウェアプラットフォームのバージョンなど、異なるバージョンがあります.
or国内ミラーソースからダウンロード
しかし、私はこのダウンロードプロセスが特に遅いことに気づいたので、アリのミラーソースを使うのがもっと速いです.
$ wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-18.03.1-ce.tgz

バイナリファイルの抽出
$ tar xzvf docker-18.03.1-ce.tgz

このステップでは、Dockerを使用するために必要な各実行可能ファイルを含むdockerディレクトリが抽出されます.
$ ls docker
docker  docker-containerd  docker-containerd-ctr  docker-containerd-shim  dockerd  docker-init  docker-proxy  docker-runc

copyバイナリファイルを対応するディレクトリに
$ sudo cp docker/* /usr/bin/

今は中のシステムでDockerを使うことができます.
dockerdの起動
$ sudo dockerd &

出力情報がたくさん見えます.
Dockerバージョンの表示
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.37/version: dial unix /var/run/docker.sock: connect: permission denied

バージョンは現在最新の18.03.1-ceと表示されますが、clientのバージョン情報のみが出力され、server側の情報はpermission deniedエラーが1つしかありません.これはsudo権限が使用されていないためです.もう一度sudoで実行します.
$ sudo docker version
sudo docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

hello-worldコンテナを実行する
~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete 
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

このコマンドは、公式の倉庫からhello-worldミラーを引き出し、コンテナを作成して実行します.うまくいけば、以上の出力が見えます.しかし筆者は,ここではネットワーク上の理由で,ミラーを引く際にタイムアウトし,その後,国内のミラーソースを交換することに成功した.
起動の設定
公式の提供で特定のシステムに作成したインストールパッケージを使用してDockerをインストールすると、インストール中に自動的に起動が設定されます.私たちは自分で静的な実行可能ファイルを使用するので、毎回自分でsudo dockerd &を実行してdockerdプロセスを起動しなければなりません.便宜上、私たちは自分で起動を設定します.DockerはUbuntu 16.04以降でUbuntuシステムのsystemd初期化システムを利用してdockerdプロセスを管理していますので、こちらも真似してみましょう.私はsystemdに詳しくないが、ただひょうたんに絵を描いているだけだ.
次の手順を行う前に、前に起動したdockerdプロセスを停止します.
システムユニットファイルの作成
docker.serviceファイルを新規作成し、内容を入力します.
[Unit]
Description=docker static

[Service]
ExecStart=/usr/bin/dockerd

[Install]
WantedBy=multi-user.target

そのcopyを/lib/systemd/system/ディレクトリの下に移動します.
$ sudo cp docker.service /lib/systemd/system/

システムユニットプロファイルの再ロード
$ sudo systemctl daemon-reload 

システムdを使用してdockerサービスを起動する
$ sudo systemctl start docker

検証#ケンショウ#docker verisonおよびdocker infoを使用して、dockerサービスが正常に起動したかどうかを確認します.
~$ sudo docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

問題ないように見えます.
起動を許可
$ sudo systemctl enable docker.service 
[sudo] chao    : 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.

これでシステムdが起動すると自動的にdockerdが起動します.筆者はシステムを再起動してdockerdが本当に起動したことを発見した.
docker cli権限の問題の解決
前にdockerコマンドを使用する場合、dockerdプロセスの起動はUnix socketにバインドされます.デフォルトでは、このUnix socketはrootユーザーに所有され、他のユーザーはsudoでアクセスできます.dockerdはrootユーザで実行されるため、dockerdはUnix socketにバインドできます.しかし、一般ユーザがdocker cli、すなわちdockerコマンドを使用してdockerサービスを使用する場合にも使用するUnix socketは、dockerコマンドがUnix socketにアクセスし、このUnix socketを介してユーザのコマンドをdockerdプロセスに送信する必要がある.したがって,一般ユーザはdockerコマンドを実行する際にsudo方式を通過する必要がある.
dockerコマンドを実行するたびにsudoを追加しないようにするには、dockerユーザーグループを作成し、dockerを使用する一般ユーザーをグループに追加します.dockerdプロセスが開始されると、Unix socketの読み書き権限がdockerユーザーグループに付与されます.これでsudoを使う必要はありません.
dockerユーザーグループの作成
$ sudo groupadd docker

現在のユーザーをdockerユーザーグループに追加
$ sudo usermod -aG docker $USER

現在のユーザーのログアウトまたはシステムの再起動
次に、現在のユーザーをログアウトして再ログインし、前の設定を有効にします.仮想マシン環境の場合は、仮想マシンシステムを再起動する必要があります.
テスト
システムに再ログインし、dockerコマンドを実行してテストします.
$ docker run hello-world

docker hub国内ミラーの使用
Dockerはデフォルトで公式のhub.docker.comからミラーを引き出しますが、ネットワークのせいで国内でミラーを引き出すのは遅く、タイムアウトして失敗することもあります.国内のミラーステーションがおすすめです.国内にはいくつかのミラーステーションがありますが、ustcが提供するミラーステーションだけが登録する必要はないようです.他のミラーステーションはユーザーにアカウントを登録して、ユーザーに唯一の加速アドレスを割り当てるように要求しています.個人的には面倒だと思いますが、ustcのほうが良心的です./etc/docker/daemon.jsonファイル(なしで新規作成)に次の内容を追加します.
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

そしてミラーを引くのがとても速いです.