著作権表示:この記事はShaonPuppetによるオリジナル記事です。転載の元のアドレスを教えてください。ありがとうございます。 https://blog.csdn.net/wh211212/article/details/53171611
Docker公式サイト:[http://www.docker.com/](http://www.docker.com/)
Docker公式ドキュメント:[https://docs.docker.com/](https://docs.docker.com/)
Docker Githubアドレス:[https://github.com/docker/docker](https://github.com/docker/docker)
Dockerウェアハウス:[https://hub.docker.com/](https://hub.docker.com/)
Docker中国人コミュニティ:[http://www.docker.org.cn/book/docker](http://www.docker.org.cn/book/docker)
Dockerアプリケーションのシナリオ:[https://www.zhihu.com/question/22969309](https://www.zhihu.com/question/22969309)
1.1、 Dockerとは何ですか?
Dockerは、Go言語に基づくクラウドオープンソースプロジェクトです。2013年の初めに誕生しました。元のイニシエーターはdotcloudでした。
Dockerは、あらゆるアプリケーション向けの軽量でポータブルな自給自足のコンテナを簡単に作成できるオープンソースエンジンです。開発者は、VM(仮想マシン)、ベアメタル、OpenStackクラスター、その他の基本的なアプリケーションプラットフォームなど、実稼働環境でバッチで展開できるコンテナーをラップトップでコンパイルおよびテストしました。
ドッカー中国のコミュニティ
Dockerの主な目標は'Build,Ship and Run Any App Anywhere',つまり、アプリケーションコンポーネントのパッケージ化(Packing)、配布(Distribution)、展開(Deployment)、操作(Runtime)などのライフサイクル管理を通じて、アプリケーションコンポーネントレベルの「1つのパッケージ、複数の実行」を実現します。ここでのアプリケーションコンポーネントは、Webアプリケーション、データベースサービスのセット、またはオペレーティングシステムやエディタのいずれかです。
1.2、 なぜDockerを使用するのですか?
Dockerは適切な場所に、適切なタイミングで、適切なトレンドに従っています--つまり、アプリケーションの効率的な構築です。
より迅速な配信と展開。
リソースのより効率的な使用
更新の展開が容易
よりシンプルな更新管理
Dockerと仮想マシンの比較
Dockerコンテナは非常に高速で、開始と停止は数秒で実現できます。これは、従来の仮想マシン方式よりもはるかに高速です。
Dockerコンテナはシステムリソースをほとんど必要とせず、何千ものDockerコンテナをホスト上で実行できます
Dockerは、Gitのような操作を使用して、ユーザーが簡単な手順と低い学習コストでアプリケーションイメージを取得、配布、更新できるようにします。
Dockerは、Dockerfile構成ファイルを介して柔軟な自動作成および展開メカニズムをサポートし、作業効率を向上させます
1.3、 仮想化とDocker
仮想化は一般的な概念であり、さまざまな分野でさまざまな理解があります。コンピュータの分野では、一般的にコンピューティング仮想化、またはサーバー仮想化を指します。
仮想化の中核は、リソースを抽象化することです。目標は、多くの場合、同じホスト上で複数のオペレーティングシステムまたはアプリケーションを実行し、それによってシステムリソースの使用率を向上させると同時に、コストを削減し、管理を容易にし、障害耐性を高めることです。
仮想化は、ハードウェアベースの仮想化とソフトウェアベースの仮想化に分けることができます。ソフトウェアベースの仮想化は、アプリケーション仮想化とプラットフォーム仮想化に分けられます。プラットフォームの仮想化は、次のサブカテゴリに分類されます。
完全に仮想化されています。仮想マシンは、基盤となる完全なハードウェア環境と特権命令の実行プロセスをシミュレートし、ゲストオペレーティングシステムを変更する必要はありません。 VMware Workstation、VirtulBox、QEMUなど。
ハードウェア支援仮想化。ハードウェア支援サポートを使用して機密性の高い命令を処理し、完全な仮想化を実現するため、Xen、KVMなどのクライアントオペレーティングシステムを変更する必要はありません。
部分的に仮想化されています。一部のハードウェアリソースのみが仮想化されており、クライアントのオペレーティングシステムを変更する必要があります。
準仮想化。ハードウェアインターフェイスの一部はソフトウェアの形でゲストオペレーティングシステムに提供されており、ゲストオペレーティングシステムを変更する必要があります。
オペレーティングシステムレベルの仮想化。カーネルは、複数の仮想オペレーティングシステムインスタンスであるDockerテクノロジを作成することにより、さまざまなプロセスを分離します。
Install Dockerは、コンテナにアプリケーションを自動的にデプロイできるオペレーティングシステムレベルの仮想化ツールです。
[ root@linuxprobe~]# yum -y install docker
[ root@linuxprobe~]# systemctl start docker
[ root@linuxprobe~]# systemctl enable docker
[ root@linuxprobe ~]# systemctl status docker #ドッカーのステータスを表示する
● docker.service - Docker Application Container Engine
Loaded:loaded(/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active:active(running) since Wed 2016-10-2619:38:40 CST; 12s ago
Docs: http://docs.docker.com
Main PID:3762(docker-current)
CGroup:/system.slice/docker.service
└─3762/usr/bin/docker-current daemon --exec-opt native.cgroupdriver=systemd --selinux-enabled --log-driver=journald
Oct 2619:38:39 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:39.844803185+08:00" level=info msg="devmapper: Successfully created filesystem xfs on device docker-253:0-104354176-base"
Oct 2619:38:39 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:39.994708787+08:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.018129400+08:00" level=info msg="Firewalld running: true"
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.294869786+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can ...red IP address"
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.567994904+08:00" level=info msg="Loading containers: start."
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568039413+08:00" level=info msg="Loading containers: done."
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568047306+08:00" level=info msg="Daemon has completed initialization"
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568058527+08:00" level=info msg="Docker daemon" commit=cb079f6-unsupported execdriver=native-0.2 graphdriver=devicemapper version=1.10.3
Oct 2619:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.572491688+08:00" level=info msg="API listen on /var/run/docker.sock"
Oct 2619:38:40 linuxprobe.org systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
[ root@linuxprobe ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
08 d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for docker.io/centos:latest
[ root@linuxprobe ~]# docker run centos /bin/echo "Welcome to the Docker World"
Welcome to the Docker World
[ root@linuxprobe ~]# docker run -i -t centos /bin/bash
[ root@82699d79557c /]# uname -a
Linux 82699d79557c 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 1922:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[ root@82699d79557c /]# exit
exit
[ root@linuxprobe ~]# #back
[ root@linuxprobe ~]# docker run -i -t centos /bin/bash
[ root@a05c7fd0a54f /]# [root@linuxprobe ~]#
[ root@linuxprobe ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a05c7fd0a54f centos "/bin/bash"24 seconds ago Up 23 seconds trusting_fermat
[ root@linuxprobe ~]# docker attach a05c7fd0a54f # connect docekr process
[ root@a05c7fd0a54f /]# [root@linuxprobe ~]# docker kill a05c7fd0a54f # kill docker process
a05c7fd0a54f
[ root@linuxprobe ~]# docker ps #実行中のdockerサービスを表示する
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[ root@linuxprobe ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB
# start a Container and install httpd
[ root@linuxprobe ~]# docker run centos /bin/bash -c "yum -y update; yum -y install httpd"[root@linuxprobe ~]# docker ps -a | head -2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f36383194ad4 centos "/bin/bash -c 'yum -y"2 minutes ago Exited(0)45 seconds ago jolly_cray
elegant_wright
[ root@linuxprobe ~]# docker commit f36383194ad4 my_image/centos_httpd
[ root@linuxprobe ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB
my_image/centos_httpd latest b0be2940865a 7 seconds ago 338.3 MB
アクセスコンテナ
root@linuxprobe ~]# docker run -it -p 8081:80 my_image/centos_httpd /bin/bash
[ root@2f0d06526d42 /]# /usr/sbin/httpd &[1]14[root@2f0d06526d42 /]# AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[1]+ Done /usr/sbin/httpd
[ root@2f0d06526d42 /]# echo "httpd on Docker Container">/var/www/html/index.html # exit with Ctrl+p, Ctrl+q
[ root@2f0d06526d42 /]# [root@linuxprobe ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2 f0d06526d42 my_image/centos_httpd "/bin/bash"54 seconds ago Up 52 seconds 0.0.0.0:8081->80/tcp hopeful_gates
[ root@linuxprobe ~]# docker ps -a | head -2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2 f0d06526d42 my_image/centos_httpd "/bin/bash"27 minutes ago Up 27 minutes 0.0.0.0:8081->80/tcp hopeful_gates
クライアントブラウザへのアクセス
[1] Dockerfileの形式は[INSTRUCTIONarguments]です。以下のINSTRUCTIONの説明を参照してください。
指示の説明
MAINTAINER生成された画像の作成者フィールドを設定します。
RUN Dockerイメージが作成されると、すべてのコマンドが実行されます。
CMDは、Dockerコンテナが実行されるときに任意のコマンドを実行します。
LABEL画像にメタデータを追加します。
EXPOSE実行時に指定されたネットワークポートでリッスンすることをDockerコンテナに通知します。
ADD新しいファイル、ディレクトリ、またはリモートファイルのURLをコピーします。
COPY新しいファイルまたはディレクトリをコピーします。 [ADD]との違いは、これ以上URLを指定することも、アーカイブファイルを自動的に抽出することもできないことです。
VOLUME指定された名前でマウントポイントを作成し、ローカルホストまたは他のコンテナから外部にマウントされたボリュームを格納するものとしてマークします。USERユーザー名またはUIDを設定します。
WORKDIR作業ディレクトリを設定します。
[ root@linuxprobe ~]# vim Dockerfile
# create newFROM centos
MAINTAINER linuxprobe <[email protected]>
RUN yum -y install httpd
RUN echo "Hello LinuxProbe DockerFile">/var/www/html/index.html
EXPOSE 80
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"][root@linuxprobe ~]# docker build -t web_server:latest .
Sending build context to Docker daemon 21.5 kB
Step 1: FROM centos
- - - > 0584 b3d2cf6d
Step 2: MAINTAINER linuxprobe <[email protected]>---> Running in 8064d0091e44
- - - > 940 c8fbe4161
Removing intermediate container 8064d0091e44
Step 3: RUN yum -y install httpd
- - - > Running in 3d37e4919fa9
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirrors.163.com
* extras: ftp.sjtu.edu.cn
* updates: mirrors.163.com
Resolving Dependencies
- - > Running transaction check
- - - > Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
- - > Processing Dependency: httpd-tools =2.4.6-40.el7.centos.4forpackage: httpd-2.4.6-40.el7.centos.4.x86_64
- - > Processing Dependency: system-logos >=7.92.1-1forpackage: httpd-2.4.6-40.el7.centos.4.x86_64
- - > Processing Dependency:/etc/mime.types forpackage: httpd-2.4.6-40.el7.centos.4.x86_64
- - > Processing Dependency: libaprutil-1.so.0()(64bit)forpackage: httpd-2.4.6-40.el7.centos.4.x86_64
- - > Processing Dependency: libapr-1.so.0()(64bit)forpackage: httpd-2.4.6-40.el7.centos.4.x86_64
- - > Running transaction check
- - - > Package apr.x86_64 0:1.4.8-3.el7 will be installed
- - - > Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
- - - > Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed
- - - > Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed
- - - > Package mailcap.noarch 0:2.1.41-2.el7 will be installed
- - > Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
centos-logos noarch 70.0.6-3.el7.centos base 21 M
httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k
mailcap noarch 2.1.41-2.el7 base 31 k
Transaction Summary
================================================================================
Install 1Package(+5 Dependent packages)
Total download size:24 M
Installed size:31 M
Downloading packages:
warning:/var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed
Public key for httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total 382 kB/s |24 MB 01:05
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid :"CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
Fingerprint:6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-2.1511.el7.centos.2.10.x86_64(@CentOS)
From :/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : apr-1.4.8-3.el7.x86_64 1/6
Installing : apr-util-1.5.2-6.el7.x86_64 2/6
Installing : httpd-tools-2.4.6-40.el7.centos.4.x86_64 3/6
Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6
Installing : mailcap-2.1.41-2.el7.noarch 5/6
Installing : httpd-2.4.6-40.el7.centos.4.x86_64 6/6
Verifying : apr-1.4.8-3.el7.x86_64 1/6
Verifying : httpd-tools-2.4.6-40.el7.centos.4.x86_64 2/6
Verifying : apr-util-1.5.2-6.el7.x86_64 3/6
Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 4/6
Verifying : mailcap-2.1.41-2.el7.noarch 5/6
Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6
Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.4
Dependency Installed:
apr.x86_64 0:1.4.8-3.el7
apr-util.x86_64 0:1.5.2-6.el7
centos-logos.noarch 0:70.0.6-3.el7.centos
httpd-tools.x86_64 0:2.4.6-40.el7.centos.4
mailcap.noarch 0:2.1.41-2.el7
Complete!---> 3ce9abf4dfea
Removing intermediate container 3d37e4919fa9
Step 4: RUN echo "Hello LinuxProbe DockerFile">/var/www/html/index.html
- - - > Running in 297d8d666c8d
- - - > 3 d185363045b
Removing intermediate container 297d8d666c8d
Step 5: EXPOSE 80---> Running in 017db517e06a
- - - > 5 c855e478c3c
Removing intermediate container 017db517e06a
Step 6: CMD -D FOREGROUND
- - - > Running in 6add13fca3cb
- - - > 7 a219d9fa6e1
Removing intermediate container 6add13fca3cb
Step 7: ENTRYPOINT /usr/sbin/httpd
- - - > Running in da4671709ee1
- - - > c0d84e256068
Removing intermediate container da4671709ee1
Successfully built c0d84e256068
[ root@linuxprobe ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB
web_server latest c0d84e256068 36 seconds ago 338.3 MB
my_image/centos_httpd latest b0be2940865a 4 hours ago 338.3 MB
[ root@linuxprobe ~]# docker run -d -p 80:80 web_server
c37d25a405a8e0599bf54fe77d78c807a520242a21ccb15b18d6b6ee4d13415b
[ root@linuxprobe ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c37d25a405a8 web_server "/usr/sbin/httpd -D F"6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp condescending_knuth
2 f0d06526d42 my_image/centos_httpd "/bin/bash" About an hour ago Up About an hour 0.0.0.0:8081->80/tcp hopeful_gat
Recommended Posts