ドッカーの素人シリーズ|画像戦闘演習

ドッキングウィンドウは、長年の市場にされている、それは何も新しいものではなく、学生の多くの企業や開発者の多くは、前に接触していないではなく、実際の運用の経験を持っている多くの人々は、実用的なこのシリーズの主な重点は、に基づいて、乾燥品を話そう私はこのチュートリアルシリーズは、前のセクションの特定の依存性を持っているので、公式のチュートリアルを参照してください、と以前のすべての章を学ぶことができ、特定の公式概念を精緻理解しています。

このチュートリアルナビゲーションのシリーズ:
ドッカーの素人シリーズ|コンテナ初めての経験

コースの目的

  • レビューコンテナコア知識とイメージ
  • 2つの方法のカスタムイメージを作成する方法を学びます
  • 一般的なコマンドのいくつかを理解Dockerfile
  • 画像は、いくつかの一般的に使用されるコマンドを理解します
  • Springbootコンテナを実行する方法を学びます

コンテナコア知識と画像レビュー

既に述べた一方、ドッカー画像多層構造は、実際には1層からなるファイルシステムによって実行される、基礎となるホストは、Linuxカーネル、層状構造イメージを改善することで共有され再利用されます。画像は、Java継承ルールと同様に、容器が下層画像の各々がJAVAで親クラスであってもよく、上部ミラーアセンブリ底部ミラーを共有してもよいことを理解すべきでJAVAの対象として見ることができる、Javaクラスファイルとして見ることができます。
ドッカーイメージは、新しいコンテナイメージを実行するために、各ファイルの完全なコピーを避けるために、連合のファイルシステムをミラー化し、層状のコンテナベース。同じ容器に入れ、独自のファイルシステム層のための分離容器は、既知の再起動(あなたがコンテナを削除すると、層の変化が閉鎖されるため)からコンテンツを許可する変更されます。
ここに画像を挿入説明
ユーザー層のコンテナは、すべての新規ユーザーおよび環境に依存するデータは、コンテナ層に格納され、下位層イメージを読めるだけで、変更することはできません。

コンテナは、アナログハードウェアがカーネル空間を起動するように仮想マシンを作成するために必要とされていない、軽量の仮想化技術である、非常に高速起動します

ドッキングウィンドウは、Linuxカーネルの名前空間、cgroupを、自己の中にパッケージUnionFileSystem技術に基づいており
、これにより、仮想実行環境を提供する、定義されたコンテナフォーマット。

  • 名前空間:名前空間にシステムリソースを変更する独立したグローバルなシステムリソースの異なる名前空間でプロセスを作成するグローバルな分離システムリソースのパッケージは、唯一のプロセスで現在の名前空間に影響を与えるだろう、プロセス内の他の名前空間には影響を与えません例えば、PID [プロセス]、正味[ネットワーク]、MNT [マウントポイント]、等
  • cgroup:のcgroupと同様の名前空間だけでなく、グループ化のプロセスが、その目的とcgroup内のような統一された監視およびリソース制限を行うための処理のセットであるが、名前空間は、処理群間の分離株のリソースに同じ名前空間であるれていませんメモリ、CPU、プロセスの数、等
  • 連合ファイルシステム:画像のために使用される階層の容器と

二つの方法ドッカーイメージの生産

ここに画像を挿入説明

  • Dockerfileを行うことで(推奨) - Dockerfileは命令を含むセクション内、各命令層を構築するために、したがって各命令の内容は、それは層があるべきで構築する方法を説明することです。
  • Docker commit操作-リバースは、commitコマンドをドッキングウィンドウでコンテナのコピーに基づいて新しいイメージファイルを作成します。しかし、使用はdocker commitとても不親切な問題のトラブルシューティングに、イメージ作成プロセスがないことができます参照してください。

一般的なコマンドDockerfile

  • FROM
    6:例えばCentOSのFROMのような指定された基底画像、
    FROM centos:6
  • RUNは
    、このようなソフトウェアのインストール、設定環境、缶ラップとして、画像内のコマンドを実行します
    groupadd -r mysql && useradd -r -g mysql mysql
  • ENVの
    変数の値は、ENV MYSQL_MAJOR 5.7は、後に直接することができるように、--eキー=値を実行ドッカーによって修飾することができる
    $ {MYSQL_MAJOR}を使用します
    ENV MYSQL_MAJOR 5.7
  • LABELは、
    ミラーリングされたラベルを設定しました
LABEL email="[email protected]" 
LABEL name="evan"
  • VOLUMEの
    匿名のデータボリュームの定義。コンテナを起動するときに忘れて自動的に匿名のボリュームをマウントするコンテナのドッキングウィンドウの実行を開始するとき、私たちは-vパラメータでマウントポイントを修正することができ、データボリュームをマウント。
    役割:
    • 非常に致命的であるコンテナの再起動が原因で失われた重要なデータを、避けてください。
    • 避けコンテナはますます大きくなっています。
      VOLUME /var/lib/mysql
  • COPY
    コピーは、ディレクトリが存在しない場合、それは自動的にコピーするには、ないの抽出物とに、ちょうど注意を払うのに必要なディレクトリを作成しますが、鏡の中のホストへのファイルの
    解凍
    COPY demo-api.jar /usr/loacl/app/
  • ADDは、
    鏡の中のホスト、および同様のCOPYにファイルをコピーし、ADDは圧縮し、ファイル抽出を解凍します
    ADD demo-api.jar /usr/loacl/app/
  • WORKDIRは
    そこが作成されている場合、このディレクトリは、作業に基づいて注文後、作業ディレクトリのミラーリングを指定します
WORKDIR /usr/local 
WORKDIR tomcat 
RUN touch test.txt

/ usr / local / tomcatの中でtest.txtというファイルを作成します。

  • CMDの
    デフォルトのコマンドが実行されるときに、よりCMDコマンドよりも、最後を有効にする場合は、コンテナが開始され、
CMD ["mysqld"] 或CMD mysqld
  • ENTRYPOINT
    類似しており、使用のCMDが、docker run実装されたときに、CMDコマンドをカバーしますが、ENTRYPOINTしません
ENTRYPOINT ["docker-entrypoint.sh"]
ENTRYPOINT ["/bin/bash", "-C","/start.sh"]
  • EXPOSE
    ブートイメージがポート-pホストをマッピングするために使用することができたときにサービスポート宣言コンテナが実行
    EXPOSE 3306 3307

その他の操作は見ることができ新人のチュートリアルを


画像実際の記事

Dockerfileによって生成された画像

(1)IDEAでSpringbootプロジェクトを作成します

(2)のREST APIを作成します

@RestController
public class DemoController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }


}

Mavenのコマンドを使用して(3)mvn clean packageパッケージ化されたアプリケーションの
ターゲットディレクトリが生成されdemo-api-0.0.1-SNAPSHOT.jar

(4)は、前の章で作成した仮想マシンにディレクトリ・サーバーの作成Centos7 demo-dockerfileディレクトリを

  • 前の章は、パスワードを使用して作成されたevan123ログインサーバーCentos7へ
Connection to 192.168.100.9 closed.
192:centos7 evan$ ssh [email protected]
[email protected]'s password: 
Last login: Thu Jan 30 03:22:59 2020 from 192.168.100.7
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@10 ~]# 
  • フォルダを作成します。
[root@10 /]# mkdir /usr/local/demo-dockerfile

ホストマシンへ(4)バックは、アップロードdemo-api-0.0.1-SNAPSHOT.jarCentos7サーバへのdemo-dockerfileディレクトリが、私はsfptをアップロードするために他のツールを使用することができ、他の子供用の靴を使用してコマンドラインを使用します

192:centos7 evan$ scp Users/evan/development/repository/eshare-docker-in-action/demo-api/target/demo-api-0.0.1-SNAPSHOT.jar  [email protected]:/usr/local/demo-dockerfile 
[email protected]'s password: 
/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
Users/evan/development/repository/eshare-docker-in-action/demo-api/target/demo-api-0.0.1-SNAPSHOT.jar: No such file or directory
192:centos7 evan$ scp /Users/evan/development/repository/eshare-docker-in-action/demo-api/target/demo-api-0.0.1-SNAPSHOT.jar  [email protected]:/usr/local/demo-dockerfile 
[email protected]'s password: 
/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
demo-api-0.0.1-SNAPSHOT.jar                   100%   18MB 105.8MB/s   00:00    
192:centos7 evan$ 

仮想マシンへ(5)バック、作成したディレクトリを作成しDockerfile、ファイル

192:centos7 evan$ ssh [email protected]
[email protected]'s password: 
Last login: Thu Jan 30 03:25:43 2020 from 192.168.100.7
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@10 ~]# cd /usr/local/demo-dockerfile
[root@10 demo-dockerfile]# mkdir Dockerfile
[root@10 demo-dockerfile]# touch Dockerfile
[root@10 demo-dockerfile]# ls
Dockerfile  demo-api-0.0.1-SNAPSHOT.jar

(6)以下に充填しますDockerfile

FROM openjdk:8 
MAINTAINER evan 
LABEL name="demo-dockerfile" version="1.0"author="evan" COPY demo-api-0.0.1-SNAPSHOT.jar demo-api-image.jar CMD ["java","-jar","demo-api-image.jar"]

ノーがある場合(7)は、まず、ドッカーサービスを開始しました

[root@10 demo-dockerfile]# sudo systemctl start docker

基づくディレクトリ内(8)Dockerfile画像のビルドカスタム

コマンド:docker build -t demo-api-image .

結果は以下の通りであります:

[root@10 demo-dockerfile]# docker build -t demo-api-image .
Sending build context to Docker daemon  19.32MB
Step 1/5 : FROM openjdk:8
8: Pulling from library/openjdk
146bd6a88618: Already exists 
9935d0c62ace: Already exists 
db0efb86e806: Already exists 
e705a4c4fd31: Already exists 
3d3bf7f7e874: Already exists 
49371c5b9ff6: Already exists 
3f7eaaf7ad75: Already exists 
Digest: sha256:7b7408b997615b4d6aaf6c1f0de8a32182497250288ee0a27b4e98cf14a52fb3
Status: Downloaded newer image for openjdk:8
 ---> 8c6851b1fc09
Step 2/5 : MAINTAINER evan
 ---> Running in 8fb93afccef8
Removing intermediate container 8fb93afccef8
 ---> 1f516267494a
Step 3/5 : LABEL name="demo-dockerfile" version="1.0"author="evan"
 ---> Running in 12cf6c64acf8
Removing intermediate container 12cf6c64acf8
 ---> 5ab38f113669
Step 4/5 : COPY demo-api-0.0.1-SNAPSHOT.jar demo-api-image.jar
 ---> d752dc61c8a9
Step 5/5 : CMD ["java","-jar","demo-api-image.jar"]
 ---> Running in d8bb64f014ee
Removing intermediate container d8bb64f014ee
 ---> cd026463e853
Successfully built cd026463e853
Successfully tagged demo-api-image:latest

(9)当社のカスタムという名前のコンテナ船を開始した画像に基づいてdemo-api

docker run -d --name demo-api -p 8999:8080 demo-api-image

(10)ブートログコンテナを見ます

[root@10 demo-dockerfile]# docker logs demo-api

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-01-30 04:32:29.537  INFO 1 --- [           main] com.example.demo.api.DemoApiApplication  : Starting DemoApiApplication v0.0.1-SNAPSHOT on 4b90fdd0dd97 with PID 1 (/demo-api-image.jar started by root in /)
2020-01-30 04:32:29.540  INFO 1 --- [           main] com.example.demo.api.DemoApiApplication  : No active profile set, falling back to default profiles: default
2020-01-30 04:32:30.478  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-01-30 04:32:30.488  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-01-30 04:32:30.489  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-01-30 04:32:30.540  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-01-30 04:32:30.540  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 895 ms
2020-01-30 04:32:30.712  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-01-30 04:32:30.888  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-01-30 04:32:30.890  INFO 1 --- [           main] com.example.demo.api.DemoApiApplication  : Started DemoApiApplication in 1.756 seconds (JVM running for 2.25)

成功したデプロイメントAPIかどうかをテストするには、ホストマシン上のコンテナサービスに(11)アクセス、

[root@10 demo-dockerfile]# curl localhost:8999/hello
Hello

(12)複数の再起動テストコンテナ・インスタンス

[root@10 demo-dockerfile]# docker run -d --name demo-api02 -p 8998:8080 demo-api-image
3029d6b4325a6773ddcacca8d39917b1abfe12d6004cc8a765608f7f2d64edb3
[root@10 demo-dockerfile]# curl localhost:8998/hello
Hello

(12)子供用の靴のないアカウントはに事前に存在しない、ドッカー画像記憶を上陸させたhub.docker.comレジスタ

[root@10 demo-dockerfile]# 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: 10856214
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

ドッカーがドッカーIDを保持するリモートリポジトリ、同じイメージ名にミラー(13)プッシュカスタム

[root@10 demo-dockerfile]# docker tag demo-api-image 10856214/demo-api-image
[root@10 demo-dockerfile]# docker push 10856214/demo-api-image
The push refers to repository [docker.io/10856214/demo-api-image]
9fb0d7d193ef: Pushed 
a6ded049566a: Mounted from library/openjdk 
e7fe5541de5f: Mounted from library/openjdk 
03ff63c55220: Mounted from library/openjdk 
bee1e39d7c3a: Mounted from library/openjdk 
1f59a4b2e206: Mounted from library/openjdk 
0ca7f54856c0: Mounted from library/openjdk 
ebb9ae013834: Mounted from library/openjdk 
latest: digest: sha256:32afd9d8ca8205d6e667543a66163330c5067c5a37ebd80d53e9563b809e8bb4 size: 2007

(14)表示イメージはリモートリポジトリにプッシュ成功しています
ここに画像を挿入説明

(15)画像は、ローカルに、リモートリポジトリから引っ張っ

[root@10 demo-dockerfile]# docker pull 10856214/demo-api-image
Using default tag: latest
latest: Pulling from 10856214/demo-api-image
Digest: sha256:32afd9d8ca8205d6e667543a66163330c5067c5a37ebd80d53e9563b809e8bb4
Status: Image is up to date for 10856214/demo-api-image:latest
docker.io/10856214/demo-api-image:latest

(16)ベースのリモート10856214/demo-api-imageブート容器

[root@10 demo-dockerfile]# docker run -d --name demo-api03 -p 8997:8080 10856214/demo-api-image
f6907cc3f8b7c21e26111c748de23d923f96f5b2ffef54478ff49d8c03416651
[root@10 demo-dockerfile]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
f6907cc3f8b7        10856214/demo-api-image   "java -jar demo-api-…"   4 seconds ago       Up 3 seconds        0.0.0.0:8997->8080/tcp   demo-api03
3029d6b4325a        demo-api-image            "java -jar demo-api-…"   About an hour ago   Up About an hour    0.0.0.0:8998->8080/tcp   demo-api02
4b90fdd0dd97        demo-api-image            "java -jar demo-api-…"   About an hour ago   Up About an hour    0.0.0.0:8999->8080/tcp   demo-api
[root@10 demo-dockerfile]# 

ドッカーによって作成されたイメージをコミット

(1)容器の動作を確認

[root@10 demo-dockerfile]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
f6907cc3f8b7        10856214/demo-api-image   "java -jar demo-api-…"   2 hours ago         Up 2 hours          0.0.0.0:8997->8080/tcp   demo-api03
3029d6b4325a        demo-api-image            "java -jar demo-api-…"   3 hours ago         Up 3 hours          0.0.0.0:8998->8080/tcp   demo-api02
4b90fdd0dd97        demo-api-image            "java -jar demo-api-…"   3 hours ago         Up 3 hours          0.0.0.0:8999->8080/tcp   demo-api
[root@10 demo-dockerfile]# 

リモートリポジトリミラーリングからプルバック内部のカスタム私たちに(2)

[root@10 demo-dockerfile]# docker exec -it demo-api03 bash
root@f6907cc3f8b7:/# 

(3)YUMツールは、容器の内側に取​​り付けられ、容器デモapi03を変更

  • yumは、yumのLinuxオペレーティングシステムの基本的な命令のコンテナを維持するよう、工具を使わずにデフォルトのコマンドを実行してみます
root@f6907cc3f8b7:/# yum
bash: yum: command not found
root@f6907cc3f8b7:/# 
  • 容器内のオペレーティングシステムのバージョンをLinuxの表示
root@f6907cc3f8b7:/# cat /etc/issue
Debian GNU/Linux 9 \n \l

内蔵のDebianとオペレーティングシステム

  • apt-getの更新システム・コンポーネントを使用します
root@f6907cc3f8b7:/# apt-get update
Ign:1 http://deb.debian.org/debian stretch InRelease
Get:2 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Get:3 http://deb.debian.org/debian stretch-updates InRelease [91.0 kB]
Get:4 http://deb.debian.org/debian stretch Release [118 kB]              
Get:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [516 kB]
Get:6 http://deb.debian.org/debian stretch-updates/main amd64 Packages [27.9 kB]
Get:7 http://deb.debian.org/debian stretch Release.gpg [2365 B]               
Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [7086 kB]
Fetched 7936 kB in 1min 18s (101 kB/s)                                         
Reading package lists... Done
  • インストールの容器に頼らざるを内蔵し、オペレーティングシステムの必要性
apt-get install build-essential
  • yumのパッケージをダウンロードしてインストールします
apt-get install yum
  • テストyumインストールが成功したかどうか
root@f6907cc3f8b7:/# yum --help
Usage: yum [options] COMMAND

List of Commands:

check          Check for problems in the rpmdb
check-update   Check for available package updates
clean          Remove cached data
deplist        List a package's dependencies
...

(4)以上の工程を経て、我々は、コンテナの我々うちは、コンテナをという名前の新しい画像、現在のバージョンに基づいて作成され、コンテナを正常に変更されていますdemo-api-image-v1

[root@10 demo-dockerfile]# docker commit demo-api03 demo-api-image-v1
sha256:7887668690a3e53c27535669252f67b0391d54443776f1a431f91fe5800958be
[root@10 demo-dockerfile]# 

この時間のうち作成したイメージは、デフォルトがすでに運ぶあるyumコンポーネントを

(5)上記の新しく更新された画像に基づいてdemo-api-image-v1コンテナを作成します

[root@10 demo-dockerfile]# docker run -d -it --name demo-api-v1 demo-api-image-v1
6363450e8f7af1f53f935e345d50f7bbfd3ff82bb2409fd5fd75a0f253ed1de8

(6)入力するdemo-api-v2か、容器の存在を確認yumアセンブリ

[root@10 demo-dockerfile]# docker exec -it demo-api-v1 bash
root@6363450e8f7a:/# yum
You need to give some command
Usage: yum [options] COMMAND

List of Commands:

check          Check for problems in the rpmdb
check-update   Check for available package updates
clean          Remove cached data
deplist        List a package's dependencie
...

付録

画像の共通操作

  • ローカル画像の一覧を見ます docker images docker image ls
  • リモート・ミラーリングを取得 docker pull
  • ミラーを削除[あなたが使用している場合は、このイメージを注意、または関連する画像、あなたが最初に処理する必要がある]をdocker image rm imageid docker rmi -f imageid docker rmi -f $(docker image ls)すべてのミラーを削除するには
  • ランタイムイメージ docker run image
  • 公開されたミラー docker push

コンテナの一般的な操作

  • ミラーによるコンテナを作成します。 docker run -d --name -p 9090:8080 my-tomcat tomcat
  • コンテナの動作を確認 docker ps
  • [終了が含まれている]すべてのコンテナを参照してください。 docker ps -a
  • 削除コンテナdocker rm containerid docker rm -f $(docker ps -a)のすべてのコンテナを削除します
  • コンテナ内に docker exec -it container bash
  • 画像生成容器 docker commit demo-api03 demo-api-image-v1
  • コンテナのログを見ます docker logs container
  • ビューコンテナのリソース使用状況 docker stats
  • ビューコンテナの詳細情報 docker inspect container
  • ストップ/スタートコンテナ docker stop/start container

プロジェクトのデモのGithub

https://github.com/EvanLeung08/eshare-docker-in-action.git


詳細については、あなたは私の個人的なGitchat、交換に集中することができます
ここに画像を挿入説明

121元記事公開 ウォンの賞賛330 ビューに40万+を

おすすめ

転載: blog.csdn.net/Evan_Leung/article/details/104120058