1. 程式人生 > >docker compose安裝與常用命令介紹 及使用docker-compose執行一個進銷存管理系統

docker compose安裝與常用命令介紹 及使用docker-compose執行一個進銷存管理系統

使用微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個例項。如果每個微服務都要手動啟停,那麼效率之低,維護量之大可想而知

docker compose 是一個用於定義和執行多容器docker應用程式的工具

 

安裝:

下在並安裝適應系統版本的compose

curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

為安裝指令碼新增執行許可權

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

這樣,compose就安裝完成了

可使用一下命令測試安裝結果

docker-compose --version

 

 

使用compose 大致有三個步驟

使用 dockerfile 定義應用程式環境,以便在任何地方重現該環境

在docker-compose.yml檔案中定義組成應用程式的服務,以便各個服務在一個隔離的環境中一起執行

執行 docker-compose up 命令,啟動並執行整個應用程式

 

 

docker compose 將所管理的容器分為三層,分別是工程(project),服務以及容器。docker compose執行目錄下的所有檔案(docker-compose.yml,extends檔案或環境變數檔案等)組成一個

工程(預設為docker-compose.yml所在目錄的名稱)。一個工程可包含多個服務,每個服務中定義了容器執行的映象,引數和依賴,一個服務可包括多個容器例項

 

 

docker-compose.yml 常用命令

build

配置構建時的選項,compose會利用它自動構建映象。build的值可以是一個路徑。例如 build: ./dir

也可以是一個物件,用於指定dockerfile和引數,例如:

build:

  context: ./dir 

  dockerfile: Dockerfile-alternate 

  args:

    buildno: 1

context 為路徑

dockerfile 為需要替換預設docker-compose的檔名

args 為構建(build)過程中的環境變數,用於替換dockerfile裡定義的ARG引數,容器中不可用

例如

dockfile中

ARG buildno 

ARG password 

RUN echo "Build number: $buildno" 

RUN script-requiring-password.sh "$password"

docker-compose.yml

build:
  context: .
  args:
    - buildno=1
    - password=secret

 

 

command

覆蓋容器啟動後預設執行的命令

示例: command: bundle exec thin -p 3000

也可以是一個list,類似於dockerfile中的CMD指令 格式如下:

command:[bundle,exec,thin,-p,3000]

 

dns

配置dns 伺服器. 可以是一個值, 也可以是一個列表. 示例:

dns: 8.8.8.8

dns:

- 8.8.8.8

- 9.9.9.9

 

 

dns_search

配置DNS的搜尋域,可以是一個值,也可以是一個列表。示例:

dns_search:example.com

dns_search:

- dc1.example.com

- dc2.example.com

 

 

environment

環境變數設定,可使用陣列或字典兩種方式

environment:

RACK_ENV: development

SHOW: 'true'

environment:

- RACK_ENV=development

- SHOW=true

 

 

 

env_file

從檔案中獲取環境變數,可指定一個檔案路徑或路徑列表。如果通過docker-compose -f FILE 指定了compose檔案,那麼env_file中的路徑是compose檔案所在目錄的

相對路徑。使用environment指定的環境變數會覆蓋env_file指定的環境變數。

示例:

env_file: .env

env_file:

- ./common.env

- ./apps/web.env

- /opt/secrets.env

 

expose

expose 提供 container之間的埠訪問,不會暴露給主機使用。同 docker run --expose

示例:

expose: - "3000" - "8000"

 

 

external_links

連線到docker-compose.yml外部的容器,甚至並非compose管理的容器,特別是提供共享或公共服務的容器。格式跟links類似

例如:

external_links:

- redis_1

- project_db_1:mysql

- project_db_1:postgresql

 

 

image

指定映象名稱或映象ID,如果本地不存在該映象,compose會嘗試下載該映象

示例:

image: java

 

 

links

連線到其他服務的容器。可以指定服務名稱和服務別名(SERVICE:ALIAS),也可只指定服務名稱,同docker run --link

示例:

web:

links:

- db

- db:database

- redis

 

 

ports

暴露埠資訊,可使用HOST:CONTAINER的格式,也可只指定容器埠(此時宿主機將會隨機選擇埠),類似於docker run -p

需要注意的是,當使用HOST:CONTAINER格式對映埠時,容器埠小於60將會得到錯誤的介面,因為yaml會把xx:yy的數字解析為60進位制。因此,建議使用字串的形式。

例子:

ports:

- "3000"

- "3000-3005"

- "8000:8000"

- "9090-9091:8080-8081"

- "49100:22"

- "127.0.0.1:8001:8001"

 

 

volumes:

掛載資料卷。同docker run -v

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

 

volumes_from

從另一個服務或容器掛載卷。可指定只讀(ro)或讀寫(rw),預設是讀寫(rw)。同docker run --volumes-from

例子

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name
 - container:container_name:rw

 

container:container_name 格式僅支援 version2

 

 

depends_on

用於指定服務依賴,一般是mysql,redis等

指定了依賴,將會優先於服務建立並啟動依賴

link2 也可以指定依賴

 

 

docker-compose命令常用選項

 

和docker命令一樣,docker-compose命令也有很多選項

build

構建或重新構建服務。服務被構建後將會以project_service的形式標記,例如:compose-setest_db

 

help

檢視指定命令的幫助文件

docker-compose help COMMAND

如 docker-compose help build

 

kill

通過傳送SIGKILL訊號停止指定服務的容器

例如:docker-compose kill eureka

 

logs

檢視服務的日誌輸出

 

port

列印繫結的公共埠

例如 docker-compose port eureka 8761

這樣就可輸出eureka服務8761埠所繫結的公共埠

 

ps

列出所有容器。示例:

docker-compose ps

也可列出指定服務的容器,示例:

docker-compose ps eureka

 

pull

下載服務映象

 

rm

刪除指定服務的容器

如 docker-compose rm eureka

 

run

在一個服務上執行一個命令

docker-compose run web bash

這樣即可啟動一個web服務,同時執行bash命令

 

scale

設定指定服務執行容器的個數,以service=num 的形式指定

docker-compose scale user=3 movie=3

 

start

啟動指定服務已存在的容器

docker-compose start eureka

 

stop

停止已執行的容器

docker-compose stop eureka

停止後,可使用docker-compose start再次啟動這些容器

 

up

構建,建立,重新建立,啟動,連線服務的相關容器。所有連線的服務都會啟動,除非它們已經執行

docker-compose up 命令會聚合所有容器的輸出,當命令退出時,所有容器都會停止。使用docker-compose up -d可在後臺啟動並執行所有容器

 

 

下面,編寫一個簡單的例子

專案地址 https://gitee.com/shenduedu/JXC.git

 

準備環境:

現在下載 mysql:5.5 映象

新建一個目錄

把 專案 pull 下來,然後用maven 打包,把tag 下的war包複製到 新建的目錄下

然後 在該目錄下編寫dockerfile 檔案

然後 使用 dockerfile 構建我的 JXC專案


FROM java:8
VOLUME /tmp
ADD JXC-0.0.1-SNAPSHOT.war /app.war
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.war"]

編寫完 dockerfile 執行 docker build -t jxc:0.0.2 .

 

 

然後 在該目錄下 docker-compose.yml


version: '2'
services:
mysql:
image: docker.io/mysql:5.5
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=db_jxc2
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
jxc:
image: jxc:0.0.2
links:
- mysql
ports:
- "8080:80"

然後執行 docker-compose up

 

 

 

注意: 要正常 執行

1 要把專案下的sql 指令碼 匯入,mysql 映射了3306埠,普通的 mysql 客戶端可以連線,

 

 

鳴謝地址

http://www.cnblogs.com/52fhy/p/5991344.html

springcloud 與 docker 微服務實戰一書