天天看點

【docker】docker基本使用Docker

Docker

What is docker

docker跟虛拟機的差別在于,虛拟機在Host OS上利用虛拟化技術使用hypervisor來部署某個不同的操作系系統,然後再運作app; 這樣往往會占用不少硬體資源;然而docker利用容器的概念,直接将每一個app和lib進行組合形成容器來使用。

我們可以看到虛拟本身就占據了總共7G記憶體,是以我們沒有辦法劃分出更過虛拟機進而部署更多的應用程式,可是我們部署的是應用程式,要用的也是應用程式而不是作業系統。
  • ref
    • 如何通俗解釋docker是什麼
    • 什麼是Docker?看這一篇幹貨文章就夠了!

Related Concepts

  • 鏡像

    鏡像跟壓縮包類似,但是是CD光牒的“提取物”。簡單來說,以前裝系統需要利用CD光牒,而利用虛拟光驅後,直接使用鏡像檔案來安裝。鏡像檔案是無法直接使用的,需要利用虛拟光驅等工具進行解壓才可以

    ref:

    電腦小知識:一步搞懂鏡像檔案

Base use

  • 非root使用者添權重限

    将現有使用者apache加入append組group, docker;

pre-installations

  1. apt-get update

  2. apt-get install vim

  3. install python
    # apt install python-pip	#python 2
     # apt install python3-pip	#python 3
               

    sudo ln -s /usr/bin/pip3 /usr/bin/pip

  4. celery:

    pip install celery==5.2.3

  5. cv2

    apt-get update && apt-get install libgl1

    apt-get install libglib2.0-dev

  • install python
    • docker pull python:3.8

  • docker common commands
    • docker ps -a

    • docker cp 本地檔案路徑 ID全稱:容器路徑

      : file transport.
    • docker run -it --gpus all nvidia/cuda:10.2-base-ubuntu16.04

      : 啟動某個鏡像;
      • docker run -i -t --network host --gpus all mot-service:0811 /bin/bash

    • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

      [email protected]:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
      sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057 
      [email protected]:~$ docker images mymysql:v1
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      mymysql             v1                  37af1236adef        15 seconds ago      329 MB
                 

      -a :送出的鏡像作者;

      -c :使用Dockerfile指令來建立鏡像;

      -m :送出時的說明文字;

      -p :在commit時,将容器暫停。

    • 挂載目錄

      docker run -it --network host -v /home/zzzj/Projects/MOT-service-celery:/home/Projects mot-service:v2 /bin/bash

      Caution: 在挂載目錄時,本地路徑需要寫明。
    • 删除容器

      docker container prune

      : 删除已經停止的容器;
    • 删除鏡像

      docker rmi name

    • 導入鏡像

      docker load --input face_rec.tar

    • 導出鏡像

      docker save > nginx.tar nginx:latest

    • docker run

      /

      docker exec

      “docker run”通常是在新建立的容器中所使用的指令。 它适用于在沒有其他容器運作的情況下,您想要建立一個容器,并且要啟動它,然後在其上運作一個程序。

      “docker exec”适用于在現有容器中運作指令的情況。如果您已經擁有了一個正在運作的容器,并希望更改該容器或從中擷取某些内容,那麼使用“docker exec”指令就非常合适了。

      使用docker run來建立一個容器,然後使用docker exec來進入容器,然後退出容器,并不是導緻容器的關閉。

      #run docker background
      docker run -itd --name ubuntu-test ubuntu /bin/bash
      #into a docker
      docker exec -it 243c32535da7 /bin/bash
                 
  • Errors:
    • ncclSystemError: System call (e.g. socket, malloc) or external library call failed or device error. It can be also caused by unexpected exit of a remote peer, you can check NCCL

      docker run時,調用

      ipc

      通信。
  • ref:
    • Docker 封裝anaconda環境,生成鏡像并打包,純小白一文讀懂(一)
    • Docker 封裝anaconda環境,生成鏡像并打包,純小白一文讀懂(二)
    • docker使用筆記(1):docker介紹與安裝
    • docker學習筆記(2):docker鏡像
    • docker學習筆記(3):Dockerfile詳解
    • docker學習筆記(4):制作mysql鏡像與後續相關維護總結