技術ドッカーコンテナ(下)
A、Dockerfile基本的なコマンド
1.1.FROM - 参照ミラーに基づきます
- CentOSの#メイク参照画像から(CentOSのに基づいて)
最初から#は任意の参照ミラーベースの画像に依存しません
- TomcatのFROM:9.022-jdk8、OpenJDKの
公式のベースイメージを使用してみてください
1.2.LABEL&MAINTAINER - 記述情報
- MAINTAINER xxx.com
- LABELバージョン= "1.0"
- LABELの説明=「xxxはどのような役割」
1.3.WORKDIR - 作業ディレクトリを設定します
- WORKDIRは/ usr / local
- WORKDIRは/ usr / local / newdirが#が自動的に作成します
- 絶対パスを使用してみてください
1.4.ADD&COPY - ファイルをコピーします
- ルートパスにコピーされたハローADD / #fを
- ADDのtest.tar.gz /#rootディレクトリやエキスを追加
- wgetのと同様のコピーに加えてADD、だけでなく、リモートファイルの追加機能を持って、+のウェブサイト、
1.5.ENV - 一定の環境を設定します
- ENV JAVA_HOMEを/ usr / local / openjdk8
- RUN $ {JAVA_HOME} / binに/ javaの-jar test.jar
- 保守手順を向上させることができ、環境定数を使用してみてください
二、Dockerfile実行命令
RUN&CMD&ENTRYPOINT
- RUN:シェルの実装の同等の実装にビルドにビルド
- ENTRYPOINT:コンテナの実装を開始
- CMD:CMDは、コンテナが[「PS」、「EF」]を開始した後に実行幹部の実装に相当します
実装
RUN yum install -y vim #shell命令格式
RUN ["yum","install","-y","vim"] #Exec命令格式
なぜ我々はそれを実行するには、2つの異なる方法を提供する必要がありますか?
- シェルの実行
使用するシェルは、現在のシェルは親プロセスで、実行子プロセスを生成します
サブシェルスクリプトで実行されるスクリプトは、現在のシェルに戻って、サブシェルを終了し、終了します
- execの実行
現在のプロセスの実行
リアル
FROM centos
RUN ["echo","image building!!!"]//执行在子进程了
CMD ["echo","container starting..."]//只有这句能看到的
注:増加し、CMDコマンドを交換する場合はCMD、CMDコマンドが実行されないことがあり
ENTRYPOINTが実行されます
第三に、Redisの構成された画像
- Redisのは、NoSQLのデータベースです
- 2010年3月15日スタート、Redisの開発は、VMWareの議長を務めます
ライティングDockerfile
FROM centos
RUN ["yum","install","-y","gcc","gcc-c++","net-tools","make"]
WORKDIR /usr/local
ADD redis-4.0.14.tar.gz . //会自动解压
WORKDIR /usr/local/redis-4.0.14/src
RUN make && make install
WORKDIR /usr/local/redis-4.0.14
ADD redis-7000.conf .
EXPOSE 7000 //暴露7000端口
CMD ["redis-server","redis-7000.conf"]
ライン上でミラーリングされた建物を実行した後
docker build -t xxx/docker-redis:1.0 .
docker run -p 7000:7000 xxx/docker-redis:1.0
、ちょうど書き込み、実用的な作業についてはこちらをDockerfile Redisの直接使用することができミラーリング
第四に、コンテナのリンク間の片方向通信
- コンテナが作成された後、仮想IPがあります
コンテナウェイアクセス
原理:仮想IP、コンテナは通信しますが、我々は、メッセージングのための容器の使用をIP通信を使用していません
私たちは、名前を指定するために使用--name
docker run -d --name web tomcat
docker run -d --name database -it centos /bin/bash
仮想IPを見ます
docker inspect [containerID]
私たちは、PINGを使用します
ping 172.17.0.3 是可以ping通的
但是我们ping名称是ping不通的
私たちは二Tomcatを作成するように、データベースにリンクされているとき
docker run --name web --link database tomcat
この我々はTomcatを入力して、時間、およびその後のping、できる自然ユニコム
ping database 可以自动ping通
五、双方向通信に基づく橋橋
橋双方向通信理論
実行します。バインドとデータベースのTomcat
docker run -d --name web tomcat
docker run -d --name database centos /bin/bash
docker network ls
docker network create -d bridge my-bridge
docker network connect my-bridge web
docker network connect my-bridge database
6月と共有データコンテナボリューム
未使用のボリューム・コンテナ
ボリュームコンテナ原理
方法:
1.ホストディレクトリを提供することにより-vマウント
- フォーマット:
- ドッキングウィンドウの実行--nameコンテナ-vホスト名パス:容器内のパスは、ミラー名をマウント
- 例:
- ドッキングウィンドウの実行--name T1 -vは/ usr / webappsに:は/ usr / local / tomcatに/ webappsにtomcatに
2.によって共有コンテナ
- フォーマット:
- ドッキングウィンドウ作成--name Webページ-v / webappsに:真/ tomcatに/ webappsにtomcatに/ binに/
- シェア容器は、マウントポイント
- ドッキングウィンドウの実行--volumes-からWebページ--name T1 -dのTomcat
七、ドッカー作曲
我々はドッカーコンから出てきたように、マルチ容器の展開は、多くの問題が発生します
ケース
- ドッカー作曲単一のマルチコンテナの配備ツール
- YMLファイルを定義することで、マルチ船を展開する方法
- WIN / MACがデフォルトドッカー作曲で提供、Linuxがインストールする必要があります
インストール手順:
1.は、自動的にインストール取得します
pip install -U docker-compose==1.23.2
許可を実行2.
sudo chmod +x /usr/local/bin/docker-compose
ワードプレスをインストールします。
ディレクトリのワードプレスを作成します。1.
mkdir wordpress
2.vimドッキングウィンドウ-compose.yml
复制官网上的
プロジェクトを3.build
docker-compose up -d
八、Docker-compose应用实战
案例、两个SpringBoot项目构建docker-compose
SpringBoot打包
文件 applicaion-dev.yml application.yml bsbdj.jar
vim Dockerfile
FROM openjdk:8u222-jre
WORKDIR /usr/local/bsbdj //上述肯定没有这个目录,所以会创建
ADD bdbdj.jar //加入jar
ADD application.yml .
ADD application-dev.yml .
EXPOSE 80 //暴露端口80
CMD ["java","-jar","bsbdj.jar"]
docker build -t msb.com/bsbdj-app .
docker run msb.com/bsbdj-app
数据库打包
vim Dockerfile
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ADD init-db.sql .
docker build -t msb.com/bsbdj-db .
docker run -e -d MYSQL_ROOT_PASSWORD=root msb.com/bsbdj-db
docker exec -it aae73fa77d75 /bin/bash
Docker-Compose进行关联和发布
vim docker-compose.yml
version: '3.3'
services:
db:
build: ./bsbdj-db/
restart: always //容错,自动重启
environment:
MYSQL_ROOT_PASSWORD: root
app:
build: ./bsbdj-app/
depends_on:
- db
ports:
- "80:80"
restart: always
docker-compose up
docker-compose up -d
docker-compose logs
docker-compose down
我们连接数据库,那么yml中jdbc:mysql://db:3306/xxx即可