docker 學習

什麼是 Docker

  1. Docker 屬於「操做系統層面的虛擬化技術」,主要用來對進程進行封裝隔離。因爲隔離的進程獨立於宿主和其它的隔離的進程,所以也稱其爲容器。
  2. 容器內的應用進程直接運行於宿主機的內核,容器內沒有本身的內核,並且也沒有進行硬件虛擬。所以容器要比傳統虛擬機更爲輕便

Docker 的基本概念

  • Docker 鏡像python

    Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。git

  • Docker 容器docker

    鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。bash

  • Docker Registry服務器

    鏡像構建完成後,能夠很容易的在當前宿主機上運行,可是,若是須要在其它服務器上使用這個鏡像,咱們就須要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。一個 Docker Registry 中能夠包含多個倉庫(Repository);每一個倉庫能夠包含多個標籤(Tag);每一個標籤對應一個鏡像。less

Docker 經常使用命令

# 查看 docker 版本
docker version
# 查看docker系統的信息
docker info
# 日誌信息
docker logs
# 查看指定鏡像日誌(id 爲容器 id 或 tag)
docker logs id
# docker 鏡像狀態檢查
service docker status
# 啓動關閉docker
sudo service docker start|stop


# 列出全部的container
docker ps -a  
# 用一行列出全部正在運行的container(容器多的時候很是清晰)
docker ps | less -S
# 列出最近一次啓動的container
docker ps -l 
# 刪除單個容器
docker rm Name/ID
# 刪除全部容器
docker rm `docker ps -a -q` 
# 中止、啓動、殺死、重啓一個容器
docker stop Name/ID  
docker start Name/ID  
docker kill Name/ID  
docker restart name/ID


# 列出鏡像
sudo docker images
-a, –all=false Show all images; –no-trunc=false Don’t truncate output; -q, –quiet=false Only show numeric IDs
# 從dockerhub檢索image
docker search image_name
# 下載image
docker pull image_name
# 刪除一個或者多個鏡像
docker rmi image_name  
-f, –force=false Force; –no-prune=false Do not delete untagged parents
# 顯示一個鏡像的歷史
docker history image_name
# 發佈docker鏡像
docker push new_image_name

docker push dockerhub.yourdomain.com:443/hello.demo.kdemo:v1.0
拉取docker鏡像
$docker pull image_name


# 保存對容器的修改
docker commit
# 保存某個容器成爲一個鏡像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 推送一個容器到中心倉庫
docker login --username=[userName] --password=[pwd] [registryURL]
## 建議登陸後查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器
docker pull [remoteURL]:[imageTag]
# 對比容器的改動
docker diff
# 附加到一個運行的容器上
docker attach

python 鏡像實例構建

在 python 包的目錄,運行如下命令上傳(companyinternal 爲公司內部 pypi )

  • python setup.py sdist upload -v -r companyinternal

docker build

  • docker build -t harbor.company.com/company/test_object:0.2.3.dev1 .

    harbor.company.com/company/ 爲公司的 docker 遠程倉庫地址,「test_object:0.2.3.dev1」爲 工程名:版本號dom

docker push

  • docker push harbor.company.com/company/test_object:0.2.3.dev1

docker 查看鏡像打包的源文件

docker exec -it e493d4e65146 bashui

cd /lib64/python3.4/site-packages/test_objectspa

docker 鏡像上傳

example:操作系統

  • test_object 本地代碼提交至test_for_delay分支

  • 到某機器對應的 project 的裏 git pull,好比到/tmp/test_object下pull代碼

  • cd docker後執行命令:

    • find test_object/dist/ -name "*.tar.gz" | xargs --no-run-if-empty rm
    • (cd test_object && python3 setup.py sdist)
    • dist=ls test_object/dist | tail -n 1
    • cp test_object/dist/$dist resources/test_object.tgz
  • 經過docker images|grep test_object 獲取

  • 開始build:

    • docker build . -t docker-hub-local.company.com:5000/test_object_delay_test:latest
  • 在 a 環境執行:

    • docker push docker-hub-local.company.com:5000/test_object_delay_test:latest
  • 在 b 環境執行:

    • docker pull docker-hub-local.company.com:5000/test_object_delay_test:latest
  • 在m環境檢查:docker images


參考資料:

相關文章
相關標籤/搜索