docker基礎命令學習筆記
阿新 • • 發佈:2021-01-20
Docker 文件地址
#docker 文件地址
https://docs.docker.com/
#docker 基本命令參考文件
https://docs.docker.com/engine/reference/commandline/
Docker 安裝-ubuntu版本
刪除原有版本
sudo apt-get remove docker docker-engine docker.io containerd runc
安裝需要的安裝包
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
設定映象的倉庫(使用阿里雲倉庫)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新包索引
sudo apt-get update
安裝 docker-ce 社群版本 ee-企業版本
sudo apt-get install docker-ce docker-ce-cli containerd.io
驗證 hello-world
#執行容器,如果找不到映象,會從映象倉庫瞎子
sudo docker run hello-world
#檢視映象
sudo docker images
EPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
解除安裝docker
解除安裝依賴
sudo apt-get purge docker-ce docker-ce-cli containerd.io
刪除目錄
sudo rm -rf /var/lib/docker
Docker 安裝 - Centos 版本
刪除原有版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-enginesudo apt-get remove docker docker-engine docker.io containerd runc
安裝需要的安裝包
sudo yum install -y yum-utils
設定映象的倉庫(使用阿里雲倉庫)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新包索引
sudo yum makecache fast
安裝 docker-ce 社群版本 ee-企業版本
sudo yum install docker-ce docker-ce-cli containerd.io
啟動docker
sudo systemctl start docker
驗證 hello-world
sudo docker run hello-world
檢視docker映象
sudo docker images
EPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
解除安裝docker
解除安裝依賴
sudo yum remove docker-ce docker-ce-cli containerd.io
刪除目錄
sudo rm -rf /var/lib/docker
Docker 映象加速
Centos 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 詳細地址登入阿里雲檢視
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 詳細地址登入阿里雲檢視
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker 常用命令
docker 基本命令總覽
幫助命令
docker version
docker info
docker 命令 --help
映象命令
檢視映象
docker images #檢視映象
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
REPOSITORY 映象的倉庫源
TAG 映象的標籤
IMAGE ID 映象的ID
CREATED 映象的建立時間
SIZE 映象的大小
引數
-a 顯示所有映象
-q 只顯示ID
# 詳細文件地址
# https://docs.docker.com/engine/reference/commandline/images/
下載映象
docker pull # 下載映象
docker pull mysql:5.7 執行下載版本
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/pull/
刪除映象
docker rmi -f 映象ID1 映象ID2 映象IDn # 刪除指定的映象
sudo docker rmi -f $(sudo docker images -aq ) #刪除所有
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/rmi/
構建映象
sudo docker build -f dockerfile_name -t name:[tag]
#詳細文件地址
#https://docs.docker.com/engine/reference/commandline/build/
搜尋映象
# docker 搜尋命令
sudo docker search 映象名稱
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/search/
容器命令
新建容器並啟動
sudo docker run [引數] image
#引數說明
--name="name" 容器名字 用來區分容器
-d 後臺執行方式
-it 使用互動方式,進入容器檢視內容
-p 指定容器的埠號
[主機ip]:[主機埠]:[容器埠]
[主機埠]:[容器埠]
[容器埠]
-P 隨機指定埠
-d 後臺啟動
-v 資料卷掛載
-e 環境配置 (例如:配置mysql的密碼)
# 測試並進入容器
sudo docker run -it centos /bin/bash
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/run/
資料卷
#關於資料卷的解釋: 資料卷就是資料夾的資料共享,多個容器可以掛載同一個目錄共享資料,或者容器和主機宿主共享資料
#資料卷的例子
#測試 制定路徑掛載
#sudo docker run -it -v 主機目錄:容器內目錄 -p 主機埠:容器埠
sudo docker run -it -v /home/ceshi:/home/ceshi centos /bin/bash
# 檢視所有的卷的情況
sudo docker volume ls
DRIVER VOLUME NAME
local juming-nginx
#匿名掛載:
-v /etc/nginx # 只填寫容器內路徑
sudo docker run -d -P --name nginx01 -v /etc/nginx nginx #例子匿名掛載
#具名掛載:
-v /etc/nginx:/etc/nginx #卷名:容器內路徑
sudo docker run -d -P --name nginx04 -v juming:/etc/nginx nginx #例子具名掛載
#制定具體路徑掛在
-v 主機路徑:容器內路徑
sudo docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name=mysql01 mysql:5.7
#改變讀寫許可權
-v juming:/etc/nginx:ro
-v juming:/etc/nginx:rw
ro # read only 路徑內容只能通過宿主機來操作
rw # read write 改變讀寫許可權
# 檢視具體的卷的資訊
$ sudo docker volume inspect juming-nginx
[
{
"CreatedAt": "2020-12-27T21:09:20+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
所有的 匿名和具名的卷都在: /var/lib/docker/volumes 下
列出所有執行中的docker
docker ps # 列出所有正在執行的docker
-a #列出所有容器 執行中的容器 + 歷史執行過的容器
-n=? # 顯示最近建立的n個人容器
-q # 只顯示容器的編號
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/ps/
退出容器
exit #停止並退出
Ctrl + P + Q # 不停止退出
刪除容器
sudo docker rm 容器id # 刪除指定的未執行的容器
sudo docker rm -f 容器id # 強制上出制定容器
sudo docker rm -f $(docker ps -aq) # 刪除所有
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/rm/
啟動和停止操作
docker start 容器id #啟動容器
docker restart 容器id #重啟容器
docker stop 容器id #停止容器
docker kill 容器id #殺死容器程序
進入容器
# 進入一個容器,首先這個容器必須是啟動的
sudo docker exec -it 容器id /bin/bash
#進入正在執行的終端
sudo docker attach 容器id
#例子
docker exec -it af8e69c9c428 /bin/bash
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/exec/
檢視日誌
# docker 檢視容器日誌
sudo docker logs
#例子, 執行一個容器,執行無線迴圈,並檢視日誌
sudo docker run --name test -d centos sh -c "while true; do $(echo date); sleep 1; done"
sudo docker logs -f -t --tail 10 6f47321012d8
-f 跟蹤日誌輸出
-t 顯示時間戳
--tail 10 #顯示10條記錄
#日誌
# https://docs.docker.com/engine/reference/commandline/logs/
檢視容執行容器資訊
docker ps 容器id
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/ps/
檢視映象的元資料
sudo docker inspect 容器id
#詳細文件地址
#https://docs.docker.com/engine/reference/commandline/inspect/
從檔案中拷貝檔案到主機
sudo docker cp 容器id:容器內路徑 目標主機路徑
#詳細文件地址
# https://docs.docker.com/engine/reference/commandline/cp/
檢視docker cup狀態
sudo docker stats 容器id #檢視docker 耗費資源情況 ,容器id為可選項
# 詳細文件地址
# https://docs.docker.com/engine/reference/commandline/stats/
commit 映象
docker commit 提交容器成為一個新的映象
#命令和git的原理相似
docker commit -m="提交的描述資訊" -a="作者" 容器id 目標映象名:[TAG]
# 詳細文件地址
# https://docs.docker.com/engine/reference/commandline/commit/
Dockerfile
編寫 dockerfile 的基本指令
FROM #基礎映象,從一個最基礎的映象構建
MAINTAINER #映象作者 例如:lvlvstart<[email protected]>
RUN #構建映象需要執行的指令
ADD #新增內容
WORKDIR #映象的工作目錄,docker run 進入的開始目錄
VOLUME #掛載的目錄
EXPOSE #埠配置
CMD #需要執行的命令容器執行的時候,替換命令
ENTRYPOINT #執行的命令 ,容器執行的時候追加命令
ONBUILD #在構建過程中除非的指令
COPY #類似Add,將檔案拷貝到映象中
ENV #構建的時候,設定環境變數
利用dockerfile 構建一個 spring boot 的 hello world
#建立一個sprong boot web 的工程 並打包 略
#編寫DockerFile
vim Dockerfile
FROM java:8
COPY *.jar /hello_app.jar
CMD ["--server-port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/hello_app.jar"]
#構建映象
sudo docker build -t helloworld .
#檢視構建成功的映象
super@super-TM1707:~/dockerfile/helloworld$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
helloworld latest 69aa8ec89cb1 2 minutes ago 643MB
sudo docker run -d -P --name hello helloworld
Docker 網路
#docker 預設的網絡卡docker0 , 使用docker0 進行docker容器間的通訊
#docekr 的網路預設採用橋接模式
#docker 使用的是 evth-pair 技術, 提供一對虛擬介面,一般的橋接技術都是採用的這種方式
建立網路命令
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--driver 網絡卡模式
bridge 橋接模式
--subnet 設定網段
--gateway 設定閘道器
#最後跟上自定義的網路名字
#詳細名字
https://docs.docker.com/engine/reference/commandline/network/
使用自定義網路
docker run -d -P --name tomcat01 --net mynet tomcat
#自定義網路 不用過多的設定,多個容器間就可以互相聯通
檢視自定網路
docker network inspect mynet
[
{
"Name": "mynet",
"Id": "c4f35d15b8c97a764aef8af015d8e9540c500cde72111cfae044cdd67fafe8e1",
"Created": "2020-12-31T11:32:09.545307634+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]