什麼是docker compose?
docker compose是一個容器編排功能,將執行在不同容器中的不同伺服器進行編排,聯合在一起。
可以用於對多數容器進行統一管理:包括但不限於:網路、埠、掛載等可以用於實現容器的叢集化,相關於容器、映象的一系列操作,compose都可以進行操作,就是一個對於容器進行管理的功能
compose中檔案結構通常是指yml檔案的結構,那什麼是yml檔案?
yml檔案是一種鍵值對格式的檔案。
yml檔案對於格式非常的敏感,需要注意以下幾種事項:
例如:
house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 1234
yml檔案格式例如上面,需要進行一級級的對應,不同級之間,有兩個空格的間隔。
注:如果在一個層級中,一個鍵有多個值,可以使用在下一個層級,同樣是空餘兩格,以短橫槓起始,有幾個值寫幾個端橫槓
欄位 | 描述 |
---|---|
build dockerfile centext | 指定Dockerfile檔名構建映象上下文的路徑 |
images | 指定映象 |
command | 執行命令,覆蓋預設命令 |
container name | 指定容器名稱,由於容器名稱是唯一的。如果指定自定義名稱,則是無法建立scale |
deploy | 指定部署和執行服務相關設定,只能再Swarm模式使用 |
environment | 新增環境變數 |
networks | 加入網路 |
ports | 暴露容器埠,與-p相同,但是埠號必須大於60 |
volumts | 掛載宿主機路徑或者命令卷 |
restart | 重新啟動策略,預設no,always, on-failure,unless-stoped |
hostname | 容器主機名 |
build:構造一個映象時候的一個定義方式
dockerfile:方式是使用dockerfile的方式構建
context:服務docerfile檔案的路徑
images:可以指定使用的映象名字,例如:images: 映象名,注意:後面有個空格
command:執行一個語句
container name:用於指定容器的名稱,因為容器名字是唯一的。如果指定自定義名稱,則無法scale(設定副本集)
#副本集:將一個映象製作成多個容器,這多個容器之間,執行環境等方面都是一模一樣。當容器架構中的一個容器掛掉之後,可以直接啟動一個相同的容器,用以保持副本集的數量,這是副本集的概念,同樣也是K8s的核心。可以提高微服務的速度,提高容災,高並行效能
deploy:是一個控制器,在k8s中是控制管理副本集的一個外掛
restart:一種重新啟動策略,預設是關閉之後不啟動,如果always則是不管是手動關閉還是非手動關閉,都會自動把關閉狀態的容器啟動,unless-stoped只拉取關閉狀態的容器,on-failure,只會啟動容器返回碼非零的容器
欄位 | 描述 |
---|---|
build | 重新構建一個映象資訊 |
ps | 列出容器當前docker compose所控制的容器 |
up | 建立以及啟動容器 |
exec | 在容器內執行命令 |
scale | 指定一個伺服器的啟動數量,相當於副本集的數量 |
top | 顯示容器程序,所有docker compose控制的程序啟動的容器 |
logs | 檢視容器的輸出資訊 |
down | 刪除容器、網路、資料卷和映象 |
stop/start/restart | 停止/啟動/重新啟動容器服務 |
docker compose基本使用格式:docker-compose [options] [COMMAND] [ARGS…]
docker-compose選項:
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
首次連線下載的時候,可能會提示失誤或者連線不上,可能是因為網路原因,可以多試幾次
檔案在剛下載之後,預設是沒有執行許可權的,所以需要手動新增執行許可權
chmod +x /usr/local/bin/docker-compos
docker-compose
可以看到,現在已經正常執行了
手動建立下面的檔案(dockerfile檔案之前有的話,直接拉取過來也是可以的)
tree . ├── docker-compose.yml ├── nginx │ ├── Dockerfile │ ├── nginx-1.12.0.tar.gz └── wwwroot └── index.html
其中yml檔案內部
cat docker-compose.yml version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1321:80 - 1707:443 networks: - cluster volumes: - ./wwwroot: /usr/local/nginx/html networks: cluster:
nginx的dockerfile檔案
cat ./nginx/Dockerfile FROM centos:7 ADD nginx-1.12.0.tar.gz /tmp RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make &> /dev/null \ && useradd -M -s /sbin/nologin nginx \ && cd /tmp/nginx-1.12.0/ \ && ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module &> /dev/null \ && make &> /dev/null \ && make install &> /dev/null VOLUME ["/usr/local/nginx/html"] EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
index.html檔案中就是自己設定的網頁資訊,就不多做介紹了
確定之後,編譯
docker-compose -f docker-compose.yml up -d
檢視執行結果
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES da38007f09ab dockercompose_nginx "/usr/local/nginx/sb…" About a minute ago Up About a minute 0.0.0.0:666->80/tcp, :::666->80/tcp, 0.0.0.0:667->443/tcp, :::667->443/tcp dockercompose_nginx_1 #可以看到,這個埠資訊就是我們在yml檔案中設定的埠資訊,直接在這個生效了 docker images REPOSITORY TAG IMAGE ID CREATED SIZE dockercompose_nginx latest b1e4b9dfa72d 3 minutes ago 478MB
存取網址埠,檢視該網站頁面
curl 192.168.75.51:666 hello #顯示結果 cat ./wwwroot/index.html hello
推薦學習:《》
以上就是docker基礎之compose檔案結構以及安裝工具(範例詳解)的詳細內容,更多請關注TW511.COM其它相關文章!