1. 程式人生 > 實用技巧 >docker基礎命令學習筆記

docker基礎命令學習筆記

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": {}
    }
]