轉自:https://blog.csdn.net/jacksonary/article/details/78961612
僅做個人備份,瀏覽請看原文
在實際開發中,往往需要多種業務,不再是Ubuntu中打印一句話,比如在WEB中和數據庫的交互,這樣的應用就是典型的由多個容器組成,不需要用shell去啓動這些容器,所有的容器將會以一種“服務組”的方式定義在一個配置文件中,和Dockerfile類似的,寫在項目根目錄中,然後可以利用
docker-compose up -d
docker-compose腳本可以用來啓動、停止、重啓應用和所有的應用中的服務,docker-compose的完整的命令如下:
指令 內容
build
Build or rebuild services
help
Get help on a command
kill
Kill containers
logs
View output from containers
port
Print the public port for a port binding
ps
List containers
pull
Pulls 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
up
Create and start containers
這些定義在一起的Docker組件服務入口是docker-compse配置文件,他通常以yml文件的形式存在,比如下面的docker-compse.yml(注意在每個屬性配置時冒號後面必須加空格符,除了端口映射):
例子:
version: '3.3'
services:
db:
container_name: db
image: mysql:8
environment:
MYSQL_DATABASE: employees
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: supersecret
ports:
- 3307:3306
web:
image: arungupta/docker-javaee:dockerconeu17
ports:
- 8081:8080
- 9991:9990
depends_on:
- db
在上面的組合文件中:
1. 定義了兩個服務:db和web
2. image屬性爲每個服務字指定了鏡像文件
3. mysql:8鏡像將會啓動MySql服務
4. environment屬性定義了MySQL服務環境變量進行初始化:MYSQL_DATABASE 在鏡像啓動時常見一個指定名字的數據庫,MYSQL_USER和MYSQL_PASSWORD組合創建一個新的用戶並設定密碼,這個用戶將會被授予MYSQL_DATABASE創建的那個數據庫的超級權限,MYSQL_ROOT_PASSWORD是強制性的設定MySQL超級用戶密碼
5. ports實現端口的轉發,前面的是主機,後面的是虛擬機
6. depends_on屬性表明了兩個服務之間的依賴,這個案例中,WildFly(一種應用服務器)依賴於MySQL,所以MySQL將在WildFly之前啓動
啓停
在有了上述的組合配置文件後,PW進入該文件的所在目錄下,即可利用docker-compose up -d以隔離模式啓動這兩個服務,docker ps可以查看端口之間的映射情況,也可以發現是啓動了兩個容器,docker-compose logs可以查看服務的日誌,此時我們就可以通過http://localhost:8081/resources/employees訪問所有人員信息,停止這一組服務:
docker-compose down