【docker】docker基本使用

Docker

What is docker

docker跟虚拟机的区别在于,虚拟机在Host OS上利用虚拟化技术使用hypervisor来部署某个不同的操作系系统,然后再运行app; 这样往往会占用不少硬件资源;然而docker利用容器的概念,直接将每一个app和lib进行组合形成容器来使用。

我们可以看到虚拟本身就占据了总共7G内存,因此我们没有办法划分出更过虚拟机从而部署更多的应用程序,可是我们部署的是应用程序,要用的也是应用程序而不是操作系统

  • ref
    • 如何通俗解释docker是什么
    • 什么是Docker?看这一篇干货文章就够了!

Related Concepts

  • 镜像
    镜像跟压缩包类似,但是是光盘的“提取物”。简单来说,以前装系统需要利用光盘,而利用虚拟光驱后,直接使用镜像文件来安装。镜像文件是无法直接使用的,需要利用虚拟光驱等工具进行解压才可以
    ref:
    电脑小知识:一步搞懂镜像文件

Base use

  • 非root用户添加权限
    将现有用户apache加入append组group, docker;
      usermod -a -G apache 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]]

      runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
      sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057 
      runoob@runoob:~$ 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镜像与后续相关维护总结

你可能感兴趣的:(docker,docker,容器)