docker学習ノート(六)Docer-CSompose紹介と応用
26230 ワード
docker学習ノート(五)Docer-Coompose
概要
Docer-composeは公式のオープンソースプロジェクトであり、Docer容器のクラスタ化の迅速な編成を実現することに責任を負う。
簡単な例を挙げると、私達はjava Webアプリケーション、依存する環境はjdk、データベース使用のmysql、キャッシュデータベース使用のredis、メッセージキューサーバはラビットmqを使っています。そしてABCの三つのアプリケーションに分けて実行します。つまり、Docer-composeを使って、これらの環境をカスタマイズして、Dockerに環境をインストールして、スタート順を整えて、依存しています。これからは、サービスを利用して移植する時に、繰り返し環境を構築しなくてもいいです。Docker環境をインストールすればいいです。
Composeには二つの重要な概念があります。サービス:一つのアプリケーションのコンテナは、実際にはいくつかの同じミラーを実行するコンテナの例を含むことができます。 プロジェクト:関連するアプリケーション・コンテナのセットからなる完全な業務ユニット、例えばABCの3つのアプリケーション・ワーク、運用環境redisのインスタンス、mqのインスタンス、mqのインスタンス、msqlの例を加えると、プロジェクトの完全な実行を構成し、完全な業務ユニットです。
composeのデフォルトの管理対象はプロジェクトであり、つまりプロジェクトの中の一つの容器に対して便利なライフサイクル管理を命令することによって、composeプロジェクトはPythonによって作成され、実際にDocerサービスが提供するAPIを呼び出して容器を管理するので、すべての操作のプラットフォームがDocerAPIをサポートする限り、Composeを利用して編成管理を行うことができます。
インストールコマンド
今はspringbootの応用があります。使う依存環境はredisがあります。私達が必要な環境はredis、java環境です。docker-composeを使ってjavaとredisの環境をパッケージ化してサービスの配置にします。
制御装置
redis.com
プロジェクトをdocker-composeフォルダにコピーしてapと名づけました。その中でDocerfileを作成します。
バージョン:
「3」は第三世代文法を使って、docker-composeを構築してサービスファイルを編成することを表します。
services:
次のサービスは実行中のコンテナです。
アプリ:
サービス名は、私たち自身のサービスによってカスタマイズされます。
イメージ:
私たちの容器を動かす時にどのイメージから起動するかを指定します。
build
構築されたミラーを代表するDocerfileのディレクトリは、buildとimageがdocker-compseファイルの同じサービスの中で一つを定義しなければなりません。
ポーツ:
ポート番号構成9070はシンクホストのポートを表し、9018はコンテナ内部のポートを表し、コンテナ内部のポートはスプリングブック内部に配置されたポートに対応する必要がある。
environment:
容器運転時の環境設定は、「SPRING_」です。PROFILES_ACTIVE=devは、springbootアプリケーションを起動する際に指定されたプロファイルを表し、-TZ=Asia/Shanghaiに容器を配置するタイムゾーンを表し、容器内時間とホスト時間が同期しないようにする
working_dir:
容器内のアプリケーションを表すワークディレクトリ
volumes:
容器内部のディレクトリはマウントされています。例えば-./app./appはホストディレクトリを表しています。/appはコンテナ内のディレクトリを表しています。
ディペンズ.オン:
サービスに依存しています。このラベルは以下のサービスに依存するという意味です。
リタータ:
always代表は、サービスが起動できないとずっと試しています。
container_name:
容器の名前を指定します。この設定がないと、composeに容器名がデフォルトで割り当てられます。
command:
このコマンドでこのサービスを開始することを表します。
links:
コンテナのリンクは、docker-composeのそれぞれのサービスはコンテナであり、容器の環境は隔離されており、容器の相互依存は通信が必要であり、linksは2つの容器間の通信を維持するためであり、また、容器内にはcomposeを通じてlinksを配置し、容器内にサービス名+ポートを使用して他の容器にアクセスすることができる。
Docer-compose命令詳細
Docker Compse+Spring Boot+Ngix+Mysql実践
概要
Docer-composeは公式のオープンソースプロジェクトであり、Docer容器のクラスタ化の迅速な編成を実現することに責任を負う。
簡単な例を挙げると、私達はjava Webアプリケーション、依存する環境はjdk、データベース使用のmysql、キャッシュデータベース使用のredis、メッセージキューサーバはラビットmqを使っています。そしてABCの三つのアプリケーションに分けて実行します。つまり、Docer-composeを使って、これらの環境をカスタマイズして、Dockerに環境をインストールして、スタート順を整えて、依存しています。これからは、サービスを利用して移植する時に、繰り返し環境を構築しなくてもいいです。Docker環境をインストールすればいいです。
Composeには二つの重要な概念があります。
composeのデフォルトの管理対象はプロジェクトであり、つまりプロジェクトの中の一つの容器に対して便利なライフサイクル管理を命令することによって、composeプロジェクトはPythonによって作成され、実際にDocerサービスが提供するAPIを呼び出して容器を管理するので、すべての操作のプラットフォームがDocerAPIをサポートする限り、Composeを利用して編成管理を行うことができます。
インストールコマンド
#
sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#
chmod +x /usr/local/bin/docker-compose
#
docker-compose version
#
mrwhite@mrwhite-PC:~$ docker-compose version
docker-compose version 1.20.0, build ca8d3c6
docker-py version: 3.1.3
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
bash補完コマンドcurl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
は、バイナリパッケージ方式でインストールされている場合、バイナリファイルを削除すればいいです。sudo rm /usr/local/bin/docker-compose
Docer-Composeを使ってspringbootアプリケーションを展開します。今はspringbootの応用があります。使う依存環境はredisがあります。私達が必要な環境はredis、java環境です。docker-composeを使ってjavaとredisの環境をパッケージ化してサービスの配置にします。
制御装置
/**
* Docker-Compose
*
* @author baijie
* @date 2019-08-23
*/
@RestController
public class ComposeController {
@Autowired
private RedisTemplate<String,String> redisTemplate;
String KEY = "INCR_KEY" ;
@GetMapping("/get/incr")
public String getIncr(){
String s = redisTemplate.opsForValue().get(KEY);
if(StringUtils.isEmpty(s)){
redisTemplate.opsForValue().set(KEY,"1");
return "1";
}else {
Long increment = redisTemplate.opsForValue().increment(KEY);
return increment.toString();
}
}
}
appication.ymlserver:
port: 9070
spring:
redis:
host: redis_cache
port: 6379
timeout: 60s
database: 0
lettuce:
pool:
max-active: 200
max-idle: 20
min-idle: 5
max-wait: -1
pom redis依存 <dependency>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
<exclusions>
<exclusion>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
exclusion>
<exclusion>
<groupId>io.lettucegroupId>
<artifactId>lettuce-coreartifactId>
exclusion>
exclusions>
dependency>
maven Docerプラグイン <build>
<finalName>docker-springbootfinalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.0.0version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}imageName>
<imageTags>
<imageTag>v1imageTag>
imageTags>
<dockerDirectory>src/main/dockerdockerDirectory>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
plugins>
build>
springboot Docerfile配置FROM maven:3.5-jdk-8
redis.co nfの配置を準備します。redis.com
appendonly yes
daemonize no
フォルダを作成して起動します。cd ~
mkdir docker-compose
cd docker-compose
Docer-composeファイルを作成するversion: "3"
services:
app:
build: ./app
ports:
- 9070:9018
environment:
- TZ=Asia/Shanghai
depends_on:
- redis_cache
working_dir: /app
volumes:
- /etc/localtime:/etc/localtime:ro
- ./app:/app
links:
- redis_cache
command: mvn clean spring-boot:run
redis_cache:
restart: always
ports:
- 6379:6379
image: redis
container_name: redis_cache
command: redis-server /usr/local/etc/redis/redis.conf
volumes:
- ./redis_data/:/data/
- ./redis.conf:/usr/local/etc/redis/redis.conf
プロジェクトディレクトリ構造を変更プロジェクトをdocker-composeフォルダにコピーしてapと名づけました。その中でDocerfileを作成します。
FROM maven:3.5-jdk-8
Docer-composeを起動します。#
docker-compose pull
プロジェクトを開始docker-compose up -d
Docer-compose配置説明バージョン:
「3」は第三世代文法を使って、docker-composeを構築してサービスファイルを編成することを表します。
services:
次のサービスは実行中のコンテナです。
アプリ:
サービス名は、私たち自身のサービスによってカスタマイズされます。
イメージ:
私たちの容器を動かす時にどのイメージから起動するかを指定します。
build
構築されたミラーを代表するDocerfileのディレクトリは、buildとimageがdocker-compseファイルの同じサービスの中で一つを定義しなければなりません。
ポーツ:
ポート番号構成9070はシンクホストのポートを表し、9018はコンテナ内部のポートを表し、コンテナ内部のポートはスプリングブック内部に配置されたポートに対応する必要がある。
environment:
容器運転時の環境設定は、「SPRING_」です。PROFILES_ACTIVE=devは、springbootアプリケーションを起動する際に指定されたプロファイルを表し、-TZ=Asia/Shanghaiに容器を配置するタイムゾーンを表し、容器内時間とホスト時間が同期しないようにする
working_dir:
容器内のアプリケーションを表すワークディレクトリ
volumes:
容器内部のディレクトリはマウントされています。例えば-./app./appはホストディレクトリを表しています。/appはコンテナ内のディレクトリを表しています。
ディペンズ.オン:
サービスに依存しています。このラベルは以下のサービスに依存するという意味です。
リタータ:
always代表は、サービスが起動できないとずっと試しています。
container_name:
容器の名前を指定します。この設定がないと、composeに容器名がデフォルトで割り当てられます。
command:
このコマンドでこのサービスを開始することを表します。
links:
コンテナのリンクは、docker-composeのそれぞれのサービスはコンテナであり、容器の環境は隔離されており、容器の相互依存は通信が必要であり、linksは2つの容器間の通信を維持するためであり、また、容器内にはcomposeを通じてlinksを配置し、容器内にサービス名+ポートを使用して他の容器にアクセスすることができる。
Docer-compose命令詳細
#
docker-compose -h
# -f Compose , docker-compose.yml, 。
docker-compose -f docker-compose.yml up -d
# ,-d
docker-compose up -d
#
docker-compose down
#
docker-compose logs
#
docker-compose ps
# ( ) 。 , , web db , web_db。 docker-compose build
docker-compose build
#
docker-compose pull
#
docker-compose restart
# ( ) 。 docker-compose stop 。
docker-compose rm
# 。
docker-compose run ubuntu ping docker.com
# 。 service=num
docker-compose scale web=3 db=2
# 。
docker-compose start
# , 。 docker-compose start 。
docker-compose stop
参照Docker Compse+Spring Boot+Ngix+Mysql実践