您好,登錄后才能下訂單哦!
Compose是Docker的服務編排工具,主要用來構建基于Docker的復雜應用,Compose 通過一個配置文件來管理多個Docker容器,非常適合組合使用多個容器進行開發的場景。
說明:Compose是Fig的升級版,Fig已經不再維護。Compose向下兼容Fig,所有fig.yml
只需要更名為docker-compose.yml
即可被Compose使用。
服務編排工具使得Docker應用管理更為方便快捷。 Compose網站:https://docs.docker.com/compose/
安裝Compose:
# 方法一: $ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose # Linux下等效于 $ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose; chmod +x /usr/local/bin/docker-compose # 方法二:使用pip安裝,版本可能比較舊 $ yum install python-pip python-dev $ pip install docker-compose # 方法三:作為容器安裝 $ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose # 方法四:離線安裝 # 下載[docker-compose-Linux-x86_64](https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64),然后重新命名添加可執行權限即可: $ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose; $ chmod +x /usr/local/bin/docker-compose # 百度云地址: http://pan.baidu.com/s/1slEOIC1 密碼: qmca # docker官方離線地址:https://dl.bintray.com/docker-compose/master/
安裝完成后可以查看版本:
# docker-compose --version docker-compose 1.8.1
升級
如果你使用的是 Compose 1.2或者早期版本,當你升級完成后,你需要刪除或者遷移你現有的容器。這是因為,1.3版本, Composer 使用 Docker 標簽來對容器進行檢測,所以它們需要重新創建索引標記。
卸載
$ rm /usr/local/bin/docker-compose # 卸載使用pip安裝的compose $ pip uninstall docker-compose
Compose區分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1沒有聲明版本默認是"version 1"。Version 1將來會被棄用。
版本1指的是忽略version
關鍵字的版本;版本2必須在行首添加version: '2'。
入門示例
一般步驟
1、定義Dockerfile,方便遷移到任何地方;
2、編寫docker-compose.yml文件;
3、運行docker-compose up啟動服務
示例
準備工作:提前下載好鏡像:
docker pull mysql docker pull wordpress
需要新建一個空白目錄,例如wptest。新建一個docker-compose.yml
version: '2' services: web: image: wordpress:latest links: - db ports: - "8002:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: 123456 db: image: mysql environment: - MYSQL_ROOT_PASSWORD=123456
以上命令的意思是新建db和wordpress容器。等同于:
$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql $ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress
注意,如果你是直接從fig遷移過來的,且web
里links
是- db:mysql
,這里會提示沒有給wordpress設置環境變量,這里需要添加環境變量WORDPRESS_DB_HOST
和WORDPRESS_DB_PASSWORD
。
好,我們啟動應用:
# docker-compose up Creating wptest_db_1... Creating wptest_wordpress_1... Attaching to wptest_db_1, wptest_wordpress_1 wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html
就成功了。瀏覽器訪問 http://localhost:8002(或 http://host-ip:8002)即可。
默認是前臺運行并打印日志到控制臺。如果想后臺運行,可以:
docker-compose up -d
服務后臺后,可以使用下列命令查看狀態:
# docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------- figtest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp figtest_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8002->80/tcp # docker-compose logs Attaching to wptest_wordpress_1, wptest_db_1 db_1 | 2016-10-4T14:38:46.98030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). db_1 | 2016-10-4T14:38:46.99974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ... db_1 | 2016-10-4T14:38:46.27191Z 0 [Note] InnoDB: PUNCH HOLE support available
停止服務:
# docker-compose stop Stopping wptest_wordpress_1... Stopping wptest_db_1...
重新啟動服務:
docker-compose restart
docker-compose.yml參考
每個docker-compose.yml必須定義image或者build中的一個,其它的是可選的。
image
指定鏡像tag或者ID。示例:
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd
注意,在version 1
里同時使用image
和build
是不允許的,version 2
則可以,如果同時指定了兩者,會將build
出來的鏡像打上名為image標簽。
build
用來指定一個包含Dockerfile
文件的路徑。一般是當前目錄.
。Fig將build并生成一個隨機命名的鏡像。
注意,在version 1
里bulid
僅支持值為字符串。version 2
里支持對象格式。
build: ./dir build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1
context
為路徑,dockerfile
為需要替換默認docker-compose
的文件名,args
為構建(build)過程中的環境變量,用于替換Dockerfile里定義的ARG
參數,容器中不可用。示例:
Dockerfile:
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 build: context: . args: - buildno=1 - password=secret
command
用來覆蓋缺省命令。示例:
command: bundle exec thin -p 3000
command也支持數組形式:
command: [bundle, exec, thin, -p, 3000]
links
用于鏈接另一容器服務,如需要使用到另一容器的mysql服務。可以給出服務名和別名;也可以僅給出服務名,這樣別名將和服務名相同。同docker run --link。示例:
links: - db - db:mysql - redis
使用了別名將自動會在容器的/etc/hosts文件里創建相應記錄:
172.17.2.186 db 172.17.2.186 mysql 172.17.2.187 redis
所以我們在容器里就可以直接使用別名作為服務的主機名。
ports
用于暴露端口。同docker run -p
。示例:
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
expose
expose提供container之間的端口訪問,不會暴露給主機使用。同docker run --expose。
expose: - "3000" - "8000"
volumes
掛載數據卷。同docker run -v
。示例:
volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro
volumes_from
掛載數據卷容器,掛載是容器。同docker run --volumes-from
。示例:
volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw
container:container_name
格式僅支持version 2
。
environment
添加環境變量。同docker run -e
。可以是數組或者字典格式:
environment: RACK_ENV: development SESSION_SECRET: environment: - RACK_ENV=development - SESSION_SECRET
depends_on
用于指定服務依賴,一般是mysql、redis等。
指定了依賴,將會優先于服務創建并啟動依賴。
links
也可以指定依賴。
external_links
鏈接搭配docker-compose.yml
文件或者Compose
之外定義的服務,通常是提供共享或公共服務。格式與links相似:
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
注意,external_links
鏈接的服務與當前服務必須是同一個網絡環境。
extra_hosts
添加主機名映射。
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
將會在/etc/hosts
創建記錄:
162.242.195.82 somehost 50.31.209.229 otherhost
extends
繼承自當前yml文件或者其它文件中定義的服務,可以選擇性的覆蓋原有配置。
extends: file: common.yml service: webapp
service必須有,file可選。service是需要繼承的服務,例如web、database。
net
設置網絡模式。同docker的--net
參數。
net: "bridge" net: "none" net: "container:[name or id]" net: "host"
自定義dns服務器。
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir
這些命令都是單個值,含義請參考docker run。
cpu_shares: 73 cpu_quota: 50000 cpuset: 0,1 user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 mem_limit: 128M memswap_limit: 2000000000 privileged: true restart: always read_only: true shm_size: 64M stdin_open: true tty: true
命令行參考
$ 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 -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 (for example if your docker host is an IP address) 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 kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pulls 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 unpause Unpause services up Create and start containers version Show the Docker-Compose version information
批處理腳本
# 關閉所有正在運行容器 docker ps | awk '{print $1}' | xargs docker stop # 刪除所有容器應用 docker ps -a | awk '{print $1}' | xargs docker rm # 或者 docker rm $(docker ps -a -q)
參考:
1、Overview of Docker Compose - Docker
https://docs.docker.com/compose/overview/
2、library/mysql - Docker Hub
https://hub.docker.com/_/mysql/
3、library/wordpress - Docker Hub
https://hub.docker.com/_/wordpress/
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。