Dockerfileを調製し、ミラーに包装 - ドッカー容器

、ミラーパッケージをコミット

私たちは、Ubuntuの例をミラーリング:
まず、ubentuの鏡像があります

[root@server1 ~]# docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              07c86167cdc4        3 years ago         188MB

我々は最初のVM1コンテナを確立し、いくつかの操作を行い、その後、CTRL + P + Q終了します

[root@server1 ~]# docker run -it --name vm1 ubuntu
root@6074aca22100:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@6074aca22100:/# touch file{1..10}
root@6074aca22100:/# ls
bin   etc     file2  file5  file8  lib    mnt   root  srv  usr
boot  file1   file3  file6  file9  lib64  opt   run   sys  var
dev   file10  file4  file7  home   media  proc  sbin  tmp

私たちの上にビューの文書が作成され、再作成しVM1コンテナを削除し、に基づいているかどうか

[root@server1 ~]# docker rm -f vm1
vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@94a7b7a6ffc0:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

私たちは、操作が保存されていない、私たちが作成したファイルを見つけることができません。
だから我々はそれを再確立する必要がある場合、それは存在し続けましょう、パッケージに再コミットする必要があります

root@94a7b7a6ffc0:/# touch file{1..10}
root@94a7b7a6ffc0:/# ls
bin   etc     file2  file5  file8  lib    mnt   root  srv  usr
boot  file1   file3  file6  file9  lib64  opt   run   sys  var
dev   file10  file4  file7  home   media  proc  sbin  tmp

CTRL + D退出リリースリソース、ミラーパッケージ

root@94a7b7a6ffc0:/# exit
[root@server1 ~]# docker commit -m "add files" vm1 ubuntu:v1
sha256:387e3d445215ca2e177b4c8f0ae3807edffd919a13be237ebcc5e69c4f1523b8

ここに画像を挿入説明
ここに画像を挿入説明
私たちは、その後、私たちの、再密封可能なコンテナミラーリング操作を使用します。

[root@server1 ~]# docker run -it --name vm2 ubuntu:v1 
root@a5fe8bd9c26b:/# ls
bin   etc     file2  file5  file8  lib    mnt   root  srv  usr
boot  file1   file3  file6  file9  lib64  opt   run   sys  var
dev   file10  file4  file7  home   media  proc  sbin  tmp

我々はまだ我々の以前の文書を見つけることができます保存されています

二、Dockerfile準備、パッケージミラー

実験前の前の環境のクリーンアップ

  docker rm -f vm1
  docker rm -f vm2
  docker ps -a
  docker rmi ubuntu:v1 
  • Dockerfileの実現を書くのhttpdをインストール

1.ミラーrhel7の導入

[root@server1 ~]# docker load -i rhel7.tar 
e1f5733f050b: Loading layer  147.1MB/147.1MB

2.書き込みDockerfile

[root@server1 ~]# docker load -i rhel7.tar 
e1f5733f050b: Loading layer  147.1MB/147.1MB
[root@server1 ~]# cd /tmp/docker/
[root@server1 docker]# vim Dockerfile
[root@server1 docker]# cat Dockerfile 
FROM rhel7		#源镜像是rhel7,最好将rhel7的镜像放在本地
COPY yum.repo /etc/yum.repos.d/yum.repo		##复制一个yum源
RUN rpmdb --rebuilddb && yum install -y httpd	##执行命令安装httpd并清除yum缓存
##rpmdb命令用于初始化和重建rpm数据库 --rebuilddb 从已安装的包头文件,反向重建RPM数据库
EXPOSE 80		##定义端口
CMD ["/usr/sbin/httpd","-D","FOREGROUND"] #打开apache服务-D是全局文件/etc/sysconfig/httpd中打开的参数

3.書き込みyum.repo(カレントディレクトリ)

[root@server1 docker]# vim yum.repo
[root@server1 docker]# ca yum.repo
-bash: ca: command not found
[root@server1 docker]# cat yum.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.66.250/rhel7.3
gpgcheck=0

4.ミラーパッケージ、およびテストを使用するかどうか

[root@server1 docker]# docker build -t rhel7:v1 .
注意后面的点,表示当前目录,我们设置其标签为v1

ここに画像を挿入説明

ここに画像を挿入説明
最後に、我々は成功の書き込みを見つけることができます

[root@server1 docker]# docker images rhel7:v1 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rhel7               v1                  41e959659080        2 minutes ago       193MB

5.私たちは、新しいコンテナを実行するための新しいイメージ、およびデフォルトのhttpdへのファイルがディレクトリの公開をマウントし、デフォルトの発行のhttpdディレクトリを使用します

[root@server1 ~]# cd /tmp/docker/
[root@server1 docker]# ls
Dockerfile  index.html  yum.repo
[root@server1 docker]# mkdir web
[root@server1 docker]# mv index.html web/
[root@server1 docker]# docker run -d --name vm1 -p 80:80 -v /tmp/docker/web/:/var/www/html rhel7:v1 
3f1d0e90e349c373c879f361476e81ed2922637035de56962041053bb423d80d
[root@server1 docker]# curl 172.25.66.1
hello
hello
hello

ここに画像を挿入説明
6.私たちは、デフォルトの発行ファイルを変更して、テストへのアクセスを継続します

	[root@server1 docker]# cd web/
[root@server1 web]# echo www.ljz.org > index.html 
[root@server1 web]# curl 172.25.66.1
www.ljz.org

我々は、デフォルトのパブリッシングインターフェースを変更することができるかどうか私達は見ることができます

三、Dockerfileは、頻繁に使用される命令を書きます

  • ADD
    も自動的にダウンロードし、ミラーにURLをコピーすることができ、使用をし、srcは、アーカイブファイルを圧縮することができ、ファイルは自動的にdestに抽出されます除いCOPYは、似ています:
    ADD html.tarの/ var / WWWの
    ADDのHTTPを:// IP / HTML .tarファイルは/ var / WWW
  • ENV
    後続の命令することができ、環境変数を設定するには、使用しています:
    ENVのHOSTNAME sevrer1.example.com
  • EXPOSE
    あなたがサービスコンテナは、サービスポートに暴露することができるアプリケーションを実行する場合:
    80を公開
  • VOLUME
    述べたデータ量は、データは通常、アプリケーションの吊りポイントで指定されている:
    VOLUMEの[ "の/ var / WWW / HTML"]
  • WORKDIR
    RUN、CMD、エントリーポイント、およびADDのCOPYコマンドセットは、現在の仕事に反映され
    たディレクトリが存在しない場合は、ディレクトリに対しては自動的に作成されます。
  • RUN
    コンテナ内の実行]コマンドと一般的にインストールパッケージに使用される新しいイメージレイヤ、作成:
    RUN yumをインストール-y Vimを
  • :CMDはENTRYPOINTを異なり
    、これら2つの命令が開始された後、コンテナを設定するためのコマンドで実行されますが、CMDは、カバーの後ろに実行するコマンドラインドッキングウィンドウで、エントリーポイントを無視されることはありません、実行されます
  • 引数の後ろにドッカーの実行はコマンドENTRYPOINTへの引数として渡すことができます。
  • Dockerfileはあなたが数を指定した場合、最後のものだけが有効で、ENTRYPOINTを指定することができます。

1.まず、我々は文字画像出力をインポート

[root@server1 ~]# ls
busybox.tar  docker  game2048.tar  nginx.tar  rhel7.tar  ubuntu.tar
[root@server1 ~]# docker load -i busybox.tar 
8a788232037e: Loading layer   1.37MB/1.37MB
Loaded image: busybox:latest

2.書き込みDockerfileファイル

[root@server1 docker]# ls
Dockerfile  web  yum.repo
[root@server1 docker]# vim Dockerfile 
[root@server1 docker]# cat Dockerfile 
FROM busybox
ENV name world	#设置环境变量
ENTRYPOINT echo "hello,$name"

3.ミラーコンテナの操作を作成します
ここに画像を挿入説明

[root@server1 docker]# docker run --rm busybox:v1  #运行容器后删除
hello,world

出力がエコーであるとき4.ここでは、問題を説明する必要がある、私達はちょうど使用することは、彼が実際にシェル形式で、もちろん、我々はまた、出力形式execを使用することができ、下シェルフォーマット/ binに/ SHを呼び出します。コマンドを実行する-c、あなたは変数を解決することができ、変数execを解決することはできません

[root@server1 docker]# vim Dockerfile 
[root@server1 docker]# cat Dockerfile 
FROM busybox
ENV name world
ENTRYPOINT ["/bin/echo","hello,$name"]

ここに画像を挿入説明
だから我々はそれexecの形式を使用する必要がある場合、私たちはすることができます

[root@server1 docker]# vim Dockerfile 
[root@server1 docker]# cat Dockerfile 
FROM busybox
ENV name world
ENTRYPOINT ["/bin/sh","-c","echo hello,$name"]

ここに画像を挿入説明
5. ENTRYPOINTとCMD

[root@server1 docker]# vim Dockerfile 
[root@server1 docker]# cat Dockerfile 
FROM busybox
ENTRYPOINT ["/bin/echo","hello"]
CMD ["world"]

ここに画像を挿入説明
もちろん、我々はcmdをコンテンツもカバーすることができます
ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/weixin_42446031/article/details/90756718