建立docker 網路
docker network create 網路名稱
例如:docker network create net1
建立mysql (mariadb)容器及啟動時的選項與參數
docker run --name 容器名稱 -dit --net=網路名稱 -e MYSQL_ROOT_PASSWORD=mysql的管理員密碼 -e MYSQL_DATABASE=資料庫網域名稱 -e MYSQL_USER=mysql的使用者名稱 -e MYSQL_PASSWORD=mysql的使用者密碼 mysql(mariadb) --character-set-server=字元編號 --collation-server=字符對照表 --default-authentication-plugin=驗證方式
例如:docker run --name mysqltest -dit --net=net1 -e MYSQL_ROOT_PASSWORD=Mysqltest1@ -e MYSQL_DATABASE=wordpressdb -e MYSQL_USER=wordpress001 -e MYSQL_PASSWORD=testPress mysql(mariadb) --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
建立程式容器(container)
例如建立wordpress容器與mysql、網路連線
docker run --name wordpress01 -dit --net=net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysqltest -e WORDPRESS_DB_NAME=wordpressdb -e WORDPRESS_DB_USER=wordpress001 -e WORDPRESS_DB_PASSWORD=testPress wordpress
確認容器執行狀況
docker ps 在status 是否Up
docker ps -a 列出容器清單在status 有Up或Exited
刪除容器--必須先停止再刪除,docker stop 容器名稱,docker rm容器名稱
例如:docker stop wrodpress01
docker stop mysqltest
docker rm wordpress01
docker rm mysqltest
刪除映像檔(image)
docker image rm 映像檔名稱
例如:docker image rm mysql,docker image rm wordpress
刪除網路
docker network rm 網路名稱
例如:docker network rm net1
顯示清單
容器:docker ps -a
映像檔:docker image ls
網路:docker network ls
卷宗:docker volume ls
容器與主機間的檔案複製, CP 源頭 目的地
docker cp 複製源頭 複製目的地
docker cp 主機端路徑 容器名稱:容器端路徑 主機-->容器
docker cp 容器名稱:容器端路徑 主機端路徑 容器-->主機
掛載儲存空間分卷宗掛載及繫結掛載
卷宗掛載:在Docker Engine 管理空間中建立卷宗,再當作硬碟掛載至容器
常用於放置想要臨時使用的資料、少用但不可刪除的檔案
繫結掛載:在安裝Docker的電腦,不再Docker Engine 管理下的既存目錄掛載至容器
常用來存放需要頻繁使用的檔案
建立卷宗(卷宗掛載)
docker volume create 卷宗名稱
例如:docker volume create appvol01
顯示卷宗的詳細資訊
docker volume inspect 卷宗名稱
例如:docker volume inspect appvol01
刪除卷宗(卷宗掛載)
docker volume rm 卷宗名稱
例如:docker volume rm appvol01
掛載儲存空間指令
docker run -it --privileged=true /宿主機絕對路徑目錄:/容器內目錄 鏡像名
默認目錄為rw
繫結掛載:docker run (省略) -v 實際的儲存空間路徑:容器的儲存空間路徑 (省略) 鏡像名
卷宗掛載:docker run (省略) -v 卷宗名稱:容器的儲存空間路徑 (省略) 鏡像名
建議加載--privileged=true
例如:docker run --name web1 -d -p 8081:80 -v appvol01:/usr/local/apache2/htdocs --privileged=true httpd
docker run -d -p 5000:5000 -v /abcd/myregistry/:/tmp/registry --privileged=true registry
/abcd/myregistry/:/tmp/registry-->宿主機的路徑:容器內的路徑
--privileged=true-->特權為true,不加也可以,建議加入
限制容器內部,只能讀取不能寫
docker run -it --privileged=true -v /宿主機的路徑:/容器內的路徑:ro 鏡像名
ro=read only
容器繼承
docker run -it --privileged=true --name=u1 ubuntu
docker run -it --privileged=true --volume-from u1 --name=u2 ubuntu
u1為父,u2為子;u1關機,u2與宿主機繼續通訊;u1啟動後,資料仍保持最新狀態及共享
顯示卷宗的詳細資料
例如:docker volume inspect appvol01
出現
[
{
"CreatedAt": "2022-06-01T06:30:40Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/appvol01/_data",
"Name": "appvol01",
"Options": {},
"Scope": "local"
}
]
顯示容器的詳細資料
例如:docker container inspect web1
省略...
"Mounts": [
{
"Type": "volume",
"Name": "appvol01",
"Source": "/var/lib/docker/volumes/appvol01/_data",
"Destination": "/usr/local/apache2/htdocs",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
省略...
以Dockerfile建立映像檔
準備名為dockerfile的檔案,再以build 指令建立映像檔
docker build -t 建立的映像檔名稱 所需資料夾路徑
-t-->tag,標籤資訊
dockerfile內容範例
FROM 映像檔名稱
COPY 複製源頭路徑 複製目的地路徑
RUN Linux 指令
CMD["executable","param1","param2"]
......
docker build -f e:\ubuntutest\dockerfile -t ubuntu:1.2 . --最後 . 表示當前目錄
docker build -t ubuntu:production -f dockerfile.production . --想建置的是production的映像檔
刪除所有容器(Container)
docker rm -f $(docker ps -q)
完整版
docker container rm --force $(docker container list --all --quiet)
刪除停止容器(Container)
docker container prune
清理不需要的映像檔
docker image prune -->只會刪除dangling的映像檔
docker image prune --all -->清除所有沒有執行的映像檔
清理系統
docker system prune -->一次清除停止的容器,無名的映像檔,無名快取,沒有使用到的虛擬網路,只有volume沒被清除。
Docker scan file
例如: docker scan --file dockerfile myubuntu:1.2
Docker container 退出
1.退出仍執行:Ctrl+P和Ctrl+Q分别按,可以退出容器,讓容器仍繼續執行,如要進入使用 docker attach 容器名/id 或使用docker exec -it 容器名/id /bin/bash,退出下exit時,容器繼續執行(建議使用此方案)
2.退出不執行:Ctrl+D和exit退出容器,不運行、在容器里面退出可以使用docker stop 容器名/id
導出導入容器
導出-->docker export 容器名/id > 文件名.tar
導入-->cat 文件名.tar | docker import - 鏡像用戶/鏡像名:鏡像版本號
用commit產生新的鏡像(image)
docker commit -m="提交的描述訊息" -a="作者" 容器名/id 要創建的目標鏡像名:[標籤名(TAG)]
1.Docker registry 建置私有倉庫
docker pull registry
docker run -d -p 5000:5000 -v /aaa/myregistry/:/tmp/registry --privileged=true registry:2
默認情況下,倉庫被創建在容器的/var/lib/registry目錄下,建議自行用容器映射,方便於宿主機聯調
2.驗證一下
curl -XGET http://宿主機IP:5000/v2/_catalog
出現{"repositories".[]} 表示目前為空
3.將image推送至私有倉庫
docker tag <鏡像名:tag> registryIP:5000/<鏡像名:tag>
4.修改文件可以使之支持http
vi /etc/docker/daemon.json
加入
{
".....................................[] ,
"insecure-registries":["registryIP:5000"]
}
重啟docker
sudo systemctl restart docker
5.推送鏡像到私有倉庫
docker push 鏡像名(registryIP:5000/鏡像名:tag)
6.驗證一下,是否有上傳成功
curl -XGET http://宿主機IP:5000/v2/_catalog
出現{"repositories".[鏡像名]} 表示目前OK
7.測試將鏡像送到本地
docker pull registryIP:5000/鏡像名:tag