1. 程式人生 > 實用技巧 >Docker-基礎命令

Docker-基礎命令

一、docker基本組成

映象(image)

映象就好比是一個模板,可以通過這個模板來建立容器服務。

比如tomcat映象==》run==》tomcat01容器(提供服務)。

可以通過這個映象可以建立多個容器(最終服務的執行就是在容器中)

容器(container)

利用容器技術,獨立執行一個或者一個組應用。通過映象來建立。目前可以將其理解為一個簡易版的各種環境

倉庫(repository)

存放映象的地方,分共有倉庫和私有倉庫

Docker與VM的比較

1.docker有比虛擬機器更少的抽象層
2.docker直接使用宿主機的核心

二、docker映象基本命令

docker version  # 檢視版本
docker info     # 檢視詳情

docker images   # 檢視映象
	引數:-a   顯示所有映象
		 -q   只顯示映象id
		 -aq  連用表示顯示所有映象的id


docker pull    # 從倉庫拉去映象,這個倉庫可以自己配置源
docker pull mysql:5.7 拉取mysql,指定版本,沒寫版本預設最新版


docker rmi -f 映象id 映象id 映象id 映象id# rmi=remove images方便記憶
docker rmi -f $(docker images -aq) 刪除所有映象


docker image prune 引數
-a:刪除所有未被使用的映象
-f:強制刪除

docker search 映象名
docker search -f is-official=true redis 搜尋官方映象 f相當於filter
docker search -f starts=100 搜尋收藏數大於一百的
docker search redis limit 5

docker tag [原映象倉庫url]/[原名稱空間]/[原倉庫名稱]:[版本號] [新的名字]
docker tag redis:v2  # 例子

docker history 

三、docker容器命令

docker run 命令
        引數
        --name="test1"  #容器名字,將名稱加入docker dns中
        -d  後臺方式執行,即用守護程序的方式執行一個容器
        -it  使用互動方式執行,進入容器檢視內容
        -p  小寫,指定容器埠
            -p ip:主機埠:容器埠
            -p 主機埠:容器埠(常用)
            -p 容器埠
            容器埠

        -P  大寫,隨機埠
        -v  掛載儲存卷
        比如部署django,檔案可以使用我們主機的,而環境用docker的
        docker run  -v 主機目錄:容器內目錄 

        -e  在容器內設定一個環境變數
        docker run -d -e NGINX_VERSION=1.19.5 nginx:1.19.5
        比如我們登陸mysql的時候是需要賬號密碼的,我們在啟動mysql服務的時候就可以利用-e把mysql的密碼寫
        進環境變數
        docker run -d -P -e:MYSQL_ROOT_PASSWORD=123456 mysql:latest 

        docker run -it centos /bin/bash # -it使用互動方式執行,進入容器檢視內容

exit      # 退出容器
ctrl+p+q  # 容器不停止退出

docker ps # 當前在執行的容器
docker ps -a # 當前在執行的容器+曾經執行過的容器
        -n=2 顯示最近的兩個容器
        -q 顯示容器的編號
        -aq 顯示所有容器的編號


docker rm 容器id  # 刪除容器
docker rm -f $(docker ps -aq)     # 刪除所有容器
docker ps -aq | xargs docker rm   # 刪除所有容器

啟動和停止容器的操作
docker start 容器id     # 啟動
docker restart 容器id   # 重啟
docker stop 容器id 	  # 停止
docker kill 容器id  	  # 強制停止


後臺啟動容器
docker run -d  映象名
docker run -d centos
# docker ps會發現centos已經停止了,是因為docker容器在後臺執行的時候必要要有一個
# 前臺程序,docker發現沒有應用,就會自動停止


docker logs 	# 檢視日誌
# 造點日誌資料
docker run -d centos /bin/sh -c "while true;do echo 123;sleep 1;done"
docker logs -ft --tail 10 容器id  # 列印最後十行日誌


docker top 容器id  # 檢視容器中的程序資訊


docker inspect 容器id  # 檢視docker容器的元資料,出來的是json格式


# 進入當前正在執行的容器
# 通常我們容器是在後臺方式執行,有時候需要進入容器,修改一些配置等
docker exec -it 容器id /bin/bash  # 方式一
docker attach 容器id  # 方式二

# 區別:
exec進入容器後開啟一個新的終端,可以在裡面操作,是常用的
attach進入容器正在執行的終端,不會啟動新的程序


# 從容器中拷貝檔案到主機上,拷貝的話和容器是否執行沒關係,就算關了也可以拷貝出來
docker cp 容器id:容器內的路徑 主機的路徑



當容器生命週期結束的時候,有時候我們就不要這個容器了,比如我們stop掉一個容器,使用docker ps
命令確實看不到他了,但是使用-a引數,還是可以看到,說明這個容器停止之後還是在我們機子上佔著空間的。
如果我們用再使用這個容器,其實重新run一個就行了,因為我們都是通過映象來啟動的,重新起一個就是一模一樣的。
設定--rm引數即可

docker run --rm -d redis


# 儲存我們的容器為映象
export 和 import
docker export 容器id或容器名稱 > 壓縮包名字
docker import 壓縮包 映象名字可包含路徑

docker export redis > test1.tar
docker import test1.tar test/redis1:v1

# export匯出的是壓縮包,commit匯出的是映象,是不同的

# 匯出映象為壓縮包
docker save 映象名字或者id > 壓縮包名稱
	引數-o 指定在一個壓縮包內儲存多個映象
docker load 壓縮包名稱
	引數-i 解壓多個映象的壓縮包

docker save test/reids:v1 > test2.tar
docker load < test2.tar
docker load -i test2.tar


export和save區別
export只儲存映象,save是完全儲存,包括名字,id,歷史記錄等等,所以兩者儲存的檔案大小不同save會更大
import的時候可以重新命名,load不行,原因基於第一條

save和export使用場景
1打包映象一般用save,打包容器一般用export
2儲存資訊需要歷史資訊,名字等等,使用save