docker-compose的安裝卸載以及如何使用

一、安裝

查看github上的docker-compose發(fā)行版本的地址:
https://github.com/docker/compose/tags
當(dāng)前最新的版本是1.26.2
安裝的命令如下:

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

# 2.設(shè)置文件具備執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose

# 3.查看版本信息
docker-compose -version

實(shí)例:

[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   638  100   638    0     0   1714      0 --:--:-- --:--:-- --:--:--  1719
100 11.6M  100 11.6M    0     0  22827      0  0:08:56  0:08:56 --:--:-- 24434
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose -version
docker-compose version 1.26.2, build eefe0d31

二、卸載

# 二進(jìn)制包方式安裝的,刪除二進(jìn)制文件即可
rm /usr/local/bin/docker-compose

三、基本使用

  1. 查看命令的基本用法
    可以使用docker-compose [命令] --help|-h來實(shí)現(xiàn)。
    docker-compose build -h
    
  2. 命令選項(xiàng)如下

    -f,–file FILE指定使用的Compose模板文件,默認(rèn)為docker-compose.yml,可以多次指定。
    -p,–project-name NAME指定項(xiàng)目名稱,默認(rèn)將使用所在目錄名稱作為項(xiàng)目名。
    -x-network-driver 使用Docker的可拔插網(wǎng)絡(luò)后端特性(需要Docker 1.9 及以后版本)
    -x-network-driver DRIVER指定網(wǎng)絡(luò)后端的驅(qū)動(dòng),默認(rèn)為bridge(需要Docker 1.9 及以后版本)
    -verbose輸出更多調(diào)試信息
    -v,–version打印版本并退出

  3. docker-compose常用命令列表
    命令 說明
    build 構(gòu)建項(xiàng)目中的服務(wù)容器
    help 獲得一個(gè)命令的幫助
    kill 通過發(fā)送SIGKILL信號(hào)來強(qiáng)制停止服務(wù)容器
    con?g 驗(yàn)證和查看compose文件配置
    create 為服務(wù)創(chuàng)建容器。只是單純的create,還需要使用start啟動(dòng)compose
    down 停止并刪除容器,網(wǎng)絡(luò),鏡像和數(shù)據(jù)卷
    exec 在運(yùn)行的容器中執(zhí)行一個(gè)命令
    logs 查看服務(wù)容器的輸出
    pause 暫停一個(gè)服務(wù)容器
    port 打印某個(gè)容器端口所映射的公共端口
    ps 列出項(xiàng)目中目前的所有容器
    pull 拉取服務(wù)依賴的鏡像
    push 推送服務(wù)鏡像
    restart 重啟項(xiàng)目中的服務(wù)
    rm 刪除所有(停止?fàn)顟B(tài)的)服務(wù)容器
    run 在指定服務(wù)上執(zhí)行一個(gè)命令
    scale 設(shè)置指定服務(wù)運(yùn)行的容器個(gè)數(shù)
    start 啟動(dòng)已經(jīng)存在的服務(wù)容器
    stop 停止已經(jīng)處于運(yùn)行狀態(tài)的容器,但不刪除它
    top 顯示運(yùn)行的進(jìn)程
    unpause 恢復(fù)處于暫停狀態(tài)中的服務(wù)
    up 自動(dòng)完成包括構(gòu)建鏡像、創(chuàng)建服務(wù)、啟動(dòng)服務(wù)并關(guān)閉關(guān)聯(lián)服務(wù)相關(guān)容器的一些列操作
    version 打印版本信息

四、常用命令使用

  1. up
    格式為:

    docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
    

    up命令十分強(qiáng)大,它嘗試自動(dòng)完成包括構(gòu)建鏡像,(重新)創(chuàng)建服務(wù),啟動(dòng)服務(wù),并關(guān)聯(lián)服務(wù)相關(guān)容器的 一些列操作。鏈接的服務(wù)都將會(huì)被自動(dòng)啟動(dòng),除非已經(jīng)處于運(yùn)行狀態(tài)。
    多數(shù)情況下我們可以直接通過該命令來啟動(dòng)一個(gè)項(xiàng)目。
    選項(xiàng)包括:

    -d 在后臺(tái)運(yùn)行服務(wù)容器
    –no-color 不使用顏色來區(qū)分不同的服務(wù)的控制輸出
    –no-deps 不啟動(dòng)服務(wù)所鏈接的容器
    –force-recreate 強(qiáng)制重新創(chuàng)建容器,不能與–no-recreate同時(shí)使用
    –no-recreate 如果容器已經(jīng)存在,則不重新創(chuàng)建,不能與–force-recreate同時(shí)使用
    –no-build 不自動(dòng)構(gòu)建缺失的服務(wù)鏡像
    –build 在啟動(dòng)容器前構(gòu)建服務(wù)鏡像
    –abort-on-container-exit 停止所有容器,如果任何一個(gè)容器被停止,不能與-d同時(shí)使用
    -t, --timeout TIMEOUT 停止容器時(shí)候的超時(shí)(默認(rèn)為10秒)
    –remove-orphans 刪除服務(wù)中沒有在compose文件中定義的容器
    –scale SERVICE=NUM 設(shè)置服務(wù)運(yùn)行容器的個(gè)數(shù),將覆蓋在compose中通過scale指定的參數(shù)

  2. ps
    格式為:

    docker-compose ps [options] [SERVICE...]
    

    列出項(xiàng)目中目前的所有容器。
    選項(xiàng)包括:

    -q 只打印容器的ID信息

  3. stop
    格式為:

    docker-compose stop [options] [SERVICE...]
    

    停止已經(jīng)處于運(yùn)行狀態(tài)的容器,但不刪除它。
    選項(xiàng)包括:

    -t, --timeout TIMEOUT 停止容器時(shí)候的超時(shí)(默認(rèn)為10秒)

  4. down
    格式為:

    docker-compose down [options]
    

    停止和刪除容器、網(wǎng)絡(luò)、卷、鏡像,這些內(nèi)容是通過docker-compose up命令創(chuàng)建的. 默認(rèn)值刪除 容器 網(wǎng)絡(luò),可以通過指定 rmi 、volumes參數(shù)刪除鏡像和卷。
    選項(xiàng)包括:

    –rmi type 刪除鏡像,類型必須是: ‘a(chǎn)ll’: 刪除compose文件中定義的所以鏡像;‘local’: 刪除鏡像名為空的
    鏡像
    -v, --volumes 刪除已經(jīng)在compose文件中定義的和匿名的附在容器上的數(shù)據(jù)卷
    –remove-orphans 刪除服務(wù)中沒有在compose中定義的容器

    在root目錄下,移除root的實(shí)例:

    [root@localhost ~]# docker-compose down
    Stopping root_mysql_1 ... done
    Stopping root_php_1   ... done
    Removing root_mysql_1 ... done
    Removing root_php_1   ... done
    Removing root_nginx_1 ... done
    Removing network root_web-net
    
  5. restart
    格式為:

    docker-compose restart [options] [SERVICE...]
    

    重啟項(xiàng)目中的服務(wù)。
    選項(xiàng)包括:

    -t, --timeout TIMEOUT 指定重啟前停止容器的超時(shí)(默認(rèn)為10秒)

  6. rm
    格式為:

    docker-compose rm [options] [SERVICE...]
    

    刪除所有(停止?fàn)顟B(tài)的)服務(wù)容器。
    選項(xiàng)包括:

    –f, --force 強(qiáng)制直接刪除,包括非停止?fàn)顟B(tài)的容器
    -v 刪除容器所掛載的數(shù)據(jù)卷

  7. start
    格式為:

    docker-compose start [SERVICE...]
    

    啟動(dòng)已經(jīng)存在的服務(wù)容器。

  8. run
    格式為:

    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
    

    在指定服務(wù)上執(zhí)行一個(gè)命令。
    例如:

    docker-compose run ubuntu ping www.baidu.com
    

    將會(huì)執(zhí)行一個(gè)ubuntu容器,并執(zhí)行ping www.baidu.com命令。
    將會(huì)執(zhí)行一個(gè)ubuntu容器,并執(zhí)行ping www.baidu.com命令。
    默認(rèn)情況下,如果存在關(guān)聯(lián),則所有關(guān)聯(lián)的服務(wù)將會(huì)自動(dòng)被啟動(dòng),除非這些服務(wù)已經(jīng)在運(yùn)行中。該命令類似于啟動(dòng)容器后運(yùn)行指定的命令,相關(guān)卷、鏈接等都會(huì)按照配置自動(dòng)創(chuàng)建。有兩個(gè)不同點(diǎn):

    1. 給定命令將會(huì)覆蓋原有的自動(dòng)運(yùn)行命令
    2. 不會(huì)自動(dòng)創(chuàng)建端口,以避免沖突
      如果不希望自動(dòng)啟動(dòng)關(guān)聯(lián)的容器,可以使用–no-deps選項(xiàng),例如:
    docker-compose run --no-deps web
    

    將不會(huì)啟動(dòng)web容器關(guān)聯(lián)的其他容器。
    選項(xiàng)包括:

    -d 在后臺(tái)運(yùn)行服務(wù)容器
    –name NAME 為容器指定一個(gè)名字
    –entrypoint CMD 覆蓋默認(rèn)的容器啟動(dòng)指令
    -e KEY=VAL 設(shè)置環(huán)境變量值,可多次使用選項(xiàng)來設(shè)置多個(gè)環(huán)境變量
    -u, --user="" 指定運(yùn)行容器的用戶名或者uid
    –no-deps 不自動(dòng)啟動(dòng)管理的服務(wù)容器
    –rm 運(yùn)行命令后自動(dòng)刪除容器,d模式下將忽略
    -p, --publish=[] 映射容器端口到本地主機(jī)
    –service-ports 配置服務(wù)端口并映射到本地主機(jī)
    -v, --volume=[] 綁定一個(gè)數(shù)據(jù)卷,默認(rèn)為空
    -T 不分配偽tty,意味著依賴tty的指令將無法運(yùn)行
    -w, --workdir="" 為容器指定默認(rèn)工作目錄

  9. con?g
    格式為:

    docker-compose config [options]
    

    驗(yàn)證并查看compose文件配置。
    選項(xiàng)包括:

    –resolve-image-digests 將鏡像標(biāo)簽標(biāo)記為摘要
    -q, --quiet 只驗(yàn)證配置,不輸出。 當(dāng)配置正確時(shí),不輸出任何內(nèi)容,當(dāng)文件配置錯(cuò)誤,輸出錯(cuò)誤信息
    –services 打印服務(wù)名,一行一個(gè)
    –volumes 打印數(shù)據(jù)卷名,一行一個(gè)

  10. kill
    格式為:

    docker-compose kill [options] [SERVICE...]
    

    通過發(fā)送SIGKILL信號(hào)來強(qiáng)制停止服務(wù)容器。 支持通過-s參數(shù)來指定發(fā)送的信號(hào),例如:通過如下指令發(fā)送SIGINT信號(hào):

    docker-compose kill -s SIGINT
    
  11. create
    格式為:

    docker-compose create [options] [SERVICE...]
    

    為服務(wù)創(chuàng)建容器.只是單純的create,還需要使用start啟動(dòng)compose。
    選項(xiàng)包括:

    –force-recreate 重新創(chuàng)建容器,即使它的配置和鏡像沒有改變,不兼容–no-recreate參數(shù)
    –no-recreate 如果容器已經(jīng)存在,不需要重新創(chuàng)建. 不兼容–force-recreate參數(shù)
    –no-build 不創(chuàng)建鏡像,即使缺失
    –build 創(chuàng)建容器前,生成鏡像

  12. exec
    格式為:

    docker-compose exec [options] SERVICE COMMAND [ARGS...]
    

    與docker exec 命令功能相同,可以通過service name登陸到容器中。
    選項(xiàng)包括:

    -d 分離模式,后臺(tái)運(yùn)行命令.
    –privileged 獲取特權(quán).
    –user USER 指定運(yùn)行的用戶.
    -T 禁用分配TTY. By default docker-compose exec分配 a TTY.
    –index=index 當(dāng)一個(gè)服務(wù)擁有多個(gè)容器時(shí),可通過該參數(shù)登陸到該服務(wù)下的任何服務(wù),例如:docker-compose exec --index=1 web /bin/bash ,web服務(wù)中包含多個(gè)容器

五、docker-compose模版文件使用

模板文件是docker-compose的核心。在文件中,可以根據(jù)自己的定義,管理多個(gè)容器的操作,包括他們的運(yùn)行,通信等。模板文件的模式名稱是docker-compose.yml,格式是YAML合適。
一個(gè)模板文件的格式如下

version: "2"
services:

volumes:

networks:

services:
定義應(yīng)用需要的服務(wù)的項(xiàng)目,包括定義服務(wù)的名字,鏡像,數(shù)據(jù)卷,所屬網(wǎng)絡(luò),依賴的其他服務(wù)等。
volumes:
這里定義數(shù)據(jù)卷的名稱,供不同服務(wù)下的應(yīng)用使用。
networks:
這里定義網(wǎng)路的名稱,供不同的服務(wù)下的應(yīng)用使用。

Docker Compose常用模板文件主要命令:

指令 功能
build 指定服務(wù)鏡像Docker?le所在路徑
cap_add,cap_drop 指定容器的內(nèi)核能力(capacity)分配
command 覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令
cgroup_parent 指定父cgroup組,意味著將基礎(chǔ)該組的資源限制
container_name 指定容器名稱。默認(rèn)將會(huì)使用項(xiàng)目名稱服務(wù)名稱序號(hào)這樣的格式
devices 指定設(shè)置映射關(guān)系
dns 自定義DNS服務(wù)器。可以是一個(gè)值,也可以是一個(gè)列表
dns_search 配置DNS搜索域。可以是一個(gè)值,也可以是一個(gè)列表
docker?le 指定額外編譯鏡像的Docker?le文件,可以通過該指令來指定
env_?le 從文件中獲取環(huán)境變量,可以為單獨(dú)的文件路徑或列表
environment 設(shè)置環(huán)境變量,可以使用數(shù)組或字典兩種格式
expose 暴露端口
external_links 鏈接到docker-compose.yml外部的容器,甚至可以是非Compose管理的外部容器
extra_hosts 指定額外的host名稱映射信息
image 指定為鏡像名稱或鏡像ID。如果鏡像在本地不存在,Compose將會(huì)嘗試?yán)∵@個(gè)鏡像
labels 指定服務(wù)鏡像Docker?le所在路徑
links 鏈接到其他服務(wù)中的容器
log_driver 指定日志驅(qū)動(dòng)類型,類似于Docker中的–log-driver參數(shù)。目前支持三種日志驅(qū)動(dòng)類型:log_driver:“json-?le”、 log_driver:“syslog”、log_driver:“none”
log_opt 日志驅(qū)動(dòng)的相關(guān)參數(shù)
net 設(shè)置網(wǎng)絡(luò)模式。參數(shù)類似于docker clinet的–net參數(shù)一樣
pid 跟主機(jī)系統(tǒng)共享進(jìn)程命名空間。打開該選項(xiàng)的容器之間,以及容器和宿主機(jī)系統(tǒng)之間可以通過進(jìn)程ID來相互訪問和操作
ports 暴露端口信息
security_opt 指定容器模板標(biāo)簽(label)機(jī)制的默認(rèn)屬性(如用戶、角色、類型、級(jí)別等)
ulimits 指定容器的ulimits限制值
volumes 數(shù)據(jù)卷所掛載路徑設(shè)置。可以設(shè)置宿主機(jī)路徑(HOST:CONTAINER)或加上訪問模式(HOST:CONTAINER:ro) 卷-官方文檔

這里展示了一個(gè)使用模板文件的實(shí)例:

version: '1'
services:
  redis:
    image: redis
    ports:
      - "6379:6379"
    container_name: "redis"
    networks: 
      - dev
  mysql:
    image: centos/mysql-57-centos7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    ports: 
      - "3306:3306"
    container_name: "mysql"
    networks: 
      - dev
  web:
    image: tomcat
    ports: 
      - "9090:8080"
    container_name: "web"
    networks: 
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。