記事ディレクトリ
1つ、ドッカー画像紹介
1. Dockerイメージとは
Dockerイメージは、ファイルシステム(ファイルストレージの形式)によってスーパーインポーズされます。下部には、ファイルブートシステムbootfsがあります。これは、一般的なLinux / Unixブートファイルシステムと非常によく似ています。Dockerユーザーがブートシステムを操作することはほとんどありません。実際、コンテナが起動すると、コンテナはメモリに移動され、ブートファイルシステムがマウント解除されて、ディスクミラーリング用のメモリが増えます。Dockerコンテナーの起動にはいくつかのファイルが必要で、これらのファイルはDockerイメージと呼ばれます。
ミラーを取得する方法:
- リモート倉庫からダウンロード
- 友達があなたにコピーします
- ミラーDockerFileを自分で作成する
2. Dockerイメージのロード原理
ダウンロードすると、レイヤー
ごとに次のようなUnionFS(ユニオンファイルシステム)
UnionFS(ユニオンファイルシステム):ユニオンファイルシステム(UnionFS)は、ファイルをサポートする階層型の軽量で高性能なファイルシステムです。システムの変更は、レイヤー上の単一の送信層として送信され、異なるディレクトリを同じ仮想ファイルシステムの下にマウントできます(単一の仮想ファイルシステムに複数のディレクトリを統合します)。Unionファイルシステムは、Dockerイメージの基盤です。ミラーリングはレイヤーを介して継承でき、基本的なミラーリング(親ミラーリングなし)に基づいて、さまざまな特定のアプリケーションのミラーリングを行うことができます。
機能:複数のファイルシステムを同時にロードしますが、外部からは1つのファイルシステムしか表示されません。共同ロードは、さまざまなレイヤーのファイルシステムを重ね合わせて、最終的なファイルシステムにすべての基礎となるファイルとディレクトリが含まれるようにします
Dockerイメージは実際には、階層化ファイルシステム(この階層化ファイルシステムUnionFS)で構成されています。
- Bootfs(ブートファイルシステム)は主にブートローダーとカーネルを含み、ブートローダーは主にbow |ガイドのロードカーネル、Linuxは起動時にbootfsファイルシステムをロードし、Dockerイメージの最下層はbootfsです。このレイヤーは、ブートローダーとカーネルを含む、私たちの典型的なLinux / Unixシステムと同じです。booが読み込まれると、カーネル全体がメモリ内に存在しますが、現時点では、メモリを使用する権利がbootfsからカーネルに移されており、このときシステムはbootfsもアンロードします。
- rootfs(ルートファイルシステム)、bootfsの上。標準のLinuxシステムでは、標準のディレクトリと/ dev、/ proc、/ bin、/ etcなどのファイルが含まれます。Rootfsは、Ubuntu、Centosなど、さまざまなオペレーティングシステムのディストリビューションです。
通常、仮想マシンにインストールするCentOSは数Gですが、Dockerが200Mしかないのはなぜですか?
合理化されたOSの場合、rootfsは非常に小さく、最も基本的なコマンドのみを含める必要があり、プログラムライブラリのみを持っています。ホストのカーネルでは、rootfsを指定するだけで済みます。異なるLinuxディストリビューションでは、bootfsは基本的に同じであり、rootfsも異なるため、異なるディストリビューションでbootfsを共有できることがわかります。
4.ミラーの構成原理
4.ミラーを構築するには3つの方法があります。
1. Dockerfileに基づいて作成(最も一般的に使用されます)
2.既存の画像コンテナに基づいて画像を作成します
3.ローカルテンプレートに基づいてビルドする
次に、ミラーを作成します
1. Dockerfileの概要?
Dockerfileは一連の指示で構成されるファイルです
Dockerfile構造は4つの部分に分かれています。
-
1.基本的な画像情報
-
2.メンテナ情報
-
3.ミラー操作手順
-
4.コンテナの起動時に指示を指定します
(1)Dockerfile共通操作手順
(2)ミラーを作成するDockerfile
Dockerfileを使用してhttpdイメージを作成して実行する1. Dockerfileを
書き込みます
[root@docker ~]# mkdir apache
[root@docker ~]# cd apache/
[root@docker apache]# vim Dockerfile
##基于的基础镜像
FROM centos
##维护镜像的用户信息
MAINTAINER The porject <CN-TangZheng>
##镜像操作指令安装Apache软件
RUN yum -y update
##安装Apache服务
RUN yum -y install httpd
##开启80端口
EXPOSE 80
##复制网址首页文件
ADD index.html /var/www/html/index.html '//此命令可以结合上图理解'
##将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
##启动容器时执行脚本
CMD ["/run.sh"]
2.実行スクリプトとホームページコンテンツを作成する
[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/* '//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND '//启动apache'
[root@docker apache]# echo "this is test web" > index.html
3.ミラーを生成する
[root@docker apache]# ls
Dockerfile index.html run.sh
[root@docker apache]# docker build -t httpd:centos . '//最后的一个"."要注意,-t:镜像的名字:标签'
'//每一个缓存层都会生成一个临时容器来执行命令,然后删除'
[root@docker apache]# docker images '//查看镜像,已经生成了两个'
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 19 seconds ago 434MB
centos latest 470671670cac 3 months ago 237MB
4.新しいイメージでコンテナを実行します
[root@docker apache]# docker run -d -p 1111:80 httpd:centos '//-p 指定端口号,-P 随机端口号'
04b0f0f1bda36a4857f8d48e044cd17f442be19f4d32dee4cf3183827b451b55
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04b0f0f1bda3 httpd:centos "/run.sh" 4 seconds ago
2.既存の画像コンテナに基づいて作成します
コンテナを作成
[root@docker apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 23 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB '//使用此镜像创建容器'
[root@docker apache]# docker create -it centos /bin/bash
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
325c28cc9349 centos "/bin/bash" 42 seconds ago Created infallible_poitras
04b0f0f1bda3 httpd:centos "/run.sh" 21 minutes ago Up 21 minutes 0.0.0.0:1111->80/tcp nostalgic_greider
ミラーを作成
[root@docker apache]# docker commit -m "ceshi" -a "tang" 325c28cc9349 tang:centos '//-m:说明文字,-a:提交的作者'
sha256:a49089651887dee9c9168532466542ca7ea0c9113da078230694ac30aebe064c
[root@docker apache]# docker images '//镜像创建成功'
REPOSITORY TAG IMAGE ID CREATED SIZE
tang centos a49089651887 14 seconds ago 237MB
httpd centos d2010670b33a 30 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB
3.ローカルテンプレートに基づいて作成
ローカルテンプレートをダウンロードします。
ミラーは、システムテンプレートファイルをインポートすることで生成できます。テンプレートは、OPENVZオープンソースプロジェクトからダウンロードできます。
アドレスは次のとおりです:https
://wiki.openvz.org/Download/template/precreatedまたはwgetを使用してダウンロード:wget http://download.openvz .org / template / precreated / debian-7.0-x86-minimal.tar.gz
テンプレートはダウンロード後に直接インポートできます
[root@docker opt]# ls
debian-7.0-x86-minimal.tar.gz
[root@docker opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new 487145d2411f 8 seconds ago 215MB
2. Docker専用倉庫の設立
Docker Registryツールは現在2.0シリーズバージョンです。このバージョンは、いくつかのライブラリおよびツールとともに、コンテナコンテンツの配布を担当するツールセットであるDocker Distributionにパッケージ化されています。現在、そのコア機能コンポーネントは、ミラーウェアハウスの管理を担当しています。Registryの新しいバージョンはGolangに基づいてリファクタリングされ、パフォーマンスとスケーラビリティが向上し、プライベートイメージ登録サーバーの構築に非常に適したDocker 1.6+ APIをサポートしています。レジストリイメージは公式の倉庫にも提供されているため、ユーザーはコンテナの操作やソースのインストールを通じてレジストリを使用できます。
1.個人倉庫の設置手順
1.レジストリイメージをダウンロードします
。2.クライアント側でdaemon.jsonファイルを設定し、プライベートウェアハウスの場所を指定します。3
.レジストリコンテナーを生成し、ポート5000を開きます
。4.イメージにラベルを付け
ます。5. イメージをアップロードし、Dockerプッシュします。6. イメージをダウンロードし、Docker
プルします。
2.専用倉庫を設置する
(1)サーバーがレジストリイメージをダウンロードする
[root@docker apache]# docker pull registry
(2)ミラー倉庫の住所を指定する
[root@docker apache]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.233.133:5000"], '//添加此段'
"registry-mirrors": ["https://yu1vx79j.mirror.aliyuncs.com"]
}
[root@docker apache]# systemctl restart docker
(3)レジストリコンテナーを生成し、ポート5000を開く
レジストリはサービスを提供するために稼働している必要があります
[root@docker apache]# docker create -it registry /bin/bash
87db162017924493a4dadefd1f58ff2fdf5a62921a9f4233c84143340e36e1e5
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87db16201792 registry "/entrypoint.sh /bin…" 12 seconds ago Created agitated_darwin
[root@docker apache]# docker start 87db16201792
[root@docker apache]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry '共享目录 宿主机的data共享到docker的tmp下'
60e04d648d5116ceb369eee810e8ed85f2043aa2f573b0ebf1e1233e8e13e2f6
(4)ミラーラベリング
[root@docker apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tang centos a49089651887 38 minutes ago 237MB
httpd centos d2010670b33a About an hour ago 434MB
registry latest 708bc6af7e5e 2 months ago 25.8MB
centos latest 470671670cac 3 months ago 237MB
[root@docker apache]# docker tag tang:centos 192.168.233.133:5000/httpd '要打上镜像仓库ip地址端口的tag'
(5)ミラーテストのアップロード
[root@docker apache]# docker push 192.168.233.133:5000/httpd
The push refers to repository [192.168.233.133:5000/httpd]
0683de282177: Pushed
latest: digest: sha256:7a6f34c22ab081c96ee0b676244300691d7a2f63fe4aedd22f150f17fe4aa5a9 size: 529
(6)ミラーテストをダウンロードする
カールしてミラーディレクトリを表示する
[root@docker apache]# curl -XGET http://192.168.233.133:5000/v2/_catalog
{
"repositories":["httpd"]}
[root@docker apache]# docker pull 192.168.233.133:5000/httpd '从本地下载镜像'