本篇文章為大家帶來了docker中compose的相關知識,其中包含了compose檔案結構以及安裝docker compose工具的相關知識,希望對大家有幫助。
什麼是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视频教程》
以上是docker基礎之compose檔案結構以及安裝工具(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!