# 第8章 Docker 網路模式介紹  > 介紹4種常見的網路模式 - none = 不能向內或向外連 - bridge = 會把容器放在 bridge network 中, 不同 bridge network 不互通相反的同一個 bridge network 中就可互通,可以連外網 - container = 會跟 bridge 要一個 bridge network 讓它們共享同一個 bridge network - host = 跟 Linux VM 要空間就可以跟主機上的其它程序溝通 ## 實作 None ``` docker pull alpine docker images docker network ls docker run -d --network none --name none-mode alpine tail -f /dev/null docker network inspect none docker container ls // 測試與外界溝通 docker exec -it container_id /bin/sh 進去 shell 後 ip addr ls ping 8.8.8.8 (google) 會顯示 Network unreachable 代表 連不到 ``` ## 實作 Bridge ``` docker network ls docker network create --driver bridge my-bridge docker network ls // 觀察這個network docker network inspect my-bridge // 建立 container 到 bridge docker run -d --network my-bridge --name brige-mode001 alpine tail -f /dev/null docker network inspect my-bridge 會在 containers 裡面多剛剛新增的 docker exec -it container_id /bin/sh ip addr ls ping 8.8.8.8 // 建立第二個 container 到 bridge docker run -d --network my-bridge --name brige-mode002 alpine tail -f /dev/null docker container ls docker network insepect my-bridge docker exec -it container_id /bin/sh ip addr ls ping 8.8.8.8 ping 另一個在相同network 的ip // 建立第三個 container 到不同bridge docker network create --driver bridge their-bridge docker network ls docker run -d --network their-bridge --name brige-mode003 alpine tail -f /dev/null docker network inspect their-bridge docker exec -it container_id /bin/sh ip addr ls ping 8.8.8.8 ping 不同 network 的 ip // 加入其它 network 中 docker network connet my-bridge(network) brige-mode003 (將container 加入到新的 bridge) docker network inspect my-brdige docker exec -it container_id /bin/sh ping 共同網路底下的其它 container id ``` ## 實作 Container > 複製現有的 container 設定 ``` docker container ls docker run -d --network container:brige-mode001(拷貝 brige-mode001 設定) --name container-mode001 alpine tail -f /dev/null docker container ls docker network inpsect my-bridge // 不會出現新的container 因為只是複製所以不會新增任何東西 docker exec -it container_id /bin/sh ip addr ls (會發現與複製的那一個 ip 一樣) ``` ## 實作 Host > 我們的 container 不在是 container 那一層而是直接當成 vm linux host 一模一樣 ``` docker run -d --network host --name my-apache xxx/test01 docker build -t xxxx/my-apache docker images docekr run -d --network host --name my-apache xxx/my-apache docker container ls docker network inspect host docker container ls docker exec -it container_id /bin/sh ip addr ls 192.xxx.xxx.xxx (linux vm ip) netstat -tulpn exit echo $(docker-machine ip) ``` ```dockerfile= FROM alpine:latest ENV myworkdir /var/www/localhost/htdocs/ ARG whoami=Jake WORKDIR ${myworkdir} RUN apk --update add apache2 RUN rm -rf /var/cache/apk/* RUN echo "<h3>I am ${whoami}. I am taking this great Docker Course. Round 01</h3>" >> index.html RUN echo "<h3>I am ${whoami}. I am taking this great Docker Course. Round 02</h3>" >> index.html RUN echo "<h3>I am ${whoami}. I am taking this great Docker Course. Round 03</h3>" >> index.html COPY ./content.txt ./ RUN ls -l ./ RUN cat ./content.txt >> index.html ENTRYPOINT ["http", "-D", "FOREGROUND"] ``` ###### tags: `2021` `docker` `network` {%hackmd BJrTq20hE %}
×
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