docker を使用してシンプルな C/C++ プログラムをデプロイする方法

docker を使用してシンプルな C/C++ プログラムをデプロイする方法

1. まずhello-world.cppファイルを作成します

プログラムコードは次のとおりです。

#include <iostream>
名前空間 std を使用します。

intメイン(){
	cout << "hello-world" << endl;
	cout << "私の最初の docker" << endl;
	0を返します。
}

たとえば、ホームパスにDockerFile/hello-worldディレクトリを作成し、その中にhello-world.cppソース ファイルを作成しました。

ここに画像の説明を挿入

2. DockerFileファイルを書き込む

このファイルとソース ファイルは、上記のようにhello-dockerfileという名前のフォルダーにあります。
まずファイルの内容を示し、次にそれを一つずつ説明します。

codenvy/cpp_gcc より 

mkdir /home/user/myapp を実行します。

hello-world.cpp /home/user/myapp を追加します。

ワークディレクトリ /home/user/myapp

g++ hello-world.cpp -o helloを実行します

CMD ["./hello"]

Dockerfile のコマンドについては、私の別のブログでご覧いただけます: https://www.jb51.net/article/197996.htm

1. codenvy/cpp_gccから

FROM の後には、ターゲット イメージで使用されるベース イメージが続きます。ベース イメージは 1 つだけ指定できます。docker searchコマンドを使用して、 docker Hubで必要なベース イメージを見つけることができます。 C++ ファイルをコンパイルしたいので、g++ または gcc のイメージをベース イメージとして使用できます。以下のように、g++ のイメージを検索できます。

ここに画像の説明を挿入

たとえば、2番目の方法を使用し、次の図に示すように、 docker pullコマンドを使用してイメージをローカルにプルします。

ここに画像の説明を挿入

次の図に示すように、 docker imagesコマンドを入力して、すべてのローカル イメージを表示します。

ここに画像の説明を挿入

たとえば、ここには 2 つのイメージがあります。1 つは先ほどダウンロードしたcodenvy/cpp_gccで、もう 1 つはubuntuイメージです。

ここで、なぜ Ubuntu イメージを使用しないのかと疑問に思う人もいるかもしれません。私たちの印象では、Ubuntu には g++ および gcc コンパイラが付属しており、このイメージは比較的小さいです。ここで説明させてください。docker の ubuntu イメージは ubuntu カーネルに関連するものだけを保持するため、コア以外のものはすべて可能な限り削除されています。これは、通常インストールする ubuntu イメージが約 2 GB であるのに対し、docker の ubuntu イメージが 70 MB 強である理由も説明しています。この Ubuntu イメージには gcc コマンドや g++ コマンドはなく、sudo コマンドさえも含まれていないため、手動でダウンロードして設定する必要があります。

たとえば、ubuntu イメージを使用してコンテナを生成します。

ここに画像の説明を挿入

次に、g++ のバージョンを確認します。

ここに画像の説明を挿入

g++がインストールされていないことが判明

ここに画像の説明を挿入

sudo コマンドも同様です。
そのため、g++ を含むイメージをダウンロードするか、Ubuntu イメージに手動でインストールする必要がありますが、少し面倒です。

2. mkdir /home/user/myappを実行します。

コンテナを構築するときは、 RUNコマンドと、それに続く一般的な Linux コマンドが必要です。

このコマンドは、/home/user パスに新しい myapp フォルダーを作成します。

3. hello-world.cpp /home/user/myappを追加します。

ADDコマンドは、ホストマシンからイメージにファイルをコピーします。 COPYコマンドも使用できますが、 ADD はCOPYよりも強力です。 ADD には解凍機能があります。

このコマンドは、最初の手順で作成された hello-world.cpp ソース ファイルをイメージ内の /home/user/myapp パスにコピーします。

4. ワークディレクトリ /home/user/myapp

WORKDIRコマンドは、コンテナを作成するときにコンテナのデフォルトの作業ディレクトリを指定します。

このコマンドは、イメージ内の home/user/myapp パスをデフォルトの作業パスとして使用します。

5. g++ hello-world.cpp -o helloを実行します。

このコマンドはg++を使用してhello-world.cppソースファイルをコンパイルし、実行可能ファイルhelloをビルドします。

6. CMD ["./hello"]

CMD は、指定されたコンテナが作成された後に実行される最初のコマンドです。

このコマンドは、前の手順でビルドされた実行可能ファイルhelloを実行します。

3. イメージを作成する

コマンドを使用します:

hello-docker ファイルをビルドします。

./hello-dockerfileはDockerfileの場所です
my_hello_docker新しく作成されたイメージの名前です
v1.0は画像のタグです。例えば、これは最初のバージョンです

イメージを構築するプロセスを次の図に示します。

ここに画像の説明を挿入

ビルドが完了したら、ビルドが成功したかどうかを確認し、 docker imagesコマンドを使用して現在のローカル イメージをすべて表示します。

ここに画像の説明を挿入

ここで、もう 1 つのイメージmy_hello_dockerが表示されます。これは、先ほど作成したイメージであり、イメージが正常に構築されたことを示しています。

4. イメージを通してコンテナを実行する

次のコマンドでコンテナをインスタンス化します

docker 実行 my_hello_docker:v1.0

すると、次の出力が得られます。

ここに画像の説明を挿入

出力は私たちが作成した C++ ファイルと一致しており、Docker を使用して単純な C/C++ プログラムをデプロイし、目的を達成できたことを示しています。

これで、docker を使用して簡単な c/c++ プログラムをデプロイする方法についての記事は終了です。docker を使用して c/c++ プログラムをデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker を使用して Web プロジェクトをデプロイし、イメージ ファイルにパッケージ化する方法の詳細な説明
  • Docker で Tomcat および Java アプリケーションをデプロイする詳細な手順
  • Docker 上で Python アプリケーションをデプロイするためのチュートリアル
  • Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴
  • Docker に Python の Flask フレームワークをデプロイするチュートリアル
  • tomcatのDocker自動デプロイの詳しい説明
  • Go をセットアップして Docker でアプリケーションをデプロイする方法の詳細な説明
  • CentOS7 Docker Nginxの導入と運用を詳しく解説
  • OpenVSwitch を使用して複数のホストに Docker をデプロイするチュートリアル

<<:  MySQL 全体または単一のテーブルデータのエクスポート

>>:  Vueは小さなフォーム検証機能を実装します

推薦する

VMware 15.5 バージョンのインストール Windows_Server_2008_R2 システム チュートリアル図

1. VMware 15.5から新しい仮想マシンを作成する1. VMware を開き、ホームページで...

ウェブデザインのためのロイヤルブルーのカラーマッチング入門

古典的な色の組み合わせは力と権威を伝え、強いロイヤルブルーはあらゆる古典的な色の組み合わせの中心的な...

MySQL で GTID モードをオンラインで有効または無効にする

目次基本的な概要GTIDをオンラインで有効にする1. GTID検証ENFORCE_GTID_CONS...

Vueはスクロールロードテーブルを実装します

目次成果を達成する転がり荷重知識備蓄コンポーネントのパッケージ1. コンポーネントの命名2. 小道具...

LinuxデバッガGDBの基本的な使い方の詳細な説明

目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...

JavaScript キャンバスで 9 マスのグリッドカットの効果を実現

この記事では、9グリッドカット効果を実現するためのキャンバスの具体的なコードを紹介します。具体的な内...

入力ボックスのコンテンツプロンプトと非表示機能を実装する JavaScript

入力ボックスが小さい場合、内容を入力した後に、入力内容が拡大されたプロンプト ボックスを表示したいこ...

ウェブページのカスタム選択ボックス選択

選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...

CentOS 7 での Docker プロキシの設定 (Linux での Systemd サービスの環境変数設定)

Docker デーモンは、 HTTP_PROXY 、 HTTPS_PROXY 、およびNO_PRO...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

Linux サーバーのグラフィック カードのクラッシュの解決策

ログインインターフェースの解像度が特に大きい場合、グラフィカルインターフェース全体が特に大きくなり、...

mysql mycat ミドルウェアのインストールと使用

1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...

モバイルデバイス上の 1px 境界線を解決する最善の方法 (推奨)

モバイル デバイス向けに開発する場合、Retina 画面上で要素の境界線が太くなるという問題に遭遇す...