、ミラーパッケージをコミット
私たちは、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をコンテンツもカバーすることができます