Docker の学習 (1) ダウンロード、インストールと基本的な共通コマンド

Docker クイック スタート ノート

1.Dockerの概要

1.1. Docker の基本的な概要

Docker は、Go 言語に基づくオープン ソースのアプリケーション コンテナ エンジンであり、Apache2.0 プロトコルに準拠したオープン ソースで、開発者がアプリケーションと依存関係パッケージをポータブル イメージにパッケージ化し、Linux または Windows オペレーティング システムに公開できるようにします。マシンの仮想化も実現できます。コンテナーは完全にサンドボックス メカニズムを使用しており、コンテナー間にはインターフェイスがありません。つまり、コンテナーは相互に分離されています。

公式Webサイトアドレス:https://www.docker.com/

ドキュメントのアドレス: https://docs.docker.com/

ミラーライブラリのアドレス: https://hub.docker.com/

完全な Docker は次の 4 つの部分で構成されます。

  • DockerClientクライアント

  • Docker デーモン デーモン

  • ドッカーイメージ

  • Dockerコンテナコンテナ

1.2. ドッカーの意味:

開発プロセスでは、プロジェクトの開発が依存する環境は完全に OK ですが、プロジェクトの jar パッケージまたは war パッケージを運用保守担当者に引き渡す際には、他のマシンの環境構成も OK であることが前提となります。プログラムを実行する前に、環境を個別に構成する必要がありますが、ワークロードは自明です。

従来のプロジェクト展開モード: インストール、構成、実行。

Docker のデプロイメント モード: コピー - 実行。

1. 配送の標準化

Docker のロゴと同じように、Docker はソフトウェア エンジニアリングの分野で「標準化された」配信コンポーネントであり、物品を輸送するためのコンテナのようなものです。ご存知のとおり、コンテナは、輸送が困難なさまざまなサイズの物品を梱包するための世界的な梱包規格であり、トラック、電車、貨物船などの輸送車両にもこの規格が採用されており、コンテナを中心とした標準化が可能となっています。この設計により、物流と輸送の効率が大幅に向上します。

従来のソフトウェア成果物には、アプリケーション、依存ソフトウェア インストール パッケージ、構成ドキュメント、インストール ドキュメント、オンライン ドキュメント、およびその他の非標準コンポーネントが含まれます。Docker の標準化された成果物は「イメージ」と呼ばれ、これにはアプリケーションとそれが依存する実行環境が含まれており、アプリケーション配信モデルが大幅に簡素化されます。

2. 一度構築すれば何度でも納品可能

Docker イメージは、「一度構築すれば、何度でも配信」できます。アプリケーションのマルチコピー デプロイメントやアプリケーションの移行に関しては、Docker の価値がよりよく反映されます。

一度構築すればどこでも実行可能、これは docker の概念でもあります。

3. アプリケーションの分離

輸送中、商品はコンテナを通して効果的に隔離されます。同じ Docker で、異なるアプリケーション間の対話を分離できます。

1.3. Docker と VMware の違い

仮想マシンテクノロジー:

  • 1 つのオペレーティング システム上に別のオペレーティング システムをインストールして実行します。
  • ハードウェアを仮想化し、完全なオペレーティング システムを実行してから、このシステムにソフトウェアをインストールして実行する必要がある
  • 多くのリソースを消費し、冗長で複雑な手順があり、起動が非常に遅くなります。

ドッカーコンテナ:

  • ソフトウェアの実行に必要なリソースは、分離されたコンテナにパッケージ化され、ホスト上で直接実行されます。コンテナ自体には独自のカーネルや仮想ハードウェアはありません。

  • Docker は、物理マシン上で多数のコンテナ インスタンスを実行できるカーネル レベルの仮想化であり、各コンテナは互いに分離され、独自のファイル システムを持ち、相互に影響を与えないため、サーバーのパフォーマンスが最大化されます。

1.4. Dockerの構成

ここに画像の説明を挿入します

  • 画像

    • イメージはテンプレートのようなもので、1 つのイメージで多数のコンテナ インスタンスを作成できます。

    • Java 言語のクラスとオブジェクトの概念と同様、クラスは複数のオブジェクトをインスタンス化できます。

  • 容器

    • 独立して実行されるアプリケーションまたはアプリケーションのグループは、イメージによってインスタンス化されます。

    • 開始、開始、停止、削除が可能です。各コンテナは互いに隔離されています

  • リポジトリ

    • 画像ファイルを一元的に保存する場所です。各ウェアハウスには複数の画像が含まれています。各画像には異なるタグ (「タグ」: バージョン番号に似ています) が付いています。
    • ウェアハウスの種類にはプライベート ウェアハウスとパブリック ウェアハウスがあり、Docker Hub: (https://hub.docker.com/) が最大のパブリック ウェアハウスです。

2.Dockerのインストール

初期の環境準備: Alibaba Cloud から 1 コア 2G サーバーを購入しました。具体的な操作と導入については、ブログ投稿を参照してください: https://blog.csdn.net/weixin_43155804/article/details/122813771

  • Linux システムのバージョンを確認するコマンド: uname -r
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
# 系统内核版本为3.10.0
  • システム構成の表示: cat /etc/os-release
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
  • ドッカーをインストールする

    • 古いバージョンがある場合はアンインストールします
    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • 必要なインストールパッケージをダウンロードする
    yum install -y yum-utils
    
    • ミラーリングされたウェアハウスをセットアップする
    # 设置国外的地址(下载速度太慢)
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo  
    
    # 设置阿里云的Docker镜像仓库(推荐使用,下载速度较快)
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    
    • yum パッケージのインデックスを更新する
    yum makecache fast
    
    • ドッカーをインストールする
    # docker-ce为社区版,docker-ee为企业版
    # 该命令默认为安装最新版本
    yum install docker-ce docker-ce-cli containerd.io
    # 如果想要安装指定版本:
    yum install docker-ce-<版本号> docker-ce-cli-<版本号>
    
    # 安装成功会出现 completed提示
    
    • ドッカーの起動
    systemctl start docker
    
    # 查看当前版本号,验证是否启动成功:
    docker version
    

ここに画像の説明を挿入します

  • テスト用の hello-world イメージをダウンロードする
docker run hello-world

ここに画像の説明を挿入します

  • ダウンロードした画像を表示する
docker images

ここに画像の説明を挿入します

  • ドッカーのアンインストール
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 删除资源  /var/lib/docker是docker的默认工作路径
rm -rf /var/lib/docker
  • ドッカーの再起動
systemctl restart docker

3. Alibaba Cloud イメージ アクセラレーションを構成する

  • Alibaba Cloud 公式 Web サイトにログインし、ミラー アクセラレーション サービスの列を見つけます: https://cr.console.aliyun.com/cn-beijing/instances/mirrors

ここに画像の説明を挿入します

  • コンソールで 4 つのコマンドを順番に実行して、構成を完了します。
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://h98xb7ko.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

4. docker run の実行プロセス:

4.1. Hello-world がプロセス全体を実行する

ここに画像の説明を挿入します

  • まず、このマシン上の hello-world イメージを検索します。
  • ローカルで hello-world イメージが見つかりません
  • リモートからダウンロード: ライブラリから取得…
  • ダウンロード完了: プル完了
  • 正常に実行されています: docker からこんにちは!

4.2. docker run の実行プロセス:

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ETbIgH8Z-1652287080144) (E:\02-studynotes\note photos\docker\ 1-docker の実行手順.png)]
ここに画像の説明を挿入します

4.3. 基礎となる原則

Dockerはクライアント・サーバー構造のシステムで、ホスト上でDockerデーモンが動作し、クライアントからSocket経由でアクセスされ、Dockerサーバー(サーバー)がDockerクライアント(クライアント)から指示を受け取ると、命令。Docker コンテナは相互に分離されており、相互に影響を与えません。

ここに画像の説明を挿入します

4.4、Docker VS VM ウェア

  • Docker の抽象化レイヤーは仮想マシンよりも少ない

  • Docker はホストのカーネルを使用し、VM にはゲスト OS が必要です。

ここに画像の説明を挿入します

Docker が新しいコンテナを作成するとき、仮想マシンのようにオペレーティング システム カーネルを再ロードする必要はありません。ホストのオペレーティング システムを直接使用します。仮想マシンはゲスト OS をロードする必要があります。仮想マシンのこの操作により、仮想マシンが起動されます。分のレベルスピード

5. dockerの共通コマンド

5.1 ヘルプコマンド

docker version		# 显示docker的版本信息
docker info			# 显示docker的信息 包括镜像和容器数量
docker --help		# 帮助命令

Docker のヘルプ ドキュメントから参照できます: https://docs.docker.com/reference/

5.2 一般的なミラーリングコマンド

  1. docker イメージローカル ホスト上のすべてのイメージを表示する
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB
centos        latest    5d0da3dc9764   5 months ago   231MB

# 字段解释:
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID 	镜像的ID
CREATED		镜像创建的时间
SIZE		镜像的大小
# 通过docker images --help 可以查看该命令的详细使用
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             # 显示所有镜像
  -f, --filter filter   # 通过条件进行过滤显示
  -q, --quiet           # 只显示镜像的ID

  1. docker 検索イメージ名検索イメージ
# docker search 镜像名
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   # 根据条件来筛选
  --filter=STARS=500   # 按照STARS来筛选,筛选出数量在500之上的,这里并不是找出STARS等于500的

ここに画像の説明を挿入します

ここに画像の説明を挿入します

  1. docker pull イメージ名ダウンロード イメージ
# docker pull 镜像名		--下载镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull mysql			# 下载mysql
Using default tag: latest									# 如果命令中不写tag值,默认下载最新版本latest
latest: Pulling from library/mysql							# docker images的核心:分层下载
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest								#真实地址

# 下载指定版本:(前提是 指定的版本必须先存在于docker中)
docker pull mysql:5.7
由于docker images有分层下载,上面已经下载过mysql的最新版本,此处下载5.7版本的时候,由于有和最新版本公用的地方,在这次下载中直接显示为Already exists。5.7所独有的东西会被下载。

ここに画像の説明を挿入します

  1. docker rmiイメージの削除
docker rmi		# rm 删除 i镜像(image)
docker rmi -f 条件	# 根据条件进行删除

ここに画像の説明を挿入します

# 批量删除
docker rmi -f 容器id				    # 删除指定id的镜像
docker rmi -f 容器id 容器id 容器id  	 # 删除多个镜像
docker rmi -f $(docker images -aq)   # 删除全部的镜像
# $(docker images -aq)表示显示所有的image的ID,并作为参数,传递给 -f

5.3 一般的なコンテナコマンド

注: コンテナーを作成できるのは、イメージを取得した後でのみです。学習するには、centos イメージをダウンロードしてください。

  1. セントスイメージをダウンロード
docker pull centos
  1. ミラーリングの開始/終了
# 启动:
docker run [可选参数] 镜像名字
#参数说明
--name="Name"		#容器名字 用来区分容器
-d					# 后台方式运行
-it					# 使用交互方式运行,进入容器查看内容
-p					# 指定容器的端口 -p8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口 (常用)
	-p 容器端口
		
# 启动并进入容器内部
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -it centos /bin/bash
[root@208950ad49e7 /]# ls 查看容器内的centos,基础版本很多命令都是不完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退回主机
[root@208950ad49e7 /]# exit 	退出镜像服务器
  1. 実行中のすべてのコンテナをリストする
#docker ps
docker ps   # 当前正在运行的容器
-a 			# 列出在当前正在运行的容器,+历史运行过的容器
-n=2		#显示最近创建的2个容器(最近的)
-q			#只显示容器的编号
  1. コンテナを終了する 2 つの方法
exit		# 容器停止并退出
ctrl+p+q	# 容器不停止,退出

ここに画像の説明を挿入します

  1. コンテナの削除
docker rm 容器id 					# 删除指定id的容器(正在运行的容器删除不了)
docker rm -f 					 # 可以强制性删除正在运行的容器
docker rm -f $(docker ps -aq)	 # 删除全部容器
docker ps -a -q|xrags docker rm		#先查询出所有的容器id,用管道符传递给|后面的语句,进行全部删除
  1. コンテナ操作の開始と停止
docker start 容器id		#启动容器
docker restart 容器id		# 重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

ここに画像の説明を挿入します

5.4 その他の一般的に使用されるコマンド:

  1. ログ表示コマンド
docker logs

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         #显示日志
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     # 显示时间戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

# docker logs 
-tf			#显示日志
--tail 10	#显示10条日志
  1. コンテナ内のプロセス情報を表示する
# docker top 容器id
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker top 6289e8425a39
UID	      PID        PPID       C        STIME       TTY         TIME            CMD
root      29143      29125      0        22:37       pts/0       00:00:00      /bin/bash

  1. 画像メタデータの表示
# docker inspect 容器id
  1. 現在実行しているコンテナに移動します

通常、コンテナはバックグラウンドで実行されるため、コンテナに入り、いくつかの構成を変更する必要があります。

# 方式1

docker exet -it 容器id 

ここに画像の説明を挿入します

# 方式2
docker attach 容器id

ここに画像の説明を挿入します

違い:

# docker exec	      进入容器后没开启一个新的终端,可以在里面操作,是常用的进入命令
# docker attach       进入容器正在执行我的终端,不会启动新的进程
  1. コンテナからホストにファイルをコピーする
# 命令
docker cp 容器id:容器内文件路径 目的路径

ここに画像の説明を挿入します

6. 練習

6.1 nginxのデプロイメント

  1. サーチミラー
# docker search nginx
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        16754     [OK]       
linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   165                  
bitnami/nginx                                     Bitnami nginx Docker Image                      125                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   48                   
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   18                   [OK]
rancher/nginx-ingress-controller                                                                  10               
  1. ダウンロードイメージをプルします
# docker pull nginx  下载最新版本
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
  1. ローカルにダウンロードされた画像をクエリする
# docker images
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   4 months ago   141MB
centos       latest    5d0da3dc9764   7 months ago   231MB
  1. 実行イメージ
# docker run -d --name 别名 -p 主机端口:容器端口 镜像名字
# -d 					  # 后台运行
# -- name       		  # 起名字
# -p 主机端口:容器端口		# 端口映射

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d --name nginx01 -p 3344:80 nginx
d1e7b7a311bb2f8cd2033b1329178882c453b1ab308afa577c50e21d99fce745


  1. ポートマッピング(露出)の概念

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-NDuPFkdt-1652287080146) (E:\02-Study Notes\Note Pictures\docker\) Docker の概念の紹介\8.3 ポート公開.png)]
ここに画像の説明を挿入します

  1. 走行イメージを見る
# docker ps 
# docker ps -a  # 所有运行的镜像,包括历史运行的

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
d1e7b7a311bb   nginx     "/docker-entrypoint.…"   18 seconds ago   Up 17 seconds   0.0.0.0:3344->80/tcp   nginx01
  1. ローカルで表示して実行する
# curl localhost:3344  可以通过本地查看运行状态、
# 通过公网查看: 虚拟机ip:映射端口
# 当访问出现错误时,需要登录阿里服务器控制台,添加334的安全组

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# 

Alibaba Cloud セキュリティ グループを構成し、パブリック ネットワーク経由でアクセスした結果:

ここに画像の説明を挿入します

アクセス パスは次のとおりです: http://サーバーの IP アドレス: 公開ポート、nginx に正常にアクセスできます。

  1. 設定ファイル
# 进入容器,进行自定义配置文件
# docker exec -it 给容器起的别名 /bin/bash 进入容器后台
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it nginx01 /bin/bash
# 查看 nginx 所在的目录
root@d1e7b7a311bb:/# whereis nginx 
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 进入nginx所在的目录
root@d1e7b7a311bb:/# cd /etc/nginx
# 查看目录中文件列表
root@d1e7b7a311bb:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params

この時点で、nginx のデプロイは完了です。

6.2 Tomcatのデプロイメント

  1. docker run コマンドを使用してダウンロードする

docker を実行すると、検索で検索せずに自動的にダウンロードしてからプルします。

  1. 公式使用:
docker run -it --rm tomcat:9.0
之前启动都是后台启动,停止之后,容器还是可以查到,--rm一般用来测试,用完就删除
使用docker ps -a查看记录 没有找到启动tomcat的记录

# 前期学习不建议这么做,还是老老实实的通过pull来进行下载吧
  1. Tomcat イメージをダウンロードして実行します
# 1、docker pull tomcat		# 下载tomcat镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
0e29546d541c: Already exists 
9b829c73b52b: Already exists 
cb5b7ae36172: Already exists 
6494e4811622: Already exists 
668f6fcc5fa5: Already exists 
dc120c3e0290: Already exists 
8f7c0eebb7b1: Already exists 
77b694f83996: Already exists 
0f611256ec3a: Already exists 
4f25def12f23: Already exists 
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

# 2、docker images   查看本地所有镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
nginx                 latest    605c77e624dd   4 months ago    141MB
tomcat                latest    fb5657adc892   4 months ago    680MB
hello-world           latest    feb5d9fea6a5   7 months ago    13.3kB
centos                latest    5d0da3dc9764   7 months ago    231MB

# 3、docker run -d -p 3355:8080 --name tomcat01 tomcat 运行
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
3e7fc95c278a15b8dbe8e0773089cbe6ede11da07ccb7b4d3718e73de7146a57


# 进入tomcat01中:
docker exec -it tomcat01 /bin/bash/
# 进入之后发现,在外部访问:http://39.107.241.179:3355,显示404错误,表示没有加载到资源
# 进入tomcat01中,发现webapps目录为空,webapps.dist文件夹中包括访问所需内容,
# 在tomcat01中,将webapps.dist中的内容拷贝到webapps中:
cp -r webapps.dist/* webapps

随后刷新之后,便可通过外部访问tomcat界面
  1. Alibaba Cloud はセキュリティ グループ 3355 を設定し、外部パブリック ネットワーク経由でそれにアクセスすると、404 エラーが見つかります。

ここに画像の説明を挿入します

tomact アイコンはすでにナビゲーション バーに表示されていますが、インターフェイスに 404 が表示されます。これは、tomcat がパブリック外部ネットワーク経由でアクセスできることを示していますが、リソースにはロードされていません。ミラー コンテナーに入って、tomcat 構成ファイルを表示します。 。

  1. コンテナの中に入ってみる
# docker exec -it tomcat01 /bin/bash
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it tomcat01 /bin/bash
root@3e7fc95c278a:/usr/local/tomcat# ls		#查看容器中的文件
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@3e7fc95c278a:/usr/local/tomcat# cd webapps			# 进入webapps目录,ls查看列表,发现目录中没有文件,是空的
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
root@3e7fc95c278a:/usr/local/tomcat/webapps# cd ..		# 返回上一级
root@3e7fc95c278a:/usr/local/tomcat# cd webapps.dist	# 查看webapps.dist发现该目录中存放着tomcat的相关文件
root@3e7fc95c278a:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager

コンテナーに入ると、コンテナー内のファイルが少ないことがわかりましたが、これは Alibaba Cloud Image が最小の動作環境を確保するためにデフォルトで最小のイメージをダウンロードするためです。

webapps.dist ディレクトリ内のファイルを webapps ディレクトリにコピーします

# 将webapps.dist目录下的所有内容,拷贝到webapps中
root@3e7fc95c278a:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@3e7fc95c278a:/usr/local/tomcat# cd webapps
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@3e7fc95c278a:/usr/local/tomcat/webapps# 

パブリック ネットワークのアクセス パスを更新すると、正常にアクセスできることが表示されます。

ここに画像の説明を挿入します

  1. カール経由の内部アクセス:
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3355
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.0.14</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
                <span id="nav-examples"><a href="/examples/">Examples</a></span>
                <span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
                <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
                <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
                <br class="separator" />
            </div>
            <div id="asf-box">
                <h1>Apache Tomcat/10.0.14</h1>
            </div> 
            <p class="copyright">Copyright &copy;1999-2022 Apache Software Foundation.  All Rights Reserved</p>
        </div>
    </body>
</html>

この時点で、Tomcat のデプロイは完了です。

6.3. ElasticSearch のデプロイメント

  1. 実行コマンドをインストールする
docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. メモリ使用量が非常に多いため、ページ構成を変更してください。

ES が占有するメモリは非常に多く、学習に使用するサーバーが 1 コア 2G のため、起動後の ES のメモリ使用量が多すぎて仮想マシンがフリーズすることがありますが、これを停止しても問題ありません。

Docker の実行時に、**-e ES_JAVA_OPTS="-Xms64m -Xmx512m"** を追加して、IDEA 構成ファイルでの変更と同様に、ページ構成パラメーターを変更します。

Xms: 最小占有面積は 64 平方メートル、Xmx 最大占有面積は 512 平方メートル

docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. リソースの使用状況を確認する
docker stats

6.4. 問題について考える

  • nginxの設定を行う場合、nginxの設定ファイルを変更するたびに仮想マシン経由でコンテナに入って操作する必要があり、非常に面倒であることは間違いありません。
  • 同様に、Tomcat をデプロイするときは、webapps.dist ディレクトリに移動してコンテンツを webapps にコピーする必要がありますが、これも毎回コンテナに入るのが面倒です。
  • 上記の 2 つの問題については、直接アクセスできるマッピング パスをコンテナの外部に提供できれば良いと思いませんか?

この問題は、後でDocker コンテナのデータ ボリュームテクノロジを学習することでうまく解決されます。

これでクイック スタートの章は終了です。もっと考えて、もっと練習して、基本的なコマンドをマスターしましょう

おすすめ

転載: blog.csdn.net/weixin_43155804/article/details/124722625