Docker #14:オリジナルのDockerイメージを作成する

オリジナルのDockerファイルを作成したい
例) 設定変更したhttpd.confをapacheコンテナに組み込みたい

1) httpd.confファイルの準備
組み込みたいhttpd.confをWindowsの任意場所に置く (C:\Users\user\httpd)
このファイルは Listen を "80" から "8080" へ変更している

2) Dockerfileの準備
Windowsの任意場所にDockerfileを新規作成する
今回は C:\Users\user\docker\Dockerfile として作成した
このファイルに記述するのは以下2つ
・ベースとなるコンテナイメージの指定
・準備したhttpd.confをコンテナにコピー

今回の場合、
・ベースとなるコンテナイメージは "httpd:latest"
・httpd.confは "C:/Users/user/docker/httpd/httpd.conf" から コンテナの "/usr/local/apache2/conf/httpd.conf" へコピー
となるので Dockerファイルは以下の記述となる
FROM httpd:latest
COPY C:/Users/user/httpd/httpd.conf /usr/local/apache2/conf/httpd.conf

ファイル形式はUTF-8とした

3) コンテナイメージの作成
"docker build"コマンドでコンテナイメージを作成する

書式:"docker build -t イメージ名 Dockerfileの場所"
今回は
・イメージ名 "test"
・Dockerfileの場所 "c:\Users/user/docker/"
なので、
"docker build -t test c:/Users/user/docker/"
を実行

結果はエラー
$ docker build -t test c:/Users/user/docker/
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM httpd:latest
    ---> 9d2a0c6e5b57
Step 2/2 : COPY C:/Users/user/httpd/httpd.conf /usr/local/apache2/conf/httpd.conf
COPY failed: stat /mnt/sda1/var/lib/docker/tmp/docker-builder457226936/C:/Users/user/httpd/httpd.conf: no such file or directory


DockerfileのCOPYコマンドで失敗している

コピー元のパス指定はできないらしい?
参考) https://ja.stackoverflow.com/questions/57100/windows-for-docker-で-docker-fileのcopyできない

ということでDockerfileを修正(コピー元のパスを削除)
FROM httpd:latest
COPY httpd.conf /usr/local/apache2/conf/httpd.conf


httpd.confのパスに移動してからdocker buildを行う
"cd /d c:/Users/user/httpd"
"docker build -t test c:/Users/user/docker/"

結果は、同じエラーが発生

Dockerfileをshift-jisへ変更 → 同じエラー

以下記事を見つけた
https://www.it-swarm-ja.tech/ja/python/copyのdockerイメージを作成できませんでした:stat-var-lib-docker-tmp-dockerbuilderエラー/835682796/

コピーするファイルはDockerfileと同じディレクトリに置く必要あり?
C:\Users\user\docker\Dockerfile を C:\Users\user\httpd へ移動

Dockerファイルをカレントディレクトリに移動したので docker build コマンドを以下のように変更
"docker build -t test ."

SECURITY WARNINGが出ているが成功
$ docker build -t test .
Sending build context to Docker daemon  23.55kB
Step 1/2 : FROM httpd:latest
    ---> 9d2a0c6e5b57
Step 2/2 : COPY httpd.conf /usr/local/apache2/conf/httpd.conf
    ---> 6c570362bd2f
Successfully built 6c570362bd2f
Successfully tagged test:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.


警告の意味:
セキュリティ警告:Windows以外のDockerホストに対してWindowsからDockerイメージを構築しています。 ビルドコンテキストに追加されたすべてのファイルとディレクトリには、「-rwxr-xr-x」権限が付与されます。 機密性の高いファイルとディレクトリの権限を再確認してリセットすることをお勧めします。

docker imagesコマンドでtestが作成されたことを確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              6c570362bd2f        48 seconds ago      166MB
httpd               latest              9d2a0c6e5b57        3 days ago          166MB
centos              latest              831691599b88        5 weeks ago         215MB


作成したdockerイメージ(ポート8080へ変更したもの)を起動
"docker run -it --pm -p 8080:8080 test"

ブラウザで http://192.168.99.102:8080 へアクセス

"It works!"と表示されればOK



学習メモ, Docker

0 件のコメント:

その他の記事