Docker - Docker の詳しい説明と使い方

Dockerについて話す前に、従来のサーバーについて話しましょう

従来の独立型サーバーは、独立したハードウェア デバイスであり、コンピュータ ルームに配置された高度な構成のコンピューターとして理解できます。独立したプロセッサ、メモリ、ハード ディスク、帯域幅などのリソース、およびさまざまなオペレーティング システムを備え、さまざまな環境を構成します。

このサーバーの欠点:

1. 高コスト(時間コスト、資本コスト)

2. アプリケーションの移行が面倒 サーバーの再購入、OSのインストール、動作環境の設定、アプリケーションの導入が必要

したがって、仮想化技術が登場しました。これは主に次のように分類されます。

ハードウェアの仮想化 (ハードウェア レベルの仮想化)

オペレーティング システムの仮想化 (os-level-virtualization)

ハードウェア仮想化は、ハードウェア上で動作する仮想化技術です. 技術の中核はハイパーバイザーです. ハイパーバイザーは、基本的な物理サーバー上で動作するソフトウェア層であり、CPU、ハードディスク、メモリなどのハードウェアリソースを仮想化できます.仮想化されたリソースにインストールされるオペレーティング システムは、VMWare、VirtualBox などのいわゆる仮想マシンです。

オペレーティング システムの仮想化は、オペレーティング システム上で実行される仮想化テクノロジです。オペレーティング システム上で実行される複数の異なるプロセスをシミュレートし、コンテナー化テクノロジとも呼ばれるクローズド コンテナーにカプセル化します。Docker など

VM: ハイパーバイザーは、仮想マシンに実行中のプラットフォームを提供し、各 VM でオペレーティング システムの動作を管理するために使用されます。各 VM には、独自のオペレーティング システム、アプリケーション、および必要な依存ファイルなどが必要です。

Docker コンテナー: スケジューリングと分離に Docker エンジンを使用します。これにより、リソースの使用率が向上し、同じハードウェア機能でより多くのコンテナー インスタンスを実行できるようになります。各コンテナーには、独自の分離されたユーザー スペースがあります。

VM と比較して、Docker コンテナーは、軽量の仮想化方法として、アプリケーションに関して次のような大きな利点があります。

1. Docker コンテナーは、数秒以内にすばやく開始および停止できます。これは、従来の仮想マシンと比較して大幅に改善されています。

2. Docker コンテナはシステム リソースの要件が低く、何千もの Docker コンテナを同じホストで同時に実行できます。Docker コンテナーは、ユーザーが Git と同様の操作でアプリケーション イメージを取得および更新するのを容易にします。

3. Dockerコンテナは、Dockerfile設定ファイルによる自動作成と柔軟なデプロイを実現し、作業効率を向上

4. Docker コンテナーでアプリケーションを実行することに加えて、基本的に追加のシステム リソースを消費しないため、システムのオーバーヘッドを最小限に抑えながらアプリケーションのパフォーマンスを確保できます。

次の図は、Docker コンテナーと従来の VM 方式の違いを直感的に理解できます。

1. Docker の紹介

Docker は、  Apache2.0 プロトコルに準拠したGo 言語とオープン ソースに基づくオープン ソース アプリケーション コンテナー エンジンです。 

Docker を使用すると、開発者はアプリケーションと依存関係を軽量でポータブルなコンテナーにパッケージ化できます。このコンテナーは、一般的な Linux マシンに配布したり、仮想化したりすることもできます。

Docker はバージョン 17.03 から CE (Community Edition: Community Edition) と EE (Enterprise Edition: Enterprise Edition) に分かれており、Community Edition を使用しています。

Docker は、軽量のオペレーティング システム仮想化ソリューションです。Docker は、ソフトウェアと長期環境の標準化されたパッケージである Linux コンテナー (LXC) テクノロジに基づいています。アプリケーションは互いに分離され、OS を共有します。

Docker は CentOS6 以降のバージョンをサポートしています

Docker公式サイト: https://www.docker.com

Github Docker ソース コード: https://github.com/docker/docker-ce

DockerHub ミラー ウェアハウス: https://hub.docker.com/

2. Docker のインストールと起動

1.Docker のインストール

次のコマンドを使用して、docker がインストールされているかどうかを確認します

yum list installed | grep docker 

簡単なインストール コマンド (インストールされている Docker のバージョンは古い1.13.xです)

//-y 参数表示直接确认,不然会跳出一个确认框,输入Y/N
yum install docker -y

指定したバージョンの Docker を次のようにインストールできます。 

//更新docker的yum源
yum install wget -y

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

//安装指定版本的docker:
yum install docker-ce-20.10.0 -y

インストールとアンインストールについては、公式 Web サイトの最新のドキュメントを参照してください。

CentOS に Docker エンジンをインストールする | Docker ドキュメント

Docker リリース ノート

Docker エンジンのリリース ノート | Docker ドキュメント

インストール後、次の3つを使用できます

//注意:这里两个 横线 ‘--’
docker --version

docker version

docker -v

2.アンインストール

ビュー インストール docker コマンドに従って、docker インストール ファイルを表示し、それを削除することができます。

最初にドッカーの実行ステータスを確認します

systemctl status docker 

実行中の場合は無効にします

systemctl stop docker

yum によってインストールされた docker ファイル パッケージを表示する

 yum list installed |grep docker

 docker 関連の rpm ソース ファイルを表示する

rpm -qa |grep docker

次のように、インストールされているすべての docker パッケージを順番に削除します。

yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64
yum -y remove docker-ce-rootless-extras.x86_64
yum -y remove docker-scan-plugin.x86_64

削除後、docker rpm ソースを再度確認できます。

デフォルトで /var/lib/docker ディレクトリにある docker イメージ ファイルを削除し、pwd を使用して表示します

 

上記の docker ディレクトリを削除します

rm -rf /var/lib/docker

 3. docker サービス情報

Docker システム情報を表示する

docker info

ヘルプ情報を表示する

docker 

 共通のコマンド ヘルプ情報を表示する

docker commond --help

4. docker サービスの開始と停止

起動

systemctl start docker 或者
service docker start

 ストップ

systemctl stop docker 或者
service docker stop

リブート

systemctl restart docker 或者
service docker restart

 Docker の実行ステータスを表示する

systemctl status docker 或者
service docker status

Docker プロセスを表示

ps -ef | grep docker

5. Docker の動作メカニズム

1. docker サービスを開始する

2. イメージを見つける. コンテナを実行する前に, Docker はまずローカルに対応するイメージがあるかどうかをチェックします. ローカルに対応するイメージがない場合, Docker はイメージ ウェアハウスからイメージをダウンロードします.

(1) docker hub公式サイトから使用するイメージを検索

Docker ミラー ウェアハウス https://registry.hub.docker.com/

通常、公式イメージのロゴが付いた公式イメージをダウンロードします

 (2) コマンドラインを直接使用して、次のような検索コマンドを使用します。

docker search tomcat

STARS: 星の数

OFFICIAL:公式かどうか 

ダウンロードミラー

// 下面两种方式一样的,默认下载最新版  :latest 即为最新版本
docker pull tomcat
docker pull tomcat:latest

//也可下载其他版本,如
docker pull tomcat:9.0

3. イメージを実行し、イメージを開始して、対応するコンテナーを取得します。

// -d 表示后台运行
docker run -d tomcat:9.0
docker run -d docker.io/tomcat
docker run -d 镜像ID

Tomcat イメージがコンテナーを正常に起動するかどうかを確認します 

ps -ef | grep tomcat

ローカル ミラーを表示

docker images

リポジトリ: docker.io/tomcat などのウェアハウス

タグリスト: 最新などミラータグ

画像 ID: 画像 ID

CREATED: 作成時間

サイズ: サイズ

6. クライアントがコンテナにアクセスする

クライアントからコンテナーにアクセスするには、ポート マッピングが必要です。Docker コンテナーは、デフォルトでこの Ayong ブリッジ モードでホストと通信し、-p パラメーターを使用して、ホストの IP ポートをコンテナーの IP ポートにマップする必要があります。

//映射8080 也可以,博主使用的 9090
docker run -d -p 9090:8080 tomcat:9.0
或者
docker run -d -p 9090:8080 镜像ID

7. Docker コンテナに入る

docker exec -it 镜像ID /bin/bash

コンテナを終了します: exit

3. Docker コア コンポーネント

Docker はクライアント サーバー (C/S) アーキテクチャ モードを使用し、リモート API 管理を使用して Docker コンテナーを作成します。

Docker コンテナーは、Docker イメージを介して作成されます

イメージとコンテナーの関係は、オブジェクト指向プログラミングにおけるクラスとオブジェクトの関係に似ています。

ドッカー オブジェクト指向
鏡像 親切
容器 物体

Docker には 3 つのコア要素が含まれています

鏡(映像)コンテナ(コンテナ)倉庫(保管庫)

1.鏡像

Docker イメージは、Docker コンテナーの作成に使用される読み取り専用のテンプレートです。オペレーティングシステムのインストールディスクに少し似ています

Docker イメージは、特別なファイル システムと見なすことができます. コンテナーの実行に必要なプログラム、ライブラリ、リソース、構成、およびその他のファイルを提供することに加えて、実行のために準備されたいくつかの構成パラメーター (匿名ボリューム、環境変数など) 、ユーザーなど)。イメージには動的データは含まれず、作成後に内容が変更されることはありません。

ミラー イメージはファイル システムの多くのレイヤーで構成され、一番下はブート ファイル システム bootfs、2 番目のレイヤーはルート ファイル システム rootfs です。ルート ファイル システムは通常、centos、Ubuntu などのオペレーティング システムです。ルート ファイル システムの最上位にあり、Docker イメージを形成するために積み重ねられたファイル システムの多くのレイヤーがあります。

 ミラーリング コマンドの概要

1. 画像をダウンロードする

// 下面两种方式一样的,默认下载最新版  :latest 即为最新版本
docker pull tomcat
docker pull tomcat:latest

//也可下载其他版本,如
docker pull tomcat:9.0

2.ダウンロードした画像を見る

 latest はイメージ タグで、最新のイメージ バージョンを示します。

docker images
或者
docker images tomcat

ミラー取得方法

(1) 公式 docker ウェアハウスの検索とダウンロード

(2) Dockerfileによるビルド

 公式イメージがない場合は、Dockerfile ファイルを介してビルドされます

3. イメージを実行してコンテナーを取得する

クライアントからコンテナーにアクセスするには、ポート マッピングが必要です。Docker コンテナーは、デフォルトでこの Ayong ブリッジ モードでホストと通信し、-p パラメーターを使用して、ホストの IP ポートをコンテナーの IP ポートにマップする必要があります。

//映射8080 也可以,博主使用的 9090
docker run -d -p 9090:8080 tomcat:9.0
或者
docker run -d -p 9090:8080 镜像ID

Tomcat プロセスを表示 

ps -ef | grep tomcat

4. コンテナ イメージのステータスを表示する

//查看运行中容器
docker ps

//查看所有容器
docker ps -a

CONTAINER ID: 各コンテナの一意の識別子で、自動的に生成されます。データベースの主キーに似ている

IMAGE : コンテナーの作成に使用されるイメージの名前

COMMAND: コンテナ実行時のコマンド

CREATED: コンテナが作成されたとき

        STATUS: コンテナの実行ステータス Up 8 months は、コンテナ         が8 か月間実行さ         れていることを         意味
        し         ます停止 )         -dead (死) PORTS: コンテナーによって開かれたポート情報。NAME: コンテナーのエイリアス。コンテナーを実行して docker run を実行するときに --name で指定できます。







5.コンテナに入る

docker exec -it 镜像ID /bin/bash

コンテナを終了します: exit

6. 鏡像を削除する

docker rmi 镜像ID
或者
docker rmi tomcat:9.0

2.コンテナ

コンテナーは、イメージのランタイム インスタンスです。仮想マシン テンプレートから VM を起動するのと同じように、ユーザーは 1 つのイメージから 1 つ以上のコンテナーを起動することもできます。

各コンテナーは、プラットフォームのセキュリティを確保するために互いに分離されています. コンテナーは、Linux システムの単純なバージョンと見なすことができます.

Docker はコンテナーを使用してアプリケーションを実行します。イメージは読み取り専用で、コンテナーは起動時に最上位レイヤーとして書き込み可能なレイヤーを作成します。

1.コンテナを起動するには2つの方法があります

(1) 起動するイメージを元にコンテナを新規作成

docker run -d tomcat

(2) 終了状態のコンテナを再起動する

docker start 容器id 或 容器名
或者
docker restart 容器id 或 容器名
//查看运行中容器
docker ps

//查看所有容器
docker ps -a

2.コンテナを停止する

docker stop 容器ID 或 容器名

 3.コンテナを削除する

ノート:

コンテナを削除するときは、コンテナが停止状態である必要があります。そうでない場合、エラーが報告されます

docker stop 容器ID 或 容器名

docker rm 容器ID 或 容器名

4.コンテナに入る

docker exec -it 容器ID 或 容器名 /bin/bash

5. コンテナーに関する詳細情報を表示する

docker inspect 容器ID 或 容器名

 6. 実行中のすべてのコンテナを停止します

docker stop $(docker ps -q) 

7. すべてのコンテナーを削除します。

docker rm $(docker ps -aq)

8. コンテナーを非アクティブ化して削除するための 1 つのコマンド

docker stop $(docker ps -q) & docker rm-f $(docker ps -aq)

3. リポジトリ

リポジトリとは、イメージを集中的に保管する場所です. ここで区別する概念があります. つまり、ウェアハウスとウェアハウス サーバー (レジストリ) は別物です. ​​前述の Docker Hub と同様に、Docker が公式に提供するウェアハウス サーバーです. 、しかし実際には、これら2つの概念をあまり区別する必要がない場合があります

Docker Hub はDocker によって確立された公式の中央イメージ ウェアハウスであり、Docker Engine のデフォルトのイメージ ウェアハウスでもあります. したがって、Docker Hub を使用することは、開発者がイメージを共有するための最初の選択肢です. 共通サービス ソフトウェアのイメージは Docker で見つけることができます.ハブ

倉庫は公営倉庫と私設倉庫に分けられます.公営倉庫は一般的にDocker Hubを指します.

Dockers Hub で使用する必要があるイメージを検索できます

 中国で一般的に使用されているミラー ウェアハウスは、Alibaba Cloud Container Mirror Warehouse です。

https://dev.aliyun.com/

4. Docker のインストール MySQL の例

(1) MySQLイメージをダウンロードする

docker pull mysql:latest

(2) MySQL イメージを実行してコンテナーを取得し、ポートをマップします。

docker run -d -p 3306:3306 -e MYSQL_DATABASE=mydb -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

-p 3306:3306  : コンテナー サービスのポート 3306 をホストのポート 3306 にマップし、外部ホストはホスト ip:3306 を介して MySQL サービスに直接アクセスできます。

MYSQL_DATABASE=mydb : MySQL サービスで使用されるデータベース名を設定します

MYSQL_ROOT_PASSWORD=123456 : MySQL サービスの root ユーザーのパスワードを設定します

docker run の後、 --restart always などのコマンドに従うこともできます

1. --restart=always: Docker の再起動時に、コンテナを自動的に起動できます

docker run --restart 特定のパラメーター値の詳細

no - コンテナの終了時にコンテナを再起動しません。

on-failure - ゼロ以外のステータスで終了した場合にのみコンテナを再起動します。

        –restart=on-failure:10 : 最大 10 回の再起動を示します

always - 終了ステータスに関係なくコンテナを再起動します。
 

2. --privileged=true: ホスト ディレクトリをマウントし、権限の問題を報告しません 

docker の実行時に --restart=always が追加されておらず、docker コンテナーが既に実行されている場合は、次のコマンドを実行します。 

# demo : 你的容器名称
docker update –-restart=always demo

(3)容器に入れる

docker exec -it 容器ID或者mysql名 /bin/bash

(4) MySQLにログイン

mysql -u root -p

パスワードを変更する

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'

リモート ユーザー ログイン アクセスを追加する権限

CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';

5. Docker インストール SQL Server の例

Docker Hub で「Microsoft SQL Server」を検索します

https://registry.hub.docker.com/_/microsoft-mssql-server

(1) SQL Server イメージをダウンロードする

docker pull mcr.microsoft.com/mssql/server:2019-latest

  

(2) SQL Server イメージを実行してコンテナーを取得し、ポートをマップします。

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

4. Docker カスタム イメージ

Dockerfile は Docker イメージを構築するために使用されるテキスト ファイルであり、Dockerfile は行ごとのコマンド ステートメントで構成されます

1. Dockerfile の基本構造

画像の基本情報

メンテナ情報

ミラー操作命令

コンテナの起動時に命令を実行する

2. Dockerfile 命令

(1)から

FROM ディレクティブは、ビルドするイメージのベース イメージを指定するために使用されます。通常、Dockerfile の最初の命令です。

形式は次のとおりです: FROM <画像> または FROM <画像>:<タグ>

(2)メンテナー

指定整備士情報

形式は次のとおりです。MAINTAINER <name>

(3)ENV 

環境変数を指定する

ENV <キー> <値>

(4) 追加またはコピー

ファイルまたはディレクトリをコンテナ内の指定されたパスにコピーします

ADD <src> <dest>

COPY <src> <dest>

ADD コマンドは COPY に似ています (同じ要件の下では、公式の推奨事項は COPY を使用することです)。

ADDのメリット: <ソースファイル>がtar圧縮ファイルで、圧縮形式がgzip、bzip2、xzの場合、<ターゲットパス>に自動でコピー・解凍されます

ADD の欠点: tar アーカイブは解凍せずにコピーすることはできません。イメージ ビルド キャッシュが無効になり、イメージ ビルドが遅くなる可能性があります。自動解凍の要否で使用可否を判断可能

(5)さらす

Dockerサーバーコンテナが公開しているポート番号を記述し、コンテナ起動時に-pでポートをマッピングする

デフォルトのプロトコルは tcpです。udpプロトコル の場合は 、 後で udp を追加する必要があります ( 80/udp など)。 

EXPOSE <ポート> [<ポート>/<プロトコル>...]

EXPOSE 8080 は、コンテナーが実行時にポート 8080 を提供し、コンテナーの起動時にポート マッピングが必要であることを示します。

(6)走る

現在のイメージに基づいてコマンドを実行し、通常はソフトウェアの更新またはインストールに使用される新しいイメージ レイヤーを作成します。

RUN <コマンド>

(7)CMD

コンテナーの起動時に実行するコマンドを指定します. 各 Dockerfile には 1 つの CMD コマンドのみを含めることができます. 複数のコマンドを指定すると、最後のコマンドのみが実行されます.

コンテナ起動時にrunコマンドを指定すると、CMDで指定したコマンドが上書きされる

次の Dockerfile の例

Dockefile文件样例:
FROM XXX/jdk:8
MAINTAINER docker_user
ENV JAVA_ HОМE /usr/local/java
ADD apache -tomcat-8.0.32. tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
ÉXPOSE 8080
RÚN chmod u+x /usr/local/tomcat8/bin/* .sh
CMD /usr/ local/tomcat8/bin/catalina.sh start

1.JDK イメージをカスタマイズする

FROM centos:latest
MAINTAINER admin
ADD jdk-8u121-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ËNV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version

ビルドイメージ

現在のディレクトリの Dockerfile を使用してイメージを作成し、ラベルを設定します

"." は現在のディレクトリを表します

-t パラメータはラベルを設定します

docker build -t admin_jdk1.8.0_121 .

 2. Tomcat イメージをカスタマイズする

FROM admin_jdk1.8.0_121
MAÌNTAINER admin
ADD apache-tomcat-8.5.24.tar.gz /usr/local/
ENV CATALINA_ HОME/usr/local/apache-tomcat-8.5.24
ENV PATH $PATH:$CATALINA_ HOME/Iib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run

3. カスタム MySQL イメージ

FROM centos:centos8
MAINTAINER admin
RUN yum install mysql-server mysqI -y
RUN /etc/init.d/mysqld start &&\
    mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH
GRANT OPTION ;" &&\
    mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456'WITH GRANT OPTION ;" &&\
    mysql -uroot -p123456 -e "show databases;"
EXPOSE 3306
CMD /ûsr/bin/mysqld_safe

3. イメージを Alibaba Cloud イメージ ウェアハウスに公開する

Alibaba Cloud ミラー ウェアハウス

https://dev.aliyun.com/

Aliyun アカウントに登録してログインします; Taobao および Alipay アカウントは、コンソールまたは管理センターにログインして、[コンテナ ミラーリング サービス] を直接検索し、[強みリスト] を選択して、[ミラー ウェアハウス] を作成できます。 [名前空間] を作成する

 (1) Alibaba Cloud Docker Registry にログインする

docker login [email protected] registry.cn-hangzhou.aliyuncs.com

ログインするユーザー名はAliyunアカウント、パスワードはサービス起動時に設定したパスワード

(2) イメージをレジストリにプッシュする

docker tag [lmageld] registry.cn-hangzhou.aliyuncs.com/123test/1234test:[镜像版本号心]
docker push registry.cn-hangzhou.aliyuncs.com/123test/1234test:[镜像版本号]

実際のイメージ情報に従って、例の [lmageld] および [イメージ バージョン番号] パラメータを置き換えます。

ミラーアクセラレータ

/etc/docker/daemon.json

五、Docker展開アプリ

1.SpringBoot プロジェクトをデプロイする

(1) springboot プログラムを jar または war にパッケージ化する

(2) jar または war パッケージを /root/docker などの Linux ディレクトリにアップロードします。 

(3) Dockerfile ファイルの定義とプロジェクトイメージの作成

2. jar パッケージの Dockerfile を定義する

FROM admin_jdk1.8.0_121
MAINTAINER admin
ADD springboot-web-1.0.0.jar /opt
RUN chmod +X /opt/springboot-web-1.0.0.jar
CMD java -jar /opt/springboot-web-1.0.0.jar

3. jar パッケージ プログラム イメージをビルドする

构建镜像: docker build -t springboot-web-jar .
运行容器: docker run -d 镜像ID

コンテナを実行した後、操作ログを表示できます

docker logs -f --tail=100 容器名称

4. jar パッケージ プログラムはコンテナ環境に依存します。

运行Redis容器: docker run -p 6379:6379 -d redis
运行MySQL 容器: docker run -p 3306:3306 -e MYSQL_DATABASE=mydb -e
MYSQL_ ROOT_ _PASSWORD=123456 -d mysql:latest

MySQL コンテナが起動すると、リモート IP + ポートとユーザー パスワードを使用してデータベースにアクセスできますが、この時点で MySQL コンテナを閉じると、データが失われます。

したがって、コンテナを変更した後、保存する必要があります

docker commit 容器id xxx(镜像名:tagxxx)

如:
docker commit 容器ID admin_mysql_new

データベースでコミットされたトランザクションとして理解できます。コミットされていないトランザクションにより、データが正常に保存されません。 

おすすめ

転載: blog.csdn.net/MinggeQingchun/article/details/123411872