docker compose項目

本文參考:html

http://www.javashuo.com/article/p-xiaankol-bc.htmljava

http://www.javashuo.com/article/p-ndugjgzr-ba.htmlmysql

 

1.Dockerfile 可讓用戶管理一個單獨的應用容器;而 Compose 則容許用戶在一個模板(YAML 格式)中定義一組相關聯的應用容器(被稱爲一個 project,即項目),例如一個 Web 服務容器再加上後端的數據庫服務容器等。git

2.Docker-Compose 是 Docker 的一種編排服務,是一個用於在 Docker 上定義並運行復雜應用的工具,可讓用戶在集羣中部署分佈式應用。github

3.經過 Docker-Compose 用戶能夠很容易地用一個配置文件定義一個多容器的應用,而後使用一條指令安裝這個應用的全部依賴,完成構建。Docker-Compose 解決了容器與容器之間如何管理編排的問題web

4.docker compose中的兩個重要概念sql

服務 (service) :一個應用的容器,實際上能夠包括若干運行相同鏡像的容器實例docker

項目 (project) :由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 文件中定義。數據庫

 

 

Docker Compose 安裝

1.apache

curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
注意版本爲1.5.2,最新版本在CentOS6.8上運行回報以下錯誤
docker-compose: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by /tmp/_MEIXH1zkM/libz.so.1)
因此不要安裝最新版本

2.

chmod +x /usr/local/bin/docker-compose

3. docker-compose version

 

////////////////////////////////////////////////////////////////////////////////////////////////////////

docker-compose 經常使用指令:且執行下述docker-compose 指令的時候,也要在有docker-compose.yml的地方執行

docker-compose [命令] -help查看某個命令的幫助(神器,授人以魚不如授人以漁)。

docker-compose config:驗證 Compose 文件(docker-compose.yml)格式是否正確,若正確則顯示配置。若格式錯誤則顯示緣由。

docker-compose up:嘗試自動完成包括構建鏡像,(從新)建立服務,啓動服務,並關聯服務相關容器的一系列操做。

-d 在後臺運行服務容器。
--no-color 不使用顏色來區分不一樣的服務的控制檯輸出。
--no-deps 不啓動服務所連接的容器。
--force-recreate 強制從新建立容器,不能與 --no-recreate 同時使用。
--no-recreate 若是容器已經存在了,則不從新建立,不能與 --force-recreate 同時使用。
--no-build 不自動構建缺失的服務鏡像。
-t, --timeout TIMEOUT 中止容器時候的超時(默認爲 10 秒)。

docker-compose down:此命令會中止 up 命令所啓動的容器,並移除網絡。

docker-compose images :列出 Compose 文件中包含的鏡像。

docker-compose ps:列出項目中目前的全部容器。

docker-compose ps --service:列出項目中目前的全部服務(重要,不少命令都是基於服務來操做的)。

docker-compose logs [options] [SERVICE...]:查看服務容器的日誌輸出。

docker-compose exec [SERVICE] bash : 進入指定的容器。

docker-compose stop [options] [SERVICE...] :中止已經處於運行中的容器,但不刪除它。

docker-compose kill -s SIGINT [SERVICE...] :經過發送 SIGINT 信號來強制中止服務容器(相似於stop)

docker-compose start [SERVICE...] :啓動已經存在的服務容器。

docker-compose restart [options] [SERVICE...]:重啓項目中的服務

docker-compose rm [options] [SERVICE...]:刪除全部(中止狀態的)服務容器,-f 強制刪除,包括非中止狀態 -v 刪除容器所掛載的數據卷。

docker-compose pause [SERVICE...]:暫停一個服務容器。

docker-compose unpause [SERVICE...]:恢復處於暫停狀態中的服務。

docker-compose scale [options] [SERVICE=NUM...]:設置指定服務運行的容器個數。(神器,照這樣豈不是很簡單就實現了分佈式?)

docker-compose top:查看各個容器內運行的進程


docker-compose操做實踐部分:(Docker部署web應用,docker-compose編排一個tomcat,一個mysql)
1.首先要新建並編寫docker-compose.yml
version: "2.2"
services:
  db:
    image: mysql:5.6
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES utf8mb4;'
    ports:
     - "3306:3306"
    volumes:
     - /var/mysqldb:/var/lib/mysql
     - /docker/mysql/my.cnf:/etc/mysql/conf.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
  web:
    build: .
    #dockerfile: Dockerfile
    ports:
     - "8080:8080"
    depends_on:
     - db
    restart: always
    environment:
      mysql.address: db:3306
 
對於docker-compose.yml文件

這裏須要注意的是:

1.冒號後面必須加空格
2. version 後面用雙引號 2.2

2.上述設計的Dockfile文件的編寫:
 
FROM openjdk:8-jdk

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR

# see https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
# see also "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23

ENV TOMCAT_MAJOR 7
ENV TOMCAT_VERSION 7.0.94
ENV TOMCAT_SHA512 b16f4b08591199e15f953c34965389a80d5597c28626a51c71ce42695ddd3359dc4df7f333ef0e1a1e8f9b2b6245041d57607c46764f33e560246c119cdc0f7a

ENV TOMCAT_TGZ_URLS \
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
# if the version is outdated, we might have to pull from the dist/archive :/
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

ENV TOMCAT_ASC_URLS \
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
# not all the mirrors actually carry the .asc files :'(
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc

RUN set -eux; \
    \
    savedAptMark="$(apt-mark showmanual)"; \
    apt-get update; \
    \
    apt-get install -y --no-install-recommends gnupg dirmngr; \
    \
    export GNUPGHOME="$(mktemp -d)"; \
    for key in $GPG_KEYS; do \
        gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
    done; \
    \
    apt-get install -y --no-install-recommends wget ca-certificates; \
    \
    success=; \
    for url in $TOMCAT_TGZ_URLS; do \
        if wget -O tomcat.tar.gz "$url"; then \
            success=1; \
            break; \
        fi; \
    done; \
    [ -n "$success" ]; \
    \
    echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum --strict --check -; \
    \
    success=; \
    for url in $TOMCAT_ASC_URLS; do \
        if wget -O tomcat.tar.gz.asc "$url"; then \
            success=1; \
            break; \
        fi; \
    done; \
    [ -n "$success" ]; \
    \
    gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz; \
    tar -xvf tomcat.tar.gz --strip-components=1; \
    rm bin/*.bat; \
    rm tomcat.tar.gz*; \
    command -v gpgconf && gpgconf --kill all || :; \
    rm -rf "$GNUPGHOME"; \
    \
    nativeBuildDir="$(mktemp -d)"; \
    tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1; \
    apt-get install -y --no-install-recommends \
        dpkg-dev \
        gcc \
        libapr1-dev \
        libssl-dev \
        make \
    ; \
    ( \
        export CATALINA_HOME="$PWD"; \
        cd "$nativeBuildDir/native"; \
        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
        aprConfig="$(which apr-1-config)"; \
        ./configure \
            --build="$gnuArch" \
            --libdir="$TOMCAT_NATIVE_LIBDIR" \
            --prefix="$CATALINA_HOME" \
            --with-apr="$aprConfig" \
            --with-java-home="$JAVA_HOME" \
            --with-ssl=yes; \
        make -j "$(nproc)"; \
        make install; \
    ); \
    rm -rf "$nativeBuildDir"; \
    rm bin/tomcat-native.tar.gz; \
    \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
    apt-mark auto '.*' > /dev/null; \
    [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
    find "$TOMCAT_NATIVE_LIBDIR" -type f -executable -exec ldd '{}' ';' \
        | awk '/=>/ { print $(NF-1) }' \
        | sort -u \
        | xargs -r dpkg-query --search \
        | cut -d: -f1 \
        | sort -u \
        | xargs -r apt-mark manual \
    ; \
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
    rm -rf /var/lib/apt/lists/*; \
    \
# sh removes env vars it doesn't support (ones with periods)
# https://github.com/docker-library/tomcat/issues/77
    find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +; \
    \
# fix permissions (especially for running as non-root)
# https://github.com/docker-library/tomcat/issues/35
    chmod -R +rX .; \
    chmod 777 logs work

# verify Tomcat Native is working properly
RUN set -e \
    && nativeLines="$(catalina.sh configtest 2>&1)" \
    && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
    && nativeLines="$(echo "$nativeLines" | sort -u)" \
    && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
        echo >&2 "$nativeLines"; \
        exit 1; \
    fi

EXPOSE 8080
COPY ies.war /usr/local/tomcat/webapps/
CMD ["catalina.sh","run"]

這裏 ies.war包和Dockfile,以及docker-compose.yml,要在同一個文件夾裏,並且執行上述docker-compose 指令的時候,也要在有docker-compose.yml的地方執行

須要指出的是ies.war包中的數據庫配置信息,使用的是docker-compose.yml配置文件中的環境變量

3. 上述都弄好以後:執行  docker-compose up -d

就能夠了

4.可是這樣執行,通常數據庫是沒有新建ies 這個database的,也就是mysql容器先起來了,可是沒database,沒表,因此web(tomcat)起的時候會報錯
可是執行docker-compose ps --service的時候還能看到web(也就是tomcat)因此,先停掉web這個service,docker-compose stop web
而後遠程鏈接數據庫,在數據庫中新建ies 這個database,而後倒入sql文件

而後再重啓 docker-compose restart web
這樣就算完成了
相關文章
相關標籤/搜索