docker-compose 簡介以及經常使用命令

什麼是docker-compose?

    在 docker - 部署一個複雜的springboot服務 該文中,咱們部署了一個「複雜」的springboot服務,實現了一個計數服務。經過此次部署操做,咱們瞭解到部署多容器的APP至少須要通過如下幾個步驟:redis

(1)寫Dockerfile構建鏡像或者從docker registry中拉取鏡像spring

(2)構建多個容器docker

(3)管理這些容器(啓動、中止等)springboot

可見,若是APP涉及到的容器不少,要管理這些容器是比較複雜的,至少命令行敲到想哭。那麼,有沒有一個工具,幫咱們批處理這些容器呢?bash

docker-compose是docker公司推出的一個服務編排工具,換句話說就是一個批處理容器的工具。該工具能夠經過yml文件定義多容器的應用,並建立和管理這些容器。網絡

安裝docker-compose

在文章 安裝 docker-compose 中,已經詳細介紹了compose的幾種安裝方法,能夠參考安裝。app

docker-compose.yml

    docker-compose.yml是compose的默認的腳本名字,在執行compose命令構建的時候,若是不指定文件名,將會默認使用docker-compose.yml文件,和Dockerfile文件相似。socket

    docker-compose.yml是有版本的,如今最新版本是v3版本,v1版本不推薦使用,v2和v3是可兼容的,並且區別不是很大。這裏須要提到一點區別,v2只能用於多個容器部署在一個宿主主機,而v3能夠集羣方式部署在多個宿主主機(swarm)。另外,不一樣的compose文件版本對docker的版本是有要求的。若是有興趣,能夠在docker的官網中詳細瞭解,版本間的區別連接的地址。咱們採用官方推薦的v3版本學習docker-compose。tcp

 

    在compose中,主要有四個基本節點: version、services、networks、volumes。是否是很熟悉,其實compose就是使用腳本方式代替咱們以前經過命令行啓動每一個服務。下面是一個基本的compose腳本。工具

version: '3'

services:
  springboot-docker:
    image: myimage:1.0
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    networks: 
      - mybridge
    volumes:
      - mydata:/app

networks: 
  mybridge: 
    driver: bridge

volumes:
  mydata:

    本文將經過一個簡單的 docker-compose 文件,熟悉經常使用的docker-compose命令。docker-compose.yml文件存放在dockercompose文件夾中

version: '3'

services:

  busybox:
    image: busybox
    restart: always
    command: /bin/echo
  redis:
    image: redis:4.0.11
    ports:
      - 6379:6379
    volumes:
      - /data/redis:/data
    restart: always
    command: redis-server

咱們查看 docker-compose 有多少種命令,有個大概的瞭解。docker-compose命令便可查看。

[root@localhost dockercompose]# docker-compose
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert deploy
                              keys in v3 files to their non-Swarm equivalent

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

這裏的選項中有兩個是經常使用的:-f 和 -p

-f :指定文件。在運行up命令啓動容器時,若是沒有指定docker-compose.yml文件,將會讀取當前目錄下的docker-compose.yml文件

-p:啓動後的服務的名字默認狀況下采用compose.yml文件所在的目錄+服務名+副本數命名,例如上面的例子的名字爲: dockercompose_redis_1 。若是指定-p,則會用項目名代替該文件目錄名。

下面開始介紹一些經常使用的docker-compose命令。

create/start/up/stop/kill/rm/restart/down

docker-compose create

建立全部的服務

docker-compose start

啓動被中止或未啓動的服務

docker-compose up 建立全部服務而且啓動服務,即同時執行了create和start命令
docker-compose stop 中止全部服務
docker-compose kill 強行中止全部服務
docker-compose rm 刪除中止的服務
docker-compose restart 重啓全部服務)
docker-compose down 中止、刪除全部的服務以及網絡、鏡像

其中,up命令啓動全部的服務時,若是沒有使用-d命令,會在前臺啓動全部的服務,前臺窗口將打印服務的啓動日誌。建議經過 -d 啓動。例如經過up啓動上面的redis服務。

[root@localhost dockercompose]# docker-compose up -d
Creating network "dockercompose_default" with the default driver

而後能夠經過 docker-compose logs -f 獲取輸出的日誌
 

ps

該命令能夠查看容器列表,能夠獲取到容器的簡單信息。

[root@localhost dockercompose]# docker-compose ps
         Name                        Command               State           Ports         
-----------------------------------------------------------------------------------------
dockercompose_busybox_1   /bin/echo                        Up                            
dockercompose_redis_1     docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp

上面的信息能夠獲得容器名、啓動命令、容器狀態以及端口的映射狀況。

 

scale

該命令用於擴展容器,爲service設置多個容器(副本)。咱們爲上面的busybox服務擴展爲2個副本。

[root@localhost dockercompose]# docker-compose scale busybox=2

WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Starting dockercompose_busybox_1 ... done
Creating dockercompose_busybox_2 ... done

稍等一下,經過ps命令能夠看到已經啓動了兩個busybox服務。

前面的輸出中,提示該命令已通過期,使用--scale選項指定副本。

咱們down了服務後,從新使用up命令並指定副本數

[root@localhost dockercompose]# docker-compose up -d --scale busybox=2
[root@localhost dockercompose]# docker-compose ps
         Name                        Command                 State              Ports         
----------------------------------------------------------------------------------------------
dockercompose_busybox_1   /bin/echo                        Restarting                         
dockercompose_busybox_2   /bin/echo                        Restarting                         
dockercompose_redis_1     docker-entrypoint.sh redis ...   Up           0.0.0.0:6379->6379/tcp

不明白爲何一直都是restarting。。。。。忽略它吧。。。。通常不會在一個宿主部署兩個一樣的服務

相關文章
相關標籤/搜索