Docker の 3 つの主要な概念: イメージ、コンテナ、ウェアハウスを理解しています。イメージはコンテナ操作の基礎です。一般的な開発プロセスは、基本イメージを取得することです。 Docker Hub から取得し、基本イメージに基づいて特定のカスタマイズされた開発 (アプリケーションをイメージに配置するなど) を実行し、新しいイメージを生成し、この新しいイメージに基づいてコンテナーを起動して、アプリケーションを実行します。
1. イメージを生成する 2 つの方法
Docker イメージを作成するには通常 2 つの方法があり、1 つは dockerfile 構成ファイルに基づき、docker build
を使用して実行されます。これは、最も推奨される本格的なイメージ作成方法です。2 つ目は、docker commit
のようなコマンドを使用して、変更されたコンテンツを含む新しいイメージを手動で生成する方法です。
1.1. commit を利用したイメージ生成
この方法は、イメージの構築内容を追跡できないこと、また、作業効率が悪く、大規模なイメージ生成には適していません。比較的低いですが、特定の一時的な状況、特に開発中やテスト中に、一時的に新しいソフトウェアをインストールする必要がある場合に、新しいイメージをすばやく生成できるので便利です。
ここでは、Golang に付属のイメージを生成する例を示し、コミットを使用してイメージを生成する方法を示します。
1.1.1. Centos ベース イメージをプルする
まず、Centos ベース イメージをプルする必要があり、Golang のインストールはこのベース イメージに基づいて行われます。
centos イメージの検索:
[root@node1 ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos DEPRECATED; The official build of CentOS. 7529 [OK] docker.io docker.io/kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 33 docker.io docker.io/couchbase/centos7-systemd centos7-systemd images with additional deb... 7 [OK]
STARS の数が最も大きい公式イメージを取得します
[root@node1 ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for docker.io/centos:latest
1.1.2、Centos コンテナを起動して Go
[root@node1 ~]# docker run -it centos /bin/bash [root@311c53f54f2f /]# [root@311c53f54f2f /]# go version bash: go: command not found# をインストールします##here これは、基本的な centos には golang が存在しないことを証明しています。 yum を使用して golang をインストールすると、次のエラー メッセージが見つかりました。
[root@311c53f54f2f /]# yum install go Failed to set locale, defaulting to C.UTF-8 CentOS Linux 8 - AppStream 71 B/s | 38 B 00:00 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlistこれは yum ソースの問題が原因であり、次のコマンドを実行することで解決できます:
[root@311c53f54f2f yum.repos.d]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* [root@311c53f54f2f yum.repos.d]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* [root@311c53f54f2f yum.repos.d]# yum clean all Failed to set locale, defaulting to C.UTF-8 0 files removed [root@311c53f54f2f yum.repos.d]# yum makecache Failed to set locale, defaulting to C.UTF-8 CentOS Linux 8 - AppStream 2.6 MB/s | 8.4 MB 00:03 CentOS Linux 8 - BaseOS 2.0 MB/s | 4.6 MB 00:02 CentOS Linux 8 - Extras 7.7 kB/s | 10 kB 00:01 Metadata cache created.Golang は正常にインストールされます
[root@311c53f54f2f yum.repos.d]# yum install go [root@311c53f54f2f yum.repos.d]# go version go version go1.16.12 linux/amd641.1.3. 新しいイメージの生成をコミットします最初に
docker ps を使用して現在のコンテナーのコンテナー ID を表示します。ここでは
311c53f54f2fです。
[root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 311c53f54f2f centos "/bin/bash" 13 minutes ago Up 13 minutes
docker commit コマンドを使用して新しいイメージを生成します。
[root@node1 ~]# docker commit -a "lucas" -m "install golang" 311c53f54f2f centos-go:v1 sha256:019ab02d451defb75e2ee03948289ed008036ba7ec8a355cae28bdf7fbce07d2
docker image を再度使用して、centos-go we の新しいイメージを確認します。生成されました。
[root@node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-go v1 019ab02d451d 2 minutes ago 805 MB docker.io/busybox latest bab98d58e29e 8 days ago 4.86 MB docker.io/nginx latest 904b8cb13b93 13 days ago 142 MB docker.io/centos latest 5d0da3dc9764 18 months ago 231 MB1.1.4. 新しいイメージを使用して Golang 環境を確認します
[root@node1 ~]# docker run -it centos-go:v1 /bin/bash
[root@daff0519f2ca /]# go version
go version go1.16.12 linux/amd64
1.2. Dockerfile を使用してイメージを生成しますDockerfile は Docker イメージの構築を含むテキスト ファイルですDocker イメージのビルド プロセスを自動化するための手順。 Dockerfile は、基本イメージ、依存関係のインストール、ファイルのコピー、環境変数の構成、起動コマンドなどの一連の命令を通じてイメージ構築プロセスを記述します。 Dockerfile の構文はシェル スクリプトに似た言語です。 Dockerfile には、イメージの基本情報、メンテナ情報、イメージ操作コマンド、コンテナ起動コマンドの 4 つの部分が含まれています。 Dockerfile では、# で始まるコメントを使用して、命令の機能を説明したり、その他のコメント情報を提供したりできます。 以下は一般的な Dockerfile コマンドの一部です:
- FROM: 基本イメージを指定します (例:
FROM ubuntu:latest
)。FROM ディレクティブは次のとおりです。コメントに加えてください 予期しない最初のコマンド、その後にメンテナ情報コマンドが続きます。
- MAINTAINER:
MAINTAINER lucas
などのメンテナの情報を指定します。
- RUN:
RUN apt-get update && apt-get install -y nginx
などのイメージ内のコマンドを実行します。
- CMD: CMD ["nginx", "-g", "daemon off;"] など、コンテナーの起動時に実行するコマンドを指定します。
- EXPOSE: コンテナがリッスンするポートを宣言します (
EXPOSE 80
など)。
- ENV:
ENV NODE_ENVproduction
などの環境変数を設定します。
- ADD: ファイルを画像にコピーします (例:
ADD app.js /app.js
)。
- COPY: ファイルを画像にコピーします (例:
COPY app.js /app.js
)。
- WORKDIR: 作業ディレクトリを設定します (例:
WORKDIR /app
)。
- USER:
USER nginx
など、コンテナの起動時に使用するユーザーを設定します。
- VOLUME:
VOLUME /data
のように、コンテナー データ ボリュームを宣言します。
- ENTRYPOINT: コンテナの起動時に実行するコマンドを指定します (例:
ENTRYPOINT ["nginx", "-g", "daemon off;"]
) 。
docker build を使用してイメージをビルドします。
docker build コマンドは、さまざまなパラメーターを指定してビルド プロセスをカスタマイズできます。たとえば、
--no-cache オプションを使用して、イメージのビルド時に Docker がキャッシュを使用しないように強制したり、
--build-arg オプションを使用してビルド中に必要な環境変数。
docker build --help コマンドを使用して、使用可能なすべてのオプションを表示できます。
2.1、准备springboot应用jar包
我们准备一个基于springboot开发的应用服务,这个服务开放8080端口,访问是返回一个用户的姓名信息。
为了方便,可以使用spring initializr 在线生成demo代码,在demo代码的基础上开发一个controller返回一个User对象的name信息,由于这块代码比较简单,这里就不详述过程了。
代码完成以后使用mvn clean package
进行打包,这里打包成功以后生成了demo-0.0.1-SNAPSHOT.jar,我们使用java -jar demo-0.0.1-SNAPSHOT.jar
就可以运行这个应用程序。
2.2、编写Dockerfile
在项目根目录下创建一个名为Dockerfile
的文件,并在其中添加以下内容:
FROM openjdk:18-jdk-alpine MAINTAINER lucas COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ WORKDIR /usr/app EXPOSE 8080 ENTRYPOINT ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]
在上面的Dockerfile中,FROM
指令指定了基础镜像为openjdk:18-jdk-alpine
,COPY
指令将构建好的可执行jar包复制到容器中,WORKDIR
指令设置工作目录为/usr/app
,EXPOSE
指令指定了容器运行的端口为8080
,ENTRYPOINT
指令指定了容器启动时要执行的命令为java -jar demo-0.0.1-SNAPSHOT.jar
。
在终端中进入项目根目录,然后执行以下命令构建镜像:
docker build -t demo:latest .
其中,-t
参数指定了镜像的名称和版本号,.
参数指定了Dockerfile所在的目录。
[root@node1 docker]# docker build -t demo:latest . Sending build context to Docker daemon 51.05 MB Step 1/6 : FROM openjdk:18-jdk-alpine ---> c89120dcca4c Step 2/6 : MAINTAINER lucas ---> Running in 3d0ae6d2a813 ---> 085b9066ca7b Removing intermediate container 3d0ae6d2a813 Step 3/6 : COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ ---> c5c77f80f179 Removing intermediate container 00228e4b0aed Step 4/6 : WORKDIR /usr/app ---> bdb555e3fb18 Removing intermediate container 35682266f140 Step 5/6 : EXPOSE 8080 ---> Running in 499d9888fa01 ---> 0fca023e8f23 Removing intermediate container 499d9888fa01 Step 6/6 : ENTRYPOINT java -jar demo-0.0.1-SNAPSHOT.jar ---> Running in 661fdaafa31d ---> 61e80950d665 Removing intermediate container 661fdaafa31d Successfully built 61e80950d665
可以看到构建成功,使用docker images
可以查看到构建成功的镜像。
三、运行容器服务,验证镜像的可用性
以上步骤已经使用docker build生成了镜像,接下来就可以使用这个镜像启动容器,启动后会自动启动应用程序。
在终端中执行以下命令启动容器:
docker run -d -p 8080:8080 demo:latest
其中,-d
参数指定了容器在后台运行,-p
参数指定了容器的端口映射,demo:latest
参数指定了要运行的镜像名称和版本号。
访问对应的web服务进行访问验证,结果如下:
以上がSpringboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
