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 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

ジョセフリング問題を解決する 3 つの JavaScript メソッド

目次概要問題の説明循環リンクリスト順序付き配列数学的再帰要約する概要ジョセフ・リング問題は、ジョセフ...

Ubuntu の MySQL のパラメータ ファイル my.cnf の詳細な分析

序文MySQL に関する私の理解に基づくと、パフォーマンスの最適化作業やマスター スレーブ レプリケ...

2013年のウェブデザインUIの最もホットなトレンド最も人気のあるUIデザイン

時は経つのが早く、わずか 6 日後には 2013 年が歴史になります。今年は、いわゆるトレンドが多す...

21 の MySQL 標準化および最適化のベスト プラクティス!

序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

MySQL 8.0.11 MSI バージョンのインストールと構成のグラフィック チュートリアル

この記事では、MySQL 8.0.11 MSIバージョンのインストールと設定のチュートリアルを参考ま...

LeetCode の SQL 実装 (177. 給与が N 番目に高い)

[LeetCode] 177. 最も高い給与従業員テーブルからn番目に高い給与を取得する SQL ...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル

目次1. 元のドライバーをアンインストールする2. 新しいグラフィックカードドライバーをダウンロード...

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

HttpsページでBaiduシェアを使用するためのソリューション

サイト全体で https アクセスを有効にしてから、共有コードが利用できなくなり、有効になっていた小...

MySQL初心者のための基本操作のまとめ

図書館運営クエリ1.SHOW DATABASE; ----すべてのデータベースを照会する2. SHO...

シェルスクリプトを使用したMySQLデータベースの自動バックアップ

シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...