1. 程式人生 > 實用技巧 >【洛谷2523】[HAOI2011] Problem c(DP水題)

【洛谷2523】[HAOI2011] Problem c(DP水題)

什麼是docker

docker是容器虛擬化技術,可以有多個容器(可以不同功能)且相互隔離,互不影響。容器沒有自己的核心,直接運行於宿主主機的核心。似乎跟虛擬機器有點像。

映象images

映象是一個模板。 

容器containers

    可以把容器看成簡易版的linux環境
    容器是由映象創建出來,一個映象可以創建出多個相同的容器例項,每個容器為獨立的應用程序。容器可以進行編輯,重新打包為映象(建立映象的一種方式,但一般不這麼做)。

倉庫

	倉庫(Respository)是集中存放映象檔案的場所
	倉庫(Respository)和倉庫註冊伺服器(Registry)是有區別的,倉庫註冊伺服器往往存放多個倉庫,每個倉庫又包含了多個映象,每個映象又不停地標籤(tag)
    官網的映象倉庫:https://hub.docker.com/  
    阿里雲映象倉庫:https://cr.console.aliyun.com/cn-hangzhou/images

Centos安裝docker

# 安裝一些必要的系統工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
# 新增軟體源資訊:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新 yum 快取:
yum makecache fast
# 安裝 Docker-ce:
yum -y install docker-ce
# 啟動 Docker 後臺服務:
systemctl start docker
# 測試執行 檢查安裝是否正確 hello-world:
docker run hello-world

幫助命令
docker version    # docker版本資訊
docker info       # docker資訊描述  
docker --help	  # docker幫助命令
docker映象(images)
docker images     # 檢視本地的映象
docker images -qa    # 檢視本地所有映象的Image ID
docker search redis    # 搜尋映象
docker pull redis:latest   # 獲取 redis 5.0.0的映象,latest為最新
docker rmi redis:latest/映象ID    # 刪除redis:latest映象
# 刪除報錯,因為容器正在執行,需要強制刪除
docker rmi -f redis:latest/映象ID   # 強制刪除
docker rmi -f 映象ID1  映象ID2 ..   # 刪除多個
docker rmi -f $(docker images -qa)   # 刪除全部(別真刪完了)
docker 容器命令

有映象才能建立容器,這是根本前提(下載一個centos映象演示,之前我們下載過redis和hello-world)

docker pull centos
docker run -it 67fa590cfc1c   #(映象ID) 啟動並進入centos(也可以用:docker run -it --name mycentos centos)
docker ps        # 檢視正在執行的容器列表(鯨魚背上有哪幾個集裝箱)
docker ps -a     # 檢視正在執行的+歷史上執行的本地容器
docker ps -l     # 檢視上一個本地容器
docker ps -lp    # 檢視上一個容器編號
exit         # 退出容器
ctrl+p+q     # 暫時退出(可以用docker ps檢視一下是否還在執行)
docker start f22cda2d9048    # 啟動容器(容器ID)
docker restart f22cda2d9048   # 重啟容器(容器ID)
docker stop f22cda2d9048    # 停止容器
docker kill f22cda2d9048   # 強制停止 
docker rm f22cda2d9048     # 刪除已停止容器
docker rm -f f22cda2d9048     # 刪除未停止容器
docker rm -f $(docker ps -qa)   # 刪除全部

docker run -d centos   # 後臺執行,啟動守護式容器
docker logs -f -t --tail 容器ID   # 檢視容器日誌
        docker ps
        # 以後臺的形式在centos終端sh執行迴圈每間隔2秒列印一次hello zzyy
        docker run -d centos /bin/sh -c 'while true;do echo hello zzyy;sleep 2;done'
        docker ps
        docker logs  容器ID  # 檢視容器日誌
        docker logs -t  容器ID   # 檢視容器日誌(加時間)
        docker logs -t -f 容器ID   # 檢視容器日誌(不停地追加)
        docker logs -t -f --tail 5 容器ID # 檢視容器日誌(不停地追加,只看倒數5行)
docker top 容器ID	  # 檢視容器內執行的程序(大部分的linux命令在docker裡都可以使用)
docker inspect 容器ID   # 檢視容器內部細節(這兩個命令可以看出centos cmd還在執行剛剛的while語句)
docker attach 容器ID  # 進入正在執行的容器兵役命令列互動
        docker kill 容器ID  
        docker run -d centos /bin/bash   # /bin/bash是直接得到結果
        ctrl+p+q
        docker attach 容器ID
docker exec -it 容器ID   # 在容器外執行(隔山打牛,根本就沒進去,直接拿結果返回宿主機)
        docker exec -it 容器ID ls -l /tmp  # 到這個容器根目錄
        docker exec -it 容器ID /bin/bash 
docker cp 容器ID  # 從容器內拷貝檔案到主機上
        docker cp 容器ID:/tem/yum.log /root

阿里雲映象加速器配置

正常而言,docker是從官網hub.docker.com上面pull的,但是從這個網址上下映象非常慢,所以我們需要用阿里雲映象加速器配置

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://f6ralnxv.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker


再次執行hello-world



這是容器命令的流程
我們再以redis/nginx映象為例建立一個容器(因為centos不用寫埠號,所以為們還要在寫redis/nginx)redis是6379埠,nginx是80埠

docker create -p 16379:6379 --name redis redis:5.0   # 通過映象,建立容器(以redis為例)
# 16379是虛擬機器的埠(可以隨意命名),6379是容器內的埠(redis埠),通過該設定,是將作業系統的16379對映到容器內的6379,我們後面使用redis客戶端連線redis時,連線的是16379
docker run -p 16380:6379 --name redis2 redis:5.0    # 建立並執行容器