Docker
安裝
參考資料:
https://marcus116.blogspot.com/2019/01/docker-docker-for-windows.html
issue
virtualization-must-be-enabled
以系統管理員執行 + 重開電腦
bcdedit /set hypervisorlaunchtype auto
https://blog.csdn.net/mythest/article/details/92999646
基本指令
查看Image與Container
docker images
docker ps -a
# 查看使用中的container
docker ps -l
停止+刪除container
docker stop [container_id]
docker rm [container_id]
刪除可加上-f,強制刪除
搜尋image
docker search ubuntu -f is-official=true
ubuntu為關鍵字,is-official=true 表示要搜尋是官方的 Docker image
下載image
docker pull ubuntu
刪除image
docker rmi [image_id]
啟動container
直接啟動,會自動給name,若沒有image會自動去下載
docker run image_name 或
docker run image_id
--name
docker run --name demo_test ubuntu
image記得放在最後
-it
讓標準輸入維持在打開的狀態 + 替Container配置一個虛擬的終端機
docker run --name demo_test -it ubuntu
啟動後會進入終端機畫面
-d
讓Container進入背景執行
docker run --name demo_test -d ubuntu
-p
可以將主機的Port綁定到Container的Port,格式為host_port:container_port
docker run -p 8080:80 ubuntu
把主機上的8080連接埠綁定Container的80連接埠,所以可從主機使用127.0.0.1:port或ip:port連線至container的埠口
-v
docker run -v /host/v1:/container/v2 ubuntu
docker run -v //c/Uesrs/Amin/www:/var/www/html。
掛載目錄,其格式為host_volume:container_volume
冒號前面是本機的目錄位置,冒號後面則是Container中的路徑(必需是絕對路徑)
範例二表示將Container內的/var/www/html資料夾路徑與外部 C:/Uesrs/Amin/www資料夾路徑相連,這樣可讓外部的檔案可直接與Container內部進行共同存取。
--rm
Container執行結束(exit)之後會自動被移除,移除後不會顯示在docker ps -a
docker run -p 8080:80 --rm ubuntu
--restart=always
如果 container 遇到例外的情況被 stop 掉,例如是重新開機,docker 會試著重新啟動此 container
http://white5168.blogspot.com/2016/05/windowsdocker.html#.XnM4pKgzaUm
https://ithelp.ithome.com.tw/articles/10191634
推薦:
https://www.jinnsblog.com/2018/10/docker-container-command.html
container狀態
查詢狀態
docker ps -a
啟動成功 ==> Up
停止 ==> Exited (0)
進入/離開container
進入container
已經啟動的container才能使用exec進入
docker exec -it [container_name or container_id] bash
啟動然後直接進入container
docker start -ia [container_name]
離開container
exit
若以-ia進入,使用exit離開時container 會被關閉,status會變成 Exited(0)
若以exec進入,exit後狀態為Up
放置背景執行
可用鍵盤指令,container可維持在「Up」
ctrl + p
ctrl + q
再次回到背景執行的container
docker attach [container_name]
start/stop container
停止,狀態變成「Exited (0)」
docker stop [container_name]
啟動,狀態變成「Up」
docker start [container_name]
啟動然後直接進入container
docker start -ia [container_name]
網路
查看網路設定
docker network ls
docker run會預設將建立的container放到"bridge"
查看bridge詳細資料
docker network inspect bridge
可以看到container所使用的網段
查詢container所使用的ip,container_name可變更
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
新增網段
docker network create -d bridge new_name
將container設定至新網段
docker run --name mysql579 --net new_name -e MYSQL_ROOT_PASSWORD=Nosecret -d mysql:5.7.9
若container已建立,需要更新網段
docker network connect new_name mysql579
斷開原本的bridge網段
docker network disconnect bridge mysql579
https://dotblogs.com.tw/swater111/2017/01/03/171042
針對已啟用 docker container 修改 Port
https://roy051023.github.io/2018/01/15/Running-Docker-Change-Port/
docker-machine
https://www.runoob.com/docker/docker-machine.html
操作範例
啟動container範例 (mysql),若沒有image沒有則會直接下載
docker run --name mysql579 -e MYSQL_ROOT_PASSWORD=Nosecret -d mysql:5.7.9
container名稱 = mysql579
root密碼 = Nosecret
版本 = 5.7.9
啟動後無法從windows連線至mysql579
docker run --name mysql800 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Nosecret -d mysql:8.0.0
加上-p 指令是要把container的某個port發佈到host主機上,
例如 -p 3306:3306 就是要把container 上的3306埠發佈在host的3306埠上
此就可以藉由windows的3306連線至container的3306了~
要進入mysql579的mysql指令系統, 可以用一個新指令 docker exec
docker exec -it mysql579 mysql -uroot -p
這個指令的意思是想執行(execute) mysql579這個container裡的mysql指令, -it是互動模式的意思
https://dotblogs.com.tw/swater111/2016/12/29/151738
Linux套件
若要使用netstat
apt-get install net-tools
若要使用ping
apt-get install iputils-ping
Windows Container
https://skychang.github.io/2017/01/06/Docker-Docker_for_Windows_10_First/
Last updated
Was this helpful?