Docker技術及其使用

基本概念

Docker鏡像(image)

     Docker 鏡像就是一個只讀的模板。鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用

Docker容器(container)

    Docker 利用容器來運行應用。容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的,保證安全的平臺。

Docker倉庫(repository)

    倉庫是集中存放鏡像文件的場所。有時候把倉庫和倉庫註冊服務器( Registry )混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤 (tag) 。倉庫分爲公開倉庫 (Public) 和私有倉庫 (Private) 兩種形式。最大的公開倉庫是 Docker Hub ,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 Docker Pool 等,可以提供大陸用戶更穩定快讀的訪問。當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下載在另外一臺機器上使用這個鏡像時候,只需需要從倉庫上 pull 下來就可以了。
額概念。

基本的Docker命令

  • Docker的安裝
sudo apt install docker.io
  • Docker啓動及狀態查詢
sudo service docker start
sudo service docker status
  • 查看Docker的版本
sudo docker version
  • 查看本地鏡像
sudo docker images
  • 下載鏡像文件
sudo docker pull ubuntu
  • 運行Ubuntu鏡像
docker run -i -t ubuntu /bin/bash
  • 刪除鏡像文件
sudo docker rmi -f hello-world

 

  • 查看已經啓動的Docker服務(容器)
sudo docker ps –a
  • 停止docker服務
sudo docker stop image-name
  • 登陸Docker
sudo docker login https://hub.docker.com/
  • 保存修改後的Docker容器
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS說明:
        -a :提交的鏡像作者;
        -c :使用Dockerfile指令來創建鏡像;
        -m :提交時的說明文字;
        -p :在commit時,將容器暫停
  • docker可以支持把一個宿主機上的目錄掛載到鏡像裏
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
  • Docker容器的刪除
docker rm CONTAINER ID

 

  • Docker鏡像的刪除
docker rmi
  • Docker容器啓動start/stop/restart
docker start/stop/restart
docker start命令使用-i選項來開啓交互模式
  • 查詢鏡像和容器的詳細信息
docker inspect
docker info
  • 連接正在運行的容器
docker attach CONTAINER ID/name
  • 退出容器不關閉
ctrl + d 退出關閉容器, ctrl + p + q 退出容器不關閉
  • Docker的Ubuntu鏡像安裝的容器無ifconfig命令和ping命令
解決:
apt-get update
apt install net-tools       # ifconfig 
apt install iputils-ping     # ping
  • docker Ubuntu安裝mysql
apt-get update
apt-get install -y mysql-server mysql-client
  • Docker容器和主機文件拷貝
1)從容器內拷貝文件到主機上
    docker cp <containerId>:/file/path/within/container /host/path/target
2)從主機內拷貝文件到容器上
    sudo docker cp host_path containerID:container_path
3)問題 FATA[0000] Error: Path not specified
    Version 1.6.2 doesn't allow copying from host to container, you need to upgrade to at least 1.8 for that support
  • docker版本升級

 

1)、Docker源安裝指定版本:
    sudo apt-get install apt-transport-https
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys     36A1D7869245C8950F966E92D8576A8BA88D21E9
    sudo bash -c "echo deb https://get.docker.io/ubuntu docker main >/etc/apt/sources.list.d/docker.list"
    sudo apt-get update  --更新軟件源
    sudo apt-cache search docker  --查找需要更新的docker版本
    sudo apt-get install lxc-docker-1.9.1
2)錯誤的解決
    docker安裝完成後執行sudo service docker start,提示錯誤:Failed to start docker.service: Unit docker.service is masked.
    解決方案:
    systemctl unmask docker.service
        systemctl unmask docker.socket
        systemctl start docker.service

 

  • docker 容器備份
1)生成docker鏡像
   docker commit -p 30b8f18f20b4 container-backup
2)我們想要在Docker註冊中心上傳或備份鏡像,我們只需要運行 docker login 命令來登錄進Docker註冊中心,然後推送所需的鏡像即可
    (1)docker login
    (2)docker tag a25ddfec4d2a arunpyasi/container-backup:test
        (3)docker push arunpyasi/container-backup
3)如果我們不想備份到docker註冊中心,而是想要將此鏡像保存在本地機器中,以供日後使用,那麼我們可以將其作爲tar包備份。要完成該操作,我們需要運行以下 docker save 命令。
          docker save -o ~/container-backup.tar container-backup
          tar -zcvf ubuntu2-backup.tar.gz container-backup.ta
  • docker 恢復容器
1)在我們成功備份了我們的Docker容器後,我們現在來恢復這些製作了Docker鏡像快照的容器。如果我們已經在註冊中心推送了這些Docker鏡像,那麼我們僅僅需要把那個Docker鏡像拖回並直接運行即可。
    docker pull arunpyasi/container-backup:test
2)如果我們將這些Docker鏡像作爲tar包文件備份到了本地,那麼我們只要使用 docker load 命令,後面加上tar包的備份路徑,就可以加載該Docker鏡像了。
        tar -zxvf ubuntu2-backup.tar.gz 
    docker load -i ~/container-backup.tar
3)使用docker image查看

extc 命令

使用attach命令經常會卡段,可以使用exec命令替代

docker exec -it ubuntu /bin/bash

 上面用attach進入的用exit會退出容器必須用ctrl P Q退出才能繼續後臺運行,exec的 用exit也不會真正退出容器繼續後臺運行  用name或id都可以

  • 常用命令
docker run --name ubuntu -it ubuntu:16.04 /bin/bash
docker exec -it 96740370a5da /bin/bash
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章