# Docker的網路-Docker Compose yaml網路寫法(external與internal篇) 雖然今天加班比較晚,還是要比照鐵人精神,完成今天的挑戰... Docker Compose yaml的起手式,我想從編輯器開始。 不是為了混一篇文章的量XD而是實際撰寫上,常常因為yaml的層級跟空白,而發生無法正常運作的問題。  這邊推薦使用vs code的docker extension,就可以提供Dockerfile還有Docker compose yaml的一些語法輔助。 有關Docker Compose yaml比較完整的說明,可以看以下官方文件: https://docs.docker.com/compose/compose-file/06-networks/ 網路的元件宣告還算簡單 ``` version: "3" services: ubuntu: image: tedyang/ubuntu:1120912 networks: - outside networks: outside: external: true ``` 我們先來玩一下一個簡單範例,上面的範例就是用vs code跟參考官方範例寫成的。 後面我會花一點時間整理docker compose文件的結構跟語法的特色。 這邊試著run看看 > docker-compose -f docker-compose.yaml -p ubuntutest up  官方文件有說明,external代表是在不在這邊管network物件,所以如果outside這個物件沒有先建立好,這邊會出現錯誤 我們先把network物件outside建立起來看看 > docker network create outsude 再執行一次 > docker-compose -f docker-compose.yaml -p ubuntutest up ok了 我們看一下internal跟external的差異: > docker network ls  差異很簡單,external就是要先額外建好,internal代表docker compose執行同時,會建立一個project-name_network-object的網路物件。 這邊有發現一個狀況:  我重複執行了: > docker-compose -f docker-compose.yaml -p ubuntutest2 up > docker-compose -f docker-compose.yaml -p ubuntutest2 up > docker-compose -f docker-compose.yaml -p ubuntutest2 up 還是只有一個container在運作,相同container name。 這跟使用docker run --name這種方式不同,我整理如下: 1. docker run --name NAME,NAME是容器名稱,不可重複。 2. docker-compose up -p projectname,projectname-servicename-1為容器名稱,多次執行會不斷重啟container。 ### 特別狀況 剛剛只展示將project都寫一樣,執行時就會不斷重啟,但如果我進入compose yaml修改service name,但project name一樣,舊的service name的container會造成以下訊息:  可以看到多次執行會出現 WARN[0000] Found orphan containers ([ubuntutest2-ubuntu-1]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. 如果確定舊的service不要使用了,可以照它的指示移除孤兒container > docker-compose -f docker-compose.yaml -p ubuntutest2 up --remove-orphans  後面會再更深入做docker compose生命週期的管理,然後會建議怎樣改service name或project name,或是使用docker-compose up /down來做重新deploy,不過我們還是著重在network的管理上喔。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up