ドッカー005建物ミラー
私たちは、彼らのイメージを作成、変更および更新することができます。2つの方法で建設ドッキングウィンドウの画像:
- 使用
docker commit
- 使用
docker build
推奨:コマンドファイルとDockerfileを
ドッキングウィンドウステーションアカウントを作成します。
オープン:ミラーを構築する過程では、非常に重要なステップは、あなたがここでは例としてドッカハブを作成するために、独自のイメージを構築したり、ドッキングウィンドウハブ専用のレジストリにプッシュすることができます共有し、ミラーを公開することで、HTTPS://hub.dockerを。 COM /サインアップ自分のアカウントを作成します。
# 下面的命令会登录 docker hub,并将认证信息保存起来,以供后用
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: resn001
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# 退出登录
$ docker logout
Removing login credentials for https://index.docker.io/v1/
ドッキングウィンドウは、commitコマンドを使用してミラーを作成します。
ここで前に新しいコンテナベースのUbuntuのミラーを作成し、nginxのをインストールするには、
$ docker run --name ubuntu_c01 -it ubuntu /bin/bash\
#以下命令在容器中执行
$ apt-get update
$ apt-get install nginx
$ exit
私たちは、あなたは、このように新しいコンテナを作成し、アップnginxのインストールするたびに避け、コンテナの現在の状態を保存する必要があり、Webサーバとしてこのコンテナが実行することを願っています。終了後の容器の後、我々は変更する必要があります
# 创建镜像我们需要用到 docker commit 命令,其格式如下:
# docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
# 提交镜像到本地
$ docker commit ubuntu_c01 resn001/ubuntu_c01
sha256:ed048991810e6e3684e8ef106c4be9e8631a8c960b4cf29c406a6d11fb5f6c79
# docker commit 可使用的参数
# -a, --author string 指定作者信息
# -c, --change list 将Dockerfile指令应用于创建的映像
# -m, --message string 提交的描述信息
# -p, --pause 提交期间暂停容器,默认开启
# 查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
resn001/ubuntu_c01 latest ed048991810e 11 minutes ago 152MB
# 查看创建的镜像的详细信息
$ docker inspect resn001/ubuntu_c01
# 使用新容器运行一个容器
$ docker run -it resn001/ubuntu_c01 /bin/bash
Dockerfileを構築するためにミラーを使用します
Dockerfileは、ミラーを構築することをお勧めします。基本的なコマンド構文ベースのDSLを使用してDockefileは、ミラーを構築しました。さらに前記ミラーはDockerfileの再現性、透明性及び冪等を使用して構築しました。
dockerfile書かれた後は、ドッキングウィンドウのビルドコマンドを使用して新しいイメージを構築することができます。
# 示例
$ mkdir static_web
$ cd static_web
$ touch Dockerfile
$ vim Dockerfile
# Version 0.0.1
#
FROM ubuntu:18.04
MAINTAINER resn "[email protected]"
RUN apt-get update && apt-get install -y nginx
# 下面的指令选择一个,只新建 html 文件的指令, 执行后文的命令时可能会有错误
# RUN echo "daemon off;" >> /etc/nginx/nginx.conf && echo 'Hello world,I am a container' >/usr/share/nginx/html/index.html
RUN echo 'Hello world,I\'m a container' >/usr/share/nginx/html/index.html
EXPOSE 80
Dockerfileは命令と一連のパラメータで構成され、各命令は大文字でなければならず、パラメータをバック維持します。
命令は、上から下への順序で実行されるので、コマンドの配置が合理的です。
次のように各コマンドを提出する新しいイメージ層とミラーリングプロセスを作成し、プロセス内の命令のドッカーDockerfileの実行は次のとおりです。
- 容器ベースイメージからドッカーラン
- 変更を行うための容器上に命令を実行
- 新しいイメージレイヤを提出コミットドッキングウィンドウの操作と同様に
- ドッカーが新しいコンテナベースだけ提出ミラーリングを実行します
- すべての命令を知って、次の命令でDokcerfileが完成しました
何らかの理由で、ユーザは、通常Dockerfile端でない場合、上記から分かるように(例えばAストリップが失敗した)、ユーザがまだ使用可能なミラーを得ることができ、この利点は、ミラー動作が相互作用の障害に基づくことができます。コンテナの最後の原因をトラブルシューティングするためのコンテナ機能は正常ではありません。
最初の命令のそれぞれはDockerfileから既存のミラーを指定するために、後続の命令は、画像に基づいて動作しなければならず、画像をベース画像(基準画像)と呼ばれています。
そして、命令のMAINTAINER命令を指定すると、ミラーの著者、および電子メールの著者であるドッカを伝えます。
RUNコマンドはnginxの2つのカレントミラーの動作命令実行コマンド、上記の例では、最初の更新指示RUN APTリポジトリ、およびインストールされた後、第2の命令は、/ usr /共有作成します/ nginxの/ HTML / index.htmlをファイル。
各RUNコマンドは、新しいイメージレイヤを作成する命令が正常に作成されている場合、それが提出するこのイメージを、次の命令に進み注意してください。
デフォルトでは、コマンドは、シェルのRUNコマンドのラッパーを使用する
/bin/sh -c
サポートしていないか、シェルのシェルを使用したくない実行されているプラットフォーム上で動作しているとき、あなたはRUNコマンドexecの形式を使用することができ、実行しますRUN ["apt-get", "install", "-y", "nginx"]
RUNコマンドのexecフォーマットを使用すると、実行するコマンドとコマンドパラメータを指定するために、配列を使用する必要があります
命令を露出させ、実行、変更指示が(これはポート80です)指定されたコンテナポート内ドッカーアプリケーションコンテナを使用するよう指示し、セキュリティ上の考慮事項に基づいて、ドッカーは、自動的にポートを開くが、使用するユーザーを必要としないdocker run
コマンドをあなたはポートを開く必要があるかを指定する場合。複数のポートに複数の命令が外部に開示されて指定することができ露出します。
使用Dockerfileビルドミラーリングプロセス
ドッカービルドコマンドの実行、Dockerfile内のすべての命令が実行され、コミットされ、コマンドの終了が成功した後、ヨーロッパで新しいイメージとして返すために、ミラーを構築するプロセスされます。
# 构建过程
# 注意命令最后的 点 ,用于指定当前目录
$ docker build -t="t_repo/static_web" .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:18.04
---> ccc6e87d482b
Step 2/5 : MAINTAINER resn "[email protected]"
---> Running in 37b371f311d4
Removing intermediate container 37b371f311d4
---> 334111fe32cb
Step 3/5 : RUN apt-get update && apt-get install -y nginx
---> Running in b89fe0db4491
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
......
Fetched 17.6 MB in 45s (396 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
fontconfig-config fonts-dejavu-core geoip-database iproute2 libatm1 libbsd0
......
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Removing intermediate container b89fe0db4491
---> 52c2e58d9708
Step 4/5 : RUN echo 'Hello world,I am a container' >/usr/share/nginx/html/index.html
---> Using cache
---> bf55e11f0c27
Step 5/5 : EXPOSE 80
---> Using cache
---> d54272ef62f2
Successfully built d54272ef62f2
Successfully tagged t_repo/static_web:latest
上記の例では、倉庫及びミラーリングに-tパラメータの名前を指定するために、ビルドコマンドドッカーミラーを構築するために使用される場合、倉庫t_repo、ミラー名static_webの名前。このコマンドで、タグは、鏡像であってもよいです。
# 指定标签方法: “镜像名:标签名”, 不指定标签名时,标签名默认为 latest
# 注意命令最后的 点 ,用于指定当前目录
$ docker build -t="t_repo/static_web:v1" .
またDockerfileはgitのリポジトリをファイルに指定することができます
# 通过 git 仓库指定 Dockfile 文件
$ docker build -t="t_repo/static_web:v1" git@github:t_repo/static_web
Dcoker1.5.0は、-fパラメータdockerfileで指定したファイルを指定することができた後、
# 这里的路径汇总的 file 可不比命名为 Dockerfile,但必须要位于构建上下文中 $ docker build -t="t_repo/static_web:v1" -f path/to/file
構築時に指定したファイルを無視します
ビルド.dockerignoreコンテキストのルートディレクトリに指定されたファイルは、ファイルの内容が一致する行、同様の.gitignoreファイルによってフィルタリングされます。このファイルは、ファイルをコンテキストの一部として構成されているセットに使用されている、それはゴー言語のファイルパスを使用して、文書のルールに一致するようにドッキングウィンドウデーモンにアップロードされてからそれらを防ぐことができます
画像を構築する過程で、Dockerfile各命令は、順次実行され、ビルドプロセスの最終結果として、新たな画像IDを返します。機械操作命令に対応する各ステップの構成は地理であり、最終的な出力画像IDの前に、ドッカーは、構築物の各部分の結果を提出します。
失敗を構築する場合
ここでは簡単な説明を実施例を構築するための上記プロセスは、第三のステップは、命令「RUN apt-getを更新&& -y NGINインストールapt-getを」次に(nginxの少ないX)、ビルドが、ここであろうと仮定されますエラーは、この時間は、我々は唯一のステップのIDでミラーを使用する必要があります。334111fe32cbは、新しいコンテナを作成し、第三段階の命令がエラーを除外した後、新しい容器内の第三のステップを修正し、トラブルシューティング一度命令を実行することができます我々は、再構築することができます。
# 使用第二步中生产的镜像来排错
$ docker run -it 334111fe32cb /bin/bash
Dockerfileとキャッシュを構築
プロセスを構築するドッキングウィンドウの画像は非常にスマートで、結果を構築するために、すべてのステップは、直接、直接起動、そのステップの問題から、隣の建物、ミラーに提出され、それは多くの時間を節約できます。ミラー構造は、キャッシュされた上記構成の段階に相当します。
あなたが構築するたびに、ドッカーが最初から起こり始めたすべての変更を命令します。
あなたが構築したい場合は、機能をキャッシュ無視するには、--no-キャッシュパラメータを使用することができます。
$ docker build --no-cache -t -t="t_repo/static_web:v1"
キャッシング--Dockerfileテンプレートの利点の建設
次Dockerfileの内容を見てください
FROM ubuntu:18.04
MAINTAINER resn "[email protected]"
ENV REFERSHED_AT 2020-02-02
RUN apt-get -qq update
ここで命令は、あなたが建物をリフレッシュしたい場合は、日付のみにENVディレクティブを変更する必要があり、テンプレートに基づいて、2020年2月2日のENV変数REFERSHED_AT値によって指定されます
ビューミラー
ミラーの既存のドッキングウィンドウの画像を表示するコマンドを使用します。
# 查看指定镜像
$ docker images t_repo/static_web
# 查看镜像构建历史
# 可查指定镜像的每一层,以及每一层的指令
$ docker history t_repo/static_web
IMAGE CREATED CREATED BY SIZE COMMENT
5e48955e883e 2 days ago /bin/sh -c #(nop) EXPOSE 80 0B
03055ca4743a 2 days ago /bin/sh -c echo 'Hello world,I am a containe… 29B
52c2e58d9708 2 days ago /bin/sh -c apt-get update && apt-get install… 88.3MB
334111fe32cb 2 days ago /bin/sh -c #(nop) MAINTAINER resn "[email protected]… 0B
ccc6e87d482b 7 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 7 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 745B
<missing> 7 weeks ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 987kB
<missing> 7 weeks ago /bin/sh -c #(nop) ADD file:08e718ed0796013f5… 63.2MB
新しいイメージコンテナを起動します
新しいイメージコンテナは、ミラー、通常の建設ていることを確認し起動するために使用することができます。
# 看的书中使用的下面的命令,但我这里一直报错,我就改了一下
# docker run -d -p 80 --name static_web t_repo/static_web nginx -g "daemon off"
# 改成了 dockerfile 中指令改为
# RUN echo "daemon off;" >> /etc/nginx/nginx.conf && echo 'Hello world,I am a container' >/usr/share/nginx/html/index.html
# 之后重新构建镜像
# docker build -t="web01" .
# 最后使用下面的命令执行成功
$ docker run -d -p 80 --name cweb02 web01:latest nginx
3c6361a2c550ce660aa6ea5e9767bd3100266b99811f1f735a3349b26a8b267b
発生した2個のエラーがあります。
最初のものは起動し、コンテナへのログオン時にコンテナのトラブルシューティングを開始しないようにしよう、次のエラーメッセージはありませんヨーロッパのnginxの建設が完了した後に鏡であります
$ docker run -it 24e4642806e8 /bin/bash Unable to find image '24e4642806e8:latest' locally docker: Error response from daemon: pull access denied for 24e4642806e8, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. See 'docker run --help'.
オンライン検索は、ミラーをタグ付けすることができた後、プットドッカrunコマンドは、タグ付きミラー
# 该命令有错误 $ docker run -d -p 80 --name cweb02 web01:latest nginx -g "daemon off"
しかし、実行は、まだあったコンテナの終了ステータスを表示します
使用ドッカーログはa7f0d120458d後、エラーメッセージが表示される:nginxの:[EMERG]パラメータの予期しない終了、期待を「;」コマンドラインで
使用ドッキングウィンドウの実行-it WEB01:最新/ binに/ bashのプロファイルログコンテナはエラーを発見した、とあなたは、コンテナでnginxの通常を開始することができ、それはコマンドを発行ドッキングウィンドウことを疑われた後。
最後に、コマンドを変更した後に正常に実行されます
ドッキングウィンドウの実行-d -p 80 --name cweb02 WEB01:最新nginxの
定義:
--name:容器の名前を指定します
-d:切り離された方法は、nginxのデーモン用のバックグラウンドで実行されているが、長い実行中のプロセスのこのタイプを必要とします
-p:ポートを発表するテルドッキングウィンドウの必要性を、ドッキングウィンドウは、2つの方法で、ホスト上のポートを割り当てることができ、
- ホスト上の第一は、ランダムに容器へのポート80をマッピングするために、32768と61000との間に位置するポートを選択します
- 第二は、ホスト上の容器ポート80にマップする特定のポートを指定することです
# 查看容器端口分配情况
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c6361a2c550 web01:latest "nginx" 22 minutes ago Up 22 minutes 0.0.0.0:32769->80/tcp cweb02
docker port 3c6361a2c550
80/tcp -> 0.0.0.0:32769
docker port 3c6361a2c550 80
0.0.0.0:32769
容器80は、ホストのポート32679にポートマッピングを見ることができます。
-pポートマッピングパラメータによって、ホストのポートへの容器であってもよいです。
$ docker run -d -p 80:80 --name cweb03 web01:latest nginx
056d07bfd4c7b46d8d55236875ab5ad19239b12fc65fec61f5dd995f57028291
$ docker port 056d07bfd4c7
80/tcp -> 0.0.0.0:80
$ docker port 056d07bfd4c7 80
0.0.0.0:80
ノートに問題があります:
ホストコンピュータへの場合ポートポートがマッピングされている複数の容器は、唯一の成功した容器ポートは、ホストカモメのセグメントにマッピングされます。
# 将容器的80端口映射到宿主机的8080
$ docker run -d -p 8080:80 --name cweb04 web01:latest nginx
また、ポート(IPアドレス)を指定されたネットワークインターフェイス上のポートにマッピングされます。
# 绑定到指定 IP 的指定端口上
$ docker run -d -p 127.0.0.1:8080:80 --name cweb05 web01:latest nginx
# 绑定到指定 IP 的随机端口上
$ docker run -d -p 127.0.0.1::80 --name cweb06 web01:latest nginx
24377ba29740dee11637c68861fd893686c66acd0e86090805c18bb8c40a122d
$ docker port 24377ba29740
80/tcp -> 127.0.0.1:32768
$
もっと簡単な方法ポートを発表しました:
$ docker run -d -P --name cweb07 web01:latest nginx
a0c2041a3a5930d8b713e59f47b4029b9368c121aecbd1abe3887f2c70f0fa71
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0c2041a3a59 web01:latest "nginx" 2 seconds ago Up 2 seconds 0.0.0.0:32770->80/tcp cweb07
Dockerfileは、開示された直接ポートコマンドを公開すると発表-Pパラメータにより、容器のポートは、ホストのランダムなポートにバインドされます。