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を利用して編成管理を行うことができます。
    インストールコマンド
    #  
    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.yml
    server:
      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実践