Compose 項(xiàng)目由 Python 編寫,實(shí)現(xiàn)上調(diào)用了 Docker 服務(wù)提供的 API 來對(duì)容器進(jìn)行管理,Docker Compose 是 Docker 的獨(dú)立產(chǎn)品,因此需要安裝 Docker 之后在單獨(dú)安裝 Docker Compose .
一、安裝
1、#下載
sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose version
2、#安裝pip
yum -y install epel-release
yum -y install python-pip
#確認(rèn)版本
pip --version
#更新pip
pip install --upgrade pip
#安裝docker-compose
pip install docker-compose
#查看版本
docker-compose version
3、安裝Docker 的補(bǔ)全提示工具(可選)
#安裝
yum install bash-completion
#下載docker-compose腳本
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
二、創(chuàng)建 Dockerfile(官網(wǎng)示例)
FROM python:3.4-alpine #使用基礎(chǔ)鏡像 Python 3.4
ADD . /code #將當(dāng)前目錄映射到鏡像/code目錄下
WORKDIR /code #設(shè)置工作目錄為 /code
RUN pip install -r requirements.txt #安裝 Python 依賴包
EXPOSE 8070 8055 #expose說明docker容器開放了哪些端口;在此之后使用-P命令進(jìn)行隨機(jī)映射的時(shí)候,會(huì)映射到EXPOSE聲明的端口 8070是宿主端口,8055是容器端口
CMD ["python", "app.py"] #啟動(dòng) app.py 程序
三、Compose 文件定義一個(gè)服務(wù)即創(chuàng)建一個(gè) docker-compose.yml 文件
version: '2'
services:
web:
build: . #使用 Dockerfile 構(gòu)建了當(dāng)前鏡像(將當(dāng)前目錄做為構(gòu)建鏡像上下文時(shí),還可通過-t參數(shù)指定構(gòu)建成后鏡像的倉庫、標(biāo)簽等,-f指定該文件的位置);構(gòu)建上下文是指Dockerfile所在的本地路徑或一個(gè)URL(Git倉庫地址)。構(gòu)建上下文環(huán)境會(huì)被遞歸處理,所以,構(gòu)建所指定的路徑還包括了子目錄,而URL還包括了其中指定的子模塊。
ports:
- "5000:5000" #將 Web 容器內(nèi)部的5000端口映射到 host 的5000端口
redis:
image: "redis:alpine" #直接由官方的 redis 鏡像創(chuàng)建
四、ompose 編譯啟動(dòng)應(yīng)用
docker-compose up啟動(dòng)
docker-compose up -d在后臺(tái)啟動(dòng)服務(wù)
五、常用命令
[root@localhost composetest]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
composetest_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
composetest_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
使用docker-compose stop停止服務(wù)。
[root@localhost composetest]# docker-compose stop
Stopping composetest_web_1 ... done
Stopping composetest_redis_1 ... done
其它常用命令
#查看幫助
docker-compose -h
# -f 指定使用的 Compose 模板文件,默認(rèn)為 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
#啟動(dòng)所有容器,-d 將會(huì)在后臺(tái)啟動(dòng)并運(yùn)行所有的容器
docker-compose up -d
#停用移除所有容器以及網(wǎng)絡(luò)相關(guān)
docker-compose down
#查看服務(wù)容器的輸出
docker-compose logs
#列出項(xiàng)目中目前的所有容器
docker-compose ps
#構(gòu)建(重新構(gòu)建)項(xiàng)目中的服務(wù)容器。服務(wù)容器一旦構(gòu)建后,將會(huì)帶上一個(gè)標(biāo)記名,例如對(duì)于 web 項(xiàng)目中的一個(gè) db 容器,可能是 web_db??梢噪S時(shí)在項(xiàng)目目錄下運(yùn)行 docker-compose build 來重新構(gòu)建服務(wù)
docker-compose build
#拉取服務(wù)依賴的鏡像
docker-compose pull
#重啟項(xiàng)目中的服務(wù)
docker-compose restart
#刪除所有(停止?fàn)顟B(tài)的)服務(wù)容器。推薦先執(zhí)行 docker-compose stop 命令來停止容器。
docker-compose rm
#在指定服務(wù)上執(zhí)行一個(gè)命令。
docker-compose run ubuntu ping docker.com
#設(shè)置指定服務(wù)運(yùn)行的容器個(gè)數(shù)。通過 service=num 的參數(shù)來設(shè)置數(shù)量
docker-compose scale web=3 db=2
#啟動(dòng)已經(jīng)存在的服務(wù)容器。
docker-compose start
#停止已經(jīng)處于運(yùn)行狀態(tài)的容器,但不刪除它。通過 docker-compose start 可以再次啟動(dòng)這些容器。
docker-compose stop