Dockerで新しいイメージを手動で構築する方法

Dockerで新しいイメージを手動で構築する方法

この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は次のとおりです。

既存のローカルイメージを表示します。

[root@docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
nginx 最新 c59f17fe53b0 4日前 108MB
ubuntu 最新 747cb2d60bbe 3 週間前 122MB
centos 最新 196e0ce0c9fb 6 週間前 197MB

ベースイメージcentosを使用して、それに基づいて手動でWebサービスを構築します。ここではnginxを使用します。

コンテナを起動して入ります:

[root@docker ~]# docker run -it --name=web centos /bin/bash
[ルート@bab3b6991467 /]#

次に、コンテナに nginx サービスをインストールします。

[root@bab3b6991467 /]# cd /usr/local/src/
[root@bab3b6991467 src]# yum install wget vim

ここではコンパイルを使用して nginx をインストールするため、nginx ソース パッケージをダウンロードしてコンパイル環境をインストールします。

[root@bab3b6991467 src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz

コンパイル環境:

[root@bab3b6991467 src]# yum install gcc gcc-c++ glibc make autoconf openssl openssl-devel

nginx のいくつかの依存パッケージをインストールします。

[root@bab3b6991467 src]# yum install libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel

次にインストールを実行します。

[root@bab3b6991467 src]# ll
合計960
-rw-r--r--。1 ルート ルート 981687 10月17日 13:20 nginx-1.12.2.tar.gz
[root@bab3b6991467 src]# tar xf nginx-1.12.2.tar.gz 
[root@bab3b6991467 src]# cd nginx-1.12.2
[root@bab3b6991467 nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module

必要なユーザーを作成します。

ユーザー追加 -M -s /sbin/nologin nginx

コンパイルを続行します:

作成 && インストール
chown -R nginx:nginx /usr/local/nginx/

ここで、nginx コマンドのパラメータを導入する必要があります。

[root@bab3b6991467 ~]# /usr/local/nginx/sbin/nginx -h 
  -g ディレクティブ: 設定ファイルからグローバルディレクティブを設定する

-g: nginx設定ファイルの指示を設定します

コンテナを終了してホストマシンに戻ります

[root@bab3b6991467 ~]# 終了
出口

この時点でのコンテナのステータスを確認します。

[root@docker ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
bab3b6991467 centos "/bin/bash" 37 分前 終了 (0) 21 秒前 web

docker diff を使用して、コンテナにどのような変更が加えられたかを確認します。出力が多すぎるため、ここには表示されません。

docker commit を使用して、Web コンテナーにレイヤーを新しいイメージに追加します。

[root@docker ~]# docker commit --help
  使用方法: docker commit [オプション] コンテナ [リポジトリ[:タグ]]
  コンテナの変更から新しいイメージを作成する

  -m, --message 文字列 コミットメッセージ
  -a, --author 文字列 著者 (例: "John Hannibal Smith <[email protected]>")

コミットを開始します:

[root@docker ~]# docker commit -m "centos で nginx をコンパイル" web wadeson/centos_nginx:v1
sha256:210a202d37b8d2c31155c29adf0c7c0b49cfab7ff38234109919de7f4e76d1de

ローカルイメージを表示:

[root@docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
wadeson/centos_nginx v1 210a202d37b8 33秒前 464MB
nginx 最新 c59f17fe53b0 4日前 108MB
ubuntu 最新 747cb2d60bbe 3 週間前 122MB
centos 最新 196e0ce0c9fb 6 週間前 197MB 

docker によってコミットされた新しいイメージを確認できます。次に、このイメージからコンテナを起動して、nginx サービスを提供します。

[root@docker ~]# docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"
c12669357e2b09a05a396ac480a04dd1956303b784f894b615d4edb889a737ab

次にコンテナを確認します。

[root@docker ~]# docker ps -l
コンテナID イメージ コマンド 作成ステータス ポート名
c12669357e2b wadeson/centos_nginx:v1 "/usr/local/nginx/..." 41 秒前 40 秒前に起動 0.0.0.0:80->80/tcp thirsty_murdock

nginx サービスが開始されていることがわかるので、アクセスします。

手動ビルド全体が成功しました

上記のコマンドについての説明は次のとおりです。

docker run -d -p80:80 wadeson/centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "デーモンをオフにします。"

後で実行されるコマンドはすべてコンテナを対象としています。環境変数が設定されていないため、フルパスが使用されます。nginx -g パラメータは、外部から nginx 構成ファイルに指示を追加できることを意味します。デーモンオフは、nginx サービスがバックエンドではなくフォアグラウンドで実行されることを意味します (コンテナ内のサービスはフォアグラウンドで実行する必要があります)

コンテナの実行中のプロセスを表示するには、docker top を使用します。

[root@docker ~]# docker top c12669357e2b
UID PID PPID C STIME TTY 時間 コマンド
root 35468 35451 0 02:55 ? 00:00:00 nginx: マスター プロセス /usr/local/nginx/sbin/nginx -g デーモン オフ;
1000 35489 35468 0 02:55 ? 00:00:00 nginx: ワーカープロセス

docker exec を使用してコンテナに入ります。

[root@docker ~]# docker exec -it c12669357e2b /bin/bash
[root@c12669357e2b /]# ps -ef
UID PID PPID C STIME TTY 時間 コマンド
root 1 0 0 06:55 ? 00:00:00 nginx: マスター プロセス /usr/local/nginx/sbin/nginx -g デーモン オフ;
nginx 5 1 0 06:55 ? 00:00:00 nginx: ワーカープロセス
ルート 6 0 1 07:01 pts/0 00:00:00 /bin/bash
ルート 20 6 0 07:01 pts/0 00:00:00 ps -ef

ctrl+p+q を使用すると、コンテナはすぐに終了するのではなく、バックグラウンドに配置されます。

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

以下もご興味があるかもしれません:
  • Dockerfileイメージ構築ファイルとDockerの関連コマンドの詳細な紹介
  • Jenkins が Docker イメージをビルドする例
  • Docker ベースイメージをゼロから構築する方法
  • Dockerを使用して複数のステップでdubbo-adminイメージを構築する方法
  • Docker マルチステージイメージ構築の実装
  • Dockerfileを使用してイメージを構築する方法
  • Dockerイメージを構築する2つの方法の分析
  • Docker で既存のイメージに基づいて新しいイメージを構築する方法
  • Dockerfile を使用して Docker でイメージを構築する方法

<<:  MySQL で乱数を生成し、文字列を連結する方法の例

>>:  jQueryをベースにカルーセル効果を実現する

推薦する

Mysql sql スロークエリ監視スクリプトコード例

1. my.cnfを変更する #全体的な効果としては、グローバルがオンになっている場合はテーブルとロ...

複数のパッケージソースから同時にパッケージをロードするようにnpmを設定する方法

目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...

単一マシン上での Tomcat の複数インスタンスの実装

1. はじめにまず、1 台のマシンで複数のインスタンスを使用する理由という質問に答える必要があります...

VMware12 で Ubuntu19.04 デスクトップ版をインストールする (インストール チュートリアル)

1. 実験の説明仮想マシンに、 Ubuntu 19.04オペレーティングシステムを手動でインストー...

JavaScript ツールチェーンの不完全なガイド

目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...

HTMLにビデオを挿入してすべてのブラウザと互換性を持たせる方法

HTML にビデオを挿入するために最もよく使用される方法は 2 つあります。1 つは古い <o...

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

MySQL実行計画の詳細な分析

序文前回の面接では、実行計画について質問されたとき、多くの人がそれが何なのか知りませんでした。実行計...

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

Vue で lodop 印刷コントロールを使用してブラウザ互換の印刷を実現する方法

序文このコントロールを直接印刷すると下部に透かしが入りますが、公式 Web サイトから購入することで...

優れたウェブフロントエンドデザインの指標

Web ページのアクセシビリティは、フロントエンドでのみ評価および実装できるもののようです。ユーザビ...

フレックスインサイドボタンの垂直方向の中央揃えが中央揃えにならない問題の解決方法

問題の説明ボタンのスタイルはアイコン + テキストです。フレックス レイアウトを使用して垂直方向に中...

HTML テーブルタグチュートリアル (23): 行の境界線の色属性 BORDERCOLORDARK

行ごとに、暗い境界線の色を個別に定義できます。基本的な構文<TR 境界線の色を暗くする=col...