docker

  1. shartup

    • 部署方案

      • 古早年代

      • 虚拟机

      • docker

    • image镜像 & container容器 & registry仓库

  2. 常用命令

    • 拉镜像
      • docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
      • 地址可以是官方地址,也可以是第三方(如Harbor)
      • 仓库名由作者名和软件名组成(如zhangruiming/skin)
      • 标签用来指定某个版本的image,省略则默认latest
    • 列出所有镜像
      • docker images
    • 删除镜像
      • docker rmi [-f] [镜像id]
      • 删除镜像之前要kill/rm所有使用该镜像的container:docker rm [容器id]
    • 运行镜像并创建一个容器
      • docker run [-it] [仓库名] [命令]
      • 选项 -it:为容器配置一个交互终端
      • 选项 -d:后台运行容器,并返回容器ID(不直接进入终端)
      • 选项 —name=’xxx’:为容器指定一个名称
      • 选项-v /host_dir:/container_dir:将主机上指定目录映射到容器的指定目录
      • [命令]参数必须要加,而且要是那种一直挂起的命令(/bin/bash),如果是ls/cd/直接不填,那么命令运行完容器就会停止运行,docker ps -a查看状态,发现都是Exited
    • 创建容器
      • docker run
    • 查看所有容器
      • docker ps
    • 启动一个已经停止的容器/停止正在运行的容器
      • docker start [容器id]
      • docker stop [容器id]
    • 进入容器
      • docker exec -it [容器id] [linux命令]
    • 删除容器
      • docker rm [容器id]
    • 删除所有不活跃的容器
      • docker container prune
    • 提交镜像到远端仓库
      • docker tag [镜像id] [用户名]/[仓库]:[标签] # 重命名
      • docker login # 登陆用户
      • docker push
  3. 案例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # 拉镜像
    docker pull 地址/仓库:标签

    # 显示镜像
    docker images

    # 运行指定镜像
    docker run -itd --name='test' 地址/仓库:标签

    # 查看运行的容器
    docker ps

    # 进入容器
    docker exec -it 容器id或name /bin/bash

    # 一顿操作完退出容器
    exit

    # 将修改后的容器保存为镜像
    docker commit 容器id或name 新镜像名字
    docker images可以看到这个镜像了

    # 保存镜像到本地
    docker save -o tf_torch.rar tf_torch

    # 还原镜像
    docker load --input tf_torch.tar

    # 重命名镜像
    docker tag 3db0b2f40a70 amberzzzz/tf1.14_torch1.4_cuda10.0:v1

    # 提交镜像
    docker push amberzzzz/tf1.14-torch0.5-cuda10.0:v1
    1. dockerfile

      • Dockerfile 是用来说明如何自动构建 docker image 的指令集文件

      • 常用命令

        • FROM image_name,指定依赖的镜像
        • RUN command,在 shell 或者 exec 的环境下执行的命令
        • COPY srcfile_path_inhost dstfile_incontainer,将本机文件复制到容器中
        • ADD srcfile_path dstfile_incontainer,将本机文件复制到容器中,src文件不仅可以是local host,也可以是网络地址
        • CMD [“executable”,”param1”,”param2”],指定容器启动默认执行的命令
        • WORKDIR path_incontainer,指定 RUN、CMD 与 ENTRYPOINT 命令的工作目录
        • VOLUME [“/data”],授权访问从容器内到主机上的目录
      • basic image

        • 从nvidia docker开始:https://hub.docker.com/r/nvidia/cuda/tags?page=1&ordering=last_updated&name=10.

        • 选一个喜欢的:如docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04

        • 然后编辑dockerfile

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
          MAINTAINER amber <amber.zhang@tum.de>

          # install basic dependencies
          RUN apt-get update
          RUN apt-get install -y wget vim cmake

          # install Anaconda3
          RUN wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh -O ~/anaconda3.sh
          RUN bash ~/anaconda3.sh -b -p /home/anaconda3 && rm ~/anaconda3.sh
          ENV PATH /home/anaconda3/bin:$PATH
          # RUN echo "export PATH=/home/anaconda3/bin:$PATH" >> ~/.bashrc && /bin/bash -c "source /root/.bashrc"

          # change mirror
          RUN mkdir ~/.pip \
          && cd ~/.pip
          RUN echo '[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple/' >> ~/.pip/pip.conf

          # install tensorflow
          RUN /home/anaconda3/bin/pip install tensorflow-gpu==1.8.0
      * 然后build dockerfile

          
1
docker build -t <docker_name> .