【洛谷2523】[HAOI2011] Problem c(DP水題)
阿新 • • 發佈:2020-11-04
什麼是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 # 建立並執行容器