Dockerをクリーンアンインストールする方法の詳細な説明

Dockerをクリーンアンインストールする方法の詳細な説明

まず、サーバー環境情報:

アンインストールの理由:

しばらくするとホストマシンのディスクが100%になり、continartが異常終了しました。その後、いろいろ解決策を探したところ、dockerインストール時の設定ファイルに誤りがあることがわかりました(正常は|Storage Driver: overlay2のはずです)。

乾物について:

①アンインストール

yum 削除 docker \
         dockerクライアント\
         docker-client-最新 \
         docker-common \
         docker-最新 \
         docker-最新-logrotate \
         docker-logrotate \
         docker-selinux \
         docker-engine-selinux \
         dockerエンジン

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker

rm -rf /var/run/docker

②インストール

#!/bin/sh
セット-e

# このスクリプトは、以下を介して迅速かつ簡単にインストールすることを目的としています:
# $ curl -fsSL get.docker.com -o get-docker.sh
# $ sh get-docker.sh
#
# テストビルド(リリース候補)の場合:
# $ curl -fsSL test.docker.com -o test-docker.sh
# $ sh テストdocker.sh
#
# 注意: スクリプトの内容を必ず確認してください
# ダウンロードしたものはinstall.shの内容と一致します
# https://github.com/docker/docker-install にあります
# 実行する前に。
#
# https://github.com/docker/docker-install から Git コミット
# スクリプトがアップロードされました (アップロードジョブによってのみ変更される必要があります):
SCRIPT_COMMIT_SHA=36b78b2


# この値は自動的に変更されます:
# * 角
# * テスト
# * 実験的
DEFAULT_CHANNEL_VALUE="エッジ"
if [ -z "$CHANNEL" ]; then
  チャンネル=$DEFAULT_CHANNEL_VALUE
フィ

DEFAULT_DOWNLOAD_URL="https://download.docker.com"
if [ -z "$DOWNLOAD_URL" ]; then
  DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL
フィ

DEFAULT_REPO_FILE="docker-ce.repo"
[ -z "$REPO_FILE" ]の場合;
  REPO_FILE="$DEFAULT_REPO_FILE"
フィ

サポートマップ="
x86_64-centos-7
x86_64-フェドラ-26
x86_64-フェドラ-27
x86_64-フェドラ-28
x86_64-debian-ウィージー
x86_64-debian-jessie
x86_64-debian-ストレッチ
x86_64-debian-バスター
x86_64-ubuntu-トラスティ
x86_64-ubuntu-ゼニアル
x86_64-ubuntu-バイオニック
x86_64-ubuntu-アートフル
s390x-ubuntu-ゼニアル
s390x-ubuntu-バイオニック
s390x-ubuntu-アートフル
ppc64le-ubuntu-ゼニアル
ppc64le-ubuntu-バイオニック
ppc64le-ubuntu-アートフル
aarch64-ubuntu-ゼニアル
aarch64-ubuntu-バイオニック
aarch64-debian-jessie
aarch64-debian-ストレッチ
aarch64-debian-バスター
aarch64-フェドラ-26
aarch64-フェドラ-27
aarch64-フェドラ-28
aarch64-centos-7
armv6l-raspbian-jessie
armv7l-raspbian-jessie
armv6l-raspbian-ストレッチ
armv7l-raspbian-ストレッチ
armv7l-debian-jessie
armv7l-debian-ストレッチ
armv7l-debian-バスター
armv7l-ubuntu-トラスティ
armv7l-ubuntu-ゼニアル
armv7l-ubuntu-バイオニック
armv7l-ubuntu-アートフル
「

ミラー=''
DRY_RUN = ${DRY_RUN:-}
while [ $# -gt 0 ]; 実行する
  ケース「$1」
     - 鏡)
      ミラー="$2"
      シフト
      ;;
    --ドライラン)
      ドライラン=1
      ;;
    --*)
      echo "不正なオプション $1"
      ;;
  エサック
  シフト $(( $# > 0 ? 1 : 0 ))
終わり

ケース「$mirror」
  アリユン
    ダウンロードURL="https://mirrors.aliyun.com/docker-ce"
    ;;
  Azure中国クラウド)
    ダウンロードURL="https://mirror.azure.cn/docker-ce"
    ;;
エサック

コマンドが存在する() {
  コマンド -v "$@" > /dev/null 2>&1
}

is_dry_run() {
  [ -z "$DRY_RUN" ]の場合;
    戻り値 1
  それ以外
    0を返す
  フィ
}

非推奨通知() {
  ディストリビューション=$1
  日付=$2
  エコー
  echo "非推奨の警告:"
  echo "ディストリビューション $distro は、$date 以降このスクリプトではサポートされなくなります。"
  echo "これが間違いだと思われる場合は、https://github.com/docker/docker-install/issues/new で問題を提出してください"
  エコー
  睡眠10
}

get_distribution() {
  lsb_dist=""
  # 公式にサポートしているすべてのシステムには/etc/os-releaseがあります
  [ -r /etc/os-release ]の場合;
    lsb_dist="$(./etc/os-release && echo "$ID")"
  フィ
  # ここで空の文字列を返しても問題ないはずです。
  # case 文は実際の値を指定しない限り動作しません
  エコー "$lsb_dist"
}

debian_backport_repo() を追加します
  debian_version="$1"
  バックポート="deb http://ftp.debian.org/debian $debian_version-backports main"
  !grep -Fxq "$backports" /etc/apt/sources.list; の場合
    (set -x; $sh_c "echo \"$backports\" >> /etc/apt/sources.list")
  フィ
}

echo_docker_as_nonroot() {
  is_dry_runの場合
    戻る
  フィ
  コマンドが存在する場合 docker && [ -e /var/run/docker.sock ];
    (
      -x を設定する
      $ sh_c 'docker バージョン'
    ) || 本当
  フィ
  your_user=あなたのユーザー
  [ "$user" != 'root' ] && your_user="$user"
  # ここでは意図的にスペースとタブが混在しています -- タブは "<<-EOF" によって削除され、スペースは出力に保持されます
  echo "Docker を非ルートユーザーとして使用したい場合は、次の点を考慮する必要があります"
  echo "次のようにしてユーザーを \"docker\" グループに追加します:"
  エコー
  echo " sudo usermod -aG docker $your_user"
  エコー
  echo "これを有効にするには、ログアウトして再度ログインする必要があることに注意してください。"
  エコー
  echo "警告: ユーザーを \"docker\" グループに追加すると、実行権限が付与されます"
  echo " ルート権限を取得するために使用できるコンテナ"
  echo "dockerホスト"
  echo "https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface を参照してください"
  詳細については、echo " を参照してください。"

}

# これがフォークされたLinuxディストリビューションであるかどうかを確認する
チェックフォーク() {

  # lsb_release コマンドの存在を確認します。これは通常、フォークされたディストリビューションに存在します。
  command_exists lsb_release; の場合
    # `-u` オプションがサポートされているかどうかを確認します
    +e を設定
    lsb_release -a -u > /dev/null 2>&1
    lsb_release_exit_code=$?
    セット-e

    # コマンドが正常に終了したかどうかを確認します。これは、フォークされたディストリビューションであることを意味します
    [ "$lsb_release_exit_code" = "0" ]の場合;
      # 現在のディストリビューションに関する情報を印刷する
      猫 <<-EOF
      '$lsb_dist' バージョン '$dist_version' を使用しています。
      終了

      # アップストリームリリース情報を取得する
      lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[:space:]')
      dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[:space:]')

      # アップストリームディストリビューションに関する情報を印刷する
      猫 <<-EOF
      アップストリームリリースは '$lsb_dist' バージョン '$dist_version' です。
      終了
    それ以外
      [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ] の場合、
        [ "$lsb_dist" = "osmc" ]の場合;
          # OSMCはRaspbianを実行
          lsb_dist=ラズビアン
        それ以外
          # 私たちは Debian ですが、それを知りません!
          lsb_dist = デビアン
        フィ
        dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
        ケース「$dist_version」
          9)
            dist_version="ストレッチ"
          ;;
          8|「カリ・リナックス 2」
            ディストリビューションバージョン="jessie"
          ;;
          7)
            dist_version="喘鳴"
          ;;
        エサック
      フィ
    フィ
  フィ
}

セムバーパース() {
  メジャー="${1%%.*}"
  マイナー="${1#$メジャー。}"
  マイナー="${マイナー%%.*}"
  パッチ="${1#$メジャー.$マイナー.}"
  パッチ="${パッチ%%[-.]*}"
}

ee_notice() {
  エコー
  エコー
  echo "警告: $1は現在Docker EEでのみサポートされています"
  echo " Docker EE に関する情報については https://store.docker.com を確認してください"
  エコー
  エコー
}

インストール() {
  echo "# docker インストール スクリプトを実行しています。コミット: $SCRIPT_COMMIT_SHA"

  command_exists dockerの場合;
    docker_version="$(docker -v | cut -d ' ' -f3 | cut -d ',' -f1)"
    メジャー_W=1
    マイナー_W=10

    semverParse "$docker_version"

    警告する=0
    [ "$major" -lt "$MAJOR_W" ] の場合;
      警告する=1
    フィ

    [ "$major" -le "$MAJOR_W" ] && [ "$minor" -lt "$MINOR_W" ] の場合;
      警告する=1
    フィ

    猫 >&2 <<-'EOF'
      警告: このシステムには「docker」コマンドがすでに存在しているようです。

      すでにDockerがインストールされている場合、このスクリプトは問題を引き起こす可能性があります。
      なぜこの警告を表示し、キャンセルする機会を提供しているのか
      インストール。

      このスクリプトを使用して現在のDockerパッケージをインストールし、それを使用している場合
    終了

    [ $shouldWarn -eq 1 ]の場合;
      猫 >&2 <<-'EOF'
      Dockerを更新するには、アップグレードする前にイメージストアを移行することをお勧めします。
      v1.10+ にアップグレードします。

      この手順については、こちらをご覧ください:
      https://github.com/docker/docker/wiki/Engine-v1.10.0-コンテンツアドレス可能性移行
      終了
    それ以外
      猫 >&2 <<-'EOF'
      Docker を再度更新したら、このメッセージを無視しても問題ありません。
      終了
    フィ

    猫 >&2 <<-'EOF'

      このスクリプトを中止するには、Ctrl+C を押してください。
    終了
    ( -x を設定; スリープ 20 )
  フィ

  ユーザー="$(id -un 2>/dev/null || true)"

  sh_c='sh -c'
  [ "$user" != 'root' ] の場合;
    コマンドが存在する場合、sudo;
      sh_c='sudo -E sh -c'
    elif command_exists su; then
      sh_c='su -c'
    それ以外
      猫 >&2 <<-'EOF'
      エラー: このインストーラーには、root としてコマンドを実行する機能が必要です。
      これを実現するために使用できる「sudo」または「su」が見つかりません。
      終了
      出口1
    フィ
  フィ

  is_dry_runの場合
    sh_c="エコー"
  フィ

  # 非常に基本的なプラットフォーム検出を実行する
  lsb_dist = $( get_distribution )
  lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"

  ケース「$lsb_dist」

    ウブントゥ)
      command_exists lsb_release; の場合
        dist_version="$(lsb_release --codename | cut -f2)"
      フィ
      [ -z "$dist_version" ] && [ -r /etc/lsb-release ]の場合;
        dist_version="$(./etc/lsb-release && echo "$DISTRIB_CODENAME")"
      フィ
    ;;

    デビアン|ラズビアン)
      dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
      ケース「$dist_version」
        9)
          dist_version="ストレッチ"
        ;;
        8)
          ディストリビューションバージョン="jessie"
        ;;
        7)
          dist_version="喘鳴"
        ;;
      エサック
    ;;

    セントス)
      [ -z "$dist_version" ] && [ -r /etc/os-release ]; の場合
        dist_version="$(./etc/os-release && echo "$VERSION_ID")"
      フィ
    ;;

    rhel|ol|sles)
      ee_notice "$lsb_dist"
      出口1
      ;;

    *)
      command_exists lsb_release; の場合
        dist_version="$(lsb_release --release | cut -f2)"
      フィ
      [ -z "$dist_version" ] && [ -r /etc/os-release ]; の場合
        dist_version="$(./etc/os-release && echo "$VERSION_ID")"
      フィ
    ;;

  エサック

  # これがフォークされたLinuxディストリビューションであるかどうかを確認する
  チェックフォーク

  # この構成を実際にサポートしているかどうかを確認します
  if ! echo "$SUPPORT_MAP" | grep "$(uname -m)-$lsb_dist-$dist_version" >/dev/null; then
    猫 >&2 <<-'EOF'

    あなたのプラットフォームは簡単に検出できないか、このプラットフォームではサポートされていません
    インストーラー スクリプト。
    より詳細なインストール手順については、次の URL をご覧ください。

    https://docs.docker.com/engine/installation/

    終了
    出口1
  フィ

  # 各ディストリビューションに応じてセットアップを実行します
  ケース「$lsb_dist」
    Ubuntu | Debian | ラズパイ)
      前提条件="apt-transport-https ca-certificates curl"
      [ "$lsb_dist" = "debian" ]の場合;
        [ "$dist_version" = "wheezy" ] の場合;
          add_debian_backport_repo "$dist_version"
        フィ
        # libseccomp2 は aarch64 の debian jessie メイン リポジトリには存在しません
        [ "$(uname -m)" = "aarch64" ] && [ "$dist_version" = "jessie" ]; の場合
          add_debian_backport_repo "$dist_version"
        フィ
      フィ

      # TODO: 2018年8月31日ここから削除、
      [ "$lsb_dist" = "ubuntu" ] && [ "$dist_version" = "artful" ] の場合;
        deprecation_notice "$lsb_dist $dist_version" "2018 年 8 月 31 日"
      フィ
      # TODO: 2018年8月31日ここまで削除、

      ! コマンド -v gpg > /dev/null; の場合
        pre_reqs="$pre_reqs gnupg"
      フィ
      apt_repo="deb [arch=$(dpkg --print-architecture)] $DOWNLOAD_URL/linux/$lsb_dist $dist_version $CHANNEL"
      (
        if ! is_dry_run; then
          -x を設定する
        フィ
        $sh_c 'apt-get update -qq >/dev/null'
        $sh_c "apt-get install -y -qq $pre_reqs >/dev/null"
        $sh_c "curl -fsSL \"$DOWNLOAD_URL/linux/$lsb_dist/gpg\" | apt-key add -qq - >/dev/null"
        $sh_c "echo \"$apt_repo\" > /etc/apt/sources.list.d/docker.list"
        [ "$lsb_dist" = "debian" ] && [ "$dist_version" = "wheezy" ] の場合;
          $sh_c 'sed -i "/deb-src.*download\.docker/d" /etc/apt/sources.list.d/docker.list'
        フィ
        $sh_c 'apt-get update -qq >/dev/null'
      )
      パッケージバージョン=""
      if [ ! -z "$VERSION" ]; then
        is_dry_runの場合、
          echo "# 警告: DRY_RUN ではバージョン固定はサポートされていません"
        それ以外
          # 不完全なバージョンの IE (17.12) でも動作しますが、テスト チャネルの場合は実際には「最新」を取得できない可能性があります。
          pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/~ce~.*/g" | sed "s/-/.*/g").*-0~$lsb_dist"
          search_command="apt-cache madison 'docker-ce' | grep '$pkg_pattern' | head -1 | cut -d' ' -f 4"
          pkg_version="$($sh_c "$search_command")"
          echo "INFO: バージョン '$VERSION' のリポジトリを検索しています"
          echo "情報: $search_command"
          if [ -z "$pkg_version" ]; then
            エコー
            echo "エラー: '$VERSION' は apt-cache madison の結果の中に見つかりません"
            エコー
            出口1
          フィ
          pkg_version="=$pkg_version"
        フィ
      フィ
      (
        if ! is_dry_run; then
          -x を設定する
        フィ
        $sh_c "apt-get install -y -qq --no-install-recommends docker-ce$pkg_version >/dev/null"
      )
      echo_docker_as_nonroot
      終了 0
      ;;
    centos|fedora)
      yum_repo="$DOWNLOAD_URL/linux/$lsb_dist/$REPO_FILE"
      if ! curl -Ifs "$yum_repo" > /dev/null; then
        echo "エラー: リポジトリ ファイル $yum_repo を curl できません。有効ですか?"
        出口1
      フィ
      [ "$lsb_dist" = "fedora" ]の場合;
        [ "$dist_version" -lt "26" ]の場合;
          echo "エラー: Fedora >=26 のみがサポートされています"
          出口1
        フィ

        pkg_manager="dnf"
        config_manager="dnf config-manager"
        enable_channel_flag="--set-enabled"
        前提条件="dnf-plugins-core"
        pkg_suffix="fc$dist_version"
      それ以外
        パッケージマネージャ="yum"
        config_manager="yum-config-manager"
        enable_channel_flag="--enable"
        前提条件="yum-utils"
        pkg_suffix="el"
      フィ
      (
        if ! is_dry_run; then
          -x を設定する
        フィ
        $sh_c "$pkg_manager インストール -y -q $pre_reqs"
        $sh_c "$config_manager --add-repo $yum_repo"

        [ "$CHANNEL" != "stable" ] の場合;
          $sh_c "$config_manager $enable_channel_flag docker-ce-$CHANNEL"
        フィ
        $sh_c "$pkg_manager メイクキャッシュ"
      )
      パッケージバージョン=""
      if [ ! -z "$VERSION" ]; then
        is_dry_runの場合
          echo "# 警告: DRY_RUN ではバージョン固定はサポートされていません"
        それ以外
          pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/\\\\.ce.*/g" | sed "s/-/.*/g").*$pkg_suffix"
          search_command="$pkg_manager list --showduplicates 'docker-ce' | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'"
          pkg_version="$($sh_c "$search_command")"
          echo "INFO: バージョン '$VERSION' のリポジトリを検索しています"
          echo "情報: $search_command"
          if [ -z "$pkg_version" ]; then
            エコー
            echo "エラー: '$VERSION' が $pkg_manager リストの結果の中に見つかりません"
            エコー
            出口1
          フィ
          # エポックを削除し、先頭に「-」を付ける
          pkg_version="-$(echo "$pkg_version" | cut -d':' -f 2)"
        フィ
      フィ
      (
        if ! is_dry_run; then
          -x を設定する
        フィ
        $sh_c "$pkg_manager インストール -y -q docker-ce$pkg_version"
      )
      echo_docker_as_nonroot
      終了 0
      ;;
  エサック
  出口1
}

# 関数でラップされているので、
# 「curl | sh」中にファイルの半分
インストールする
chmod +x getdocker.sh 
./getdocker.sh -s docker --mirror Aliyun

getdocker.shファイルの内容は前のコード領域にあります

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker に共通コンポーネント (mysql、redis) をインストールする方法
  • Docker コンテナのネットワーク障害に対する 6 つの解決策
  • Docker Swarm を使用して分散クローラー クラスターを構築する例
  • Docker で複数の MySQL コンテナを作成して実行する方法の例
  • DockerプライベートイメージライブラリとAlibaba CloudオブジェクトストレージOSSの簡単な分析
  • Docker で MySQL クラスターを構築する方法の例
  • docker-compose ネットワーク設定についての簡単な説明
  • docker pullがリセットされる問題を解決する
  • docker イメージのプル速度が遅い問題の解決策
  • 実行後にdocker nginxにアクセスできない問題の解決策
  • Dockerを使用してphabricatorをインストールする方法

<<:  ReactRouterの実装

>>:  MySQL 5.7.17 圧縮バージョンのインストールノート

推薦する

Canonical が Flutter で Linux デスクトップ アプリを有効化 (推奨)

Google の Flutter の目標は、どのプラットフォームを使用していても、ネイティブの速度...

ページ内にマーキーとフラッシュが共存する場合の競合解決

競合の主な症状は、FLASH ボタンがジャンプし続け、不安定になり、Web ページの外観と通常のアク...

HTMLページ間で値を渡す問題の解決策

初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...

ウェブページに埋め込まれた Flash と IE、FF、Maxthon の互換性の問題

いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...

リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース

1. プロキシサーバーとは何ですか?プロキシ サーバーは、クライアントが要求を送信すると、それを直接...

iframe ページで js 関数を呼び出すには js を使用します

最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...

Dockerコンテナでルート権限を取得する方法

まず、コンテナが稼働している必要がありますコンテナのCONTAINER IDは、sudo docke...

nginx のロケーションと書き換えの使用法の詳細な説明

1. 位置情報の利用状況の概要ロケーションは、さまざまな処理方法に対してさまざまな種類のリクエストを...

Linux curl フォームのログインまたは送信と Cookie の使用に関する詳細な説明

序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...

CSS3 フィルターの違いと応用の詳しい説明:ドロップシャドウフィルターとボックスシャドウ

標準 CSS3 を使用して要素の影の効果を実現するには、2 つの手順があります。1 つ目は一般的なb...

Vueはページの部分的なリフレッシュを実装します(ルータビューのページリフレッシュ)

Vue でprovide+inject組み合わせを使用するまず、App.vue を変更する必要があ...

JSにおける4つのデータ型判定方法

目次1. 型2. インスタンス3. コンストラクター4.toString() この記事では、4 つの...

MySQLをシンプルに学ぶ

序文データベースは常に私の弱点でした。自分の経験 (python+sqlalchemy) を組み合わ...

WeChatアプレット開発の共通機能と使用方法のまとめ

ここでは、主に小さなプログラムの開発プロセスでよく使われる、非常に実用的な機能ポイントをいくつか整理...

Xtrabackup を使用して MySQL をバックアップおよび復元する方法

目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...