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