美文网首页
2020-04-02 Docker 从入门到放弃

2020-04-02 Docker 从入门到放弃

作者: 沉潜_2f21 | 来源:发表于2020-04-02 10:59 被阅读0次

    Hello Docker

    docker 镜像站

    https://hub.docker.com/search?q=cuda10.1&type=image

    容器添加镜像源:

    docker cp /etc/apt/sources.list 容器ID:/etc/apt/

    2080ti:

    docker run --gpus all -it -v /home/hsc/docker/stylegan2/:/styleganv2 --name stylegan2 e544497892a3 bash

    TiTan:

    docker cp /home/zwt/文档/hsc_200106/sources.list 980a273c53db:/etc/apt/

    1050Ti:

    sudo docker run -it -v /home/odysseywarsaw/Docker/vonmaster2/:/vonmaster2 --name voncode2

    1bd561559e7d /bin/bash

    链接Python

    ln -s /usr/bin/python3.x /usr/bin/python

    链接pip

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

    pip install --upgrade pip

    pip更换为国内源,可以大大的提高安装成功率和速度。

    mkdir ~/.pip

    vim ~/.pip/pip.conf

    [global]

    timeout = 6000

    index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

    trusted-host = pypi.tuna.tsinghua.edu.cn

    watch -n 3 -d nvidia-smi    #每隔3秒刷新一次

    安装部分

    sudo apt-get install -y docker-ce docker-ce-cli containerd.io

    运行hello-world

    docker run hello-world

    Docker镜像拉取国内源--中科大

    sudo touch /etc/docker/daemon.json

    sudo vim /etc/docker/daemon.json

    {

      "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

    }

    添加当前用户进入docker队列

    sudo groupadd docker #添加docker用户组

    sudo gpasswd -a $hsc docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名。

    sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组

    newgrp docker #更新docker用户组

    docker重启

    systemctl restart docker

    验证GPU可用性:

    docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

    使用部分

    运行容器:

    docker run -it 镜像名 /bin/bash

    退出容器: exit    /      Ctrl+P+Q

    查看容器: docker ps -a

    查看运行的容器: docker ps

    重启容器:docker restart 容器ID

    重启容器后进入交互式:docker start -i 5c6ce895b979

    进入容器:docker attach 容器ID

    docker exec -it 容器ID /bin/bash

    执行以下命令会彻底清除所有容器。

    dockersystem prune -a -f

    基础安装

    Dockerfile镜像打包最强操作(仅仅是使用别人制作好的dockerfile)

    sudo docker build -t vonmaster:1.0 -f Dockerfile .

    Ubuntu 18.04安装gcc、g++ 4.8

    https://blog.csdn.net/a145127/article/details/88954122

    容器运行相关配置

    sudo nvidia-docker run -it -v /home/odysseywarsaw/Docker/vonmaster/:/vonmaster --name voncode 1bd561559e7d /bin/bash

    sudo nvidia-docker run -it -v /home/odysseywarsaw/Docker/vonmaster2/:/vonmaster2 --name voncode2 1bd561559e7d /bin/bash

    进入容器

    sudo nvidia-docker exec -it von-master /bin/bash

    关闭容器

    docker stop 0e38a8c93f9f

    删除容器

    nvidia-docker rm a783b17f5c2c

    删除镜像

    docker rmi imageID

    cuda版本

    nvcc -V

    cat /usr/local/cuda/version.txt

    cudnn版本

    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

    查看Nvidia GPU版本

    nvidia-smi

    //10s显示一次

    watch -n 10 nvidia-smi

    docker 打包镜像文件

    保存镜像为文件

    docker save -o 要保存的文件名 要保存的镜像

    eg:docker save -o cc.tar bb:v1.0

    导入文件为镜像

    docker load --input 文件

    或者

    docker load < 文件名

    eg:docker load < cc.tar

    python3.6 + pip

    https://www.jianshu.com/p/2a5cd519e583

    操作指南

    https://www.cnblogs.com/makefile/p/docker-usage.html

    docker run

    docker run [options "o">]  [ "nb">command]  "o">[arg...]

    -a stdin 指定标准输入输出内容类型,可选 STDIN/STDOUT / STDERR 三项;

    -d 后台运行容器,并返回容器ID;

    -i 以交互模式运行容器,通常与 -t 同时使用;

    -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

    --name="nginx-lb" 为容器指定一个名称;

    -p 80:80 将容器端口映射到特定主机;

    --dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;

    --dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;

    -h "mars" 指定容器的hostname;

    -e username="ritchie" 设置环境变量;

    --env-file=[] 从指定文件读入环境变量;

    --cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行;

    --net="bridge" 指定容器的网络连接类型,支持 bridge /host / none/container四种类型;

    docker基础操作

    dockerdocker 2019-12-02 13:43:16

    咸鱼一、创建一个镜像以nginx为例:

    1、首先拉取这个镜像docker

    pull nginx:latest 查看镜像信息

    docker image ls      ##此命令是查看镜像信息

    docker images

    REPOSITORY          TAG                IMAGE ID            CREATED            SIZEnginx         

    latest              568c4670fa80        2 weeks ago        109MB

    2、以此镜像创建一个新的容器这条命令会用

    nginx

    镜像启动一个容器,命名为

    docker_nginx1,并且映射了80端口,这样我们可以用浏览器去访问这个nginx服务器。

    docker run --name docker_nginx1 -d -p 80:80 nginx 查看容器信息

    # docker ps          ##此命令是查看容器信息

    CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS                NAMES85959b6505de        nginx              "nginx -g 'daemon of…"  5 minutes ago      Up 5 minutes        0.0.0.0:80->80/tcp  docker_nginx1

    二、使用Dockerfile

    定制镜像在一个空白目录中,建立一个文本文件,并命名为Dockerfile:

    mkdir mynginxcd mynginxtouch Dockerfile

    编辑Dockerfile文件写入内容

    FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html      ##修改nginx的index.html页面为<h1>Hello, Docker!</h1>

    构建镜像在 Dockerfile

    文件所在目录执行:docker

    build -t nginx:v1 .

    Sending build context to Docker daemon  2.048kBStep 1/2 : FROM nginxlatest: Pulling from library/nginxa5a6f2f73cd8: Pull complete 1ba02017c4b2: Pull complete 33b176c904de: Pull complete Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dbaStatus: Downloaded newer image for nginx:latest ---> 568c4670fa80Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 94ed299f1300Removing intermediate container 94ed299f1300 ---> bedde10cbf46Successfully built bedde10cbf46Successfully tagged nginx:v1

    docker run --name docker_nginx1 -d -p 80:80 nginx:v1 1、FROM

    指定基础镜像所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个

    nginx

    镜像的容器,再进行修改一样,基础镜像是必须指定的。而FROM

    就是指定基础镜像,因此一个 Dockerfile中 FROM 是必备的指令,并且必须是第一条指令。

    2、RUN

    执行命令

    RUN指令是用来执行命令行命令的。由于命令行的强大能力,

    RUN

    指令在定制镜像时是最常用的指令之一。

    三、删除镜像和容器(删除镜像之前一定要先停止容器否则会报错)

    1、错误示例:首先查看镜像信息获取镜像ID:docker

    image ls

    REPOSITORY          TAG                IMAGE ID            CREATED            SIZEnginx              latest              568c4670fa80        2 weeks ago        109MB

    执行删除镜像操作:docker

    rmi 568

    Error response from daemon: conflict: unable to delete 568c4670fa80 (cannot be forced) - image is being used by running container 85959b6505de

    错误信息显而易见,此镜像有映射容器在运行无法删除。所以我们停止容器的运行:查看容器信息,获取容器IDdocker

    ps

    CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS                NAMES85959b6505de        nginx              "nginx -g 'daemon of…"  38 minutes ago      Up 38 minutes      0.0.0.0:80->80/tcp  docker_nginx1

    停止容器运行(停止容器运行使用

    docker

    stop ID 命令,这个

    ID

    就是上面的CONTAINER

    ID 一般只需要写前三位即可)docker

    stop 859

    859

    然后我们再来删除镜像docker

    rmi 568

    Error response from daemon: conflict: unable to delete 568c4670fa80 (must be forced) - image is being used by stopped container 85959b6505de

    发现还是报错,说明仅仅停止容器还是无法删除镜像的,还要删除容器。正确做法如下。

    2、正确示例:如果不停止容器会报如下错误:

    docker ps

    CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS               

    NAMES85959b6505de        nginx              "nginx -g 'daemon of…"  45 minutes ago      Up 9 seconds        0.0.0.0:80->80/tcp  docker_nginx1

    docker rm 859

    Error response from daemon: You cannot remove a running container 85959b6505ded913e361150d0c53e43f57a4ab6ae999eb7b0bdfd825979c0ab2. Stop the container before attempting removal or force remove

    所以要先停止容器

    a、停止容器运行

    docker ps

    CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS               

    NAMES85959b6505de        nginx              "nginx -g 'daemon of…"  45 minutes ago      Up 9 seconds        0.0.0.0:80->80/tcp  docker_nginx1

    docker stop 859

    859

    b、删除容器docker

    rm 859

    859

    c、删除镜像docker

    rmi 568

    Untagged: nginx:latestUntagged: nginx@sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dbaDeleted: sha256:568c4670fa800978e08e4a51132b995a54f8d5ae83ca133ef5546d092b864acfDeleted: sha256:ac0442c0fafd48e24a96fa3099ea7ad20012c8759e1dd03dd387dbfbe382984cDeleted: sha256:6b9d35d8d75115937cd78da275f527cccef672cbd71f34062dffe2e930fd7e13Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3

    删除成功

    进入容器docker

    exec -it 容器名字

    /bin/bash本机文件拷贝到容器docker

    cp d:/www/tao3210/test.php 容器名字:/opt/www容器文件拷贝到本机docker

    cp 容器名字:/opt/www/test.php

    d:/www/tao3210数据卷技术(本地与容器中的映射)要用到必须要授权docker->setting->shareddrivesdocker

    run -v 本地目录:容器目录docker

    run -d -p 9000:5000 -v 本地目录:容器目录

    镜像id制作一个镜像,要双引号不能单引号docker

    commit -a "tao3210" -m "this is my centos" 容器id

    mycentos:v2阿里云->镜像列表->创建镜像仓库将本地镜像推到阿里云仓库先登录阿里云镜像docker

    login --username=youremail@123.com

    registry.cn-hangzhou.aliyuncs.compassword:login

    successeddocker

    tag [ImageId]

    registry.cn-hangzhou.aliyuncs.com/tao3210/mycentos:v2docker

    push

    registry.cn-hangzhou.aliyuncs.com/tao3210/mycentos:v2导出镜像到本地docker

    save imageid -o d:/www/tao3210.tar加载本地镜像文件docker

    load -i d:/www/tao3210.tar

    操作指南

    https://www.cnblogs.com/makefile/p/docker-usage.html

    一、创建一个镜像以nginx为例:

    1、首先拉取这个镜像docker

    pull nginx:latest 查看镜像信息

    docker image ls      ##此命令是查看镜像信息 docker imagesREPOSITORY          TAG                IMAGE ID            CREATED            SIZEnginx              latest              568c4670fa80        2 weeks ago        109MB

    2、以此镜像创建一个新的容器这条命令会用nginx镜像启动一个容器,命名为docker_nginx1,并且映射了80端口,这样我们可以用浏览器去访问这个nginx服务器。docker

    run --name docker_nginx1 -d -p 80:80 nginx 查看容器信息

    # docker ps          ##此命令是查看容器信息CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS                NAMES85959b6505de        nginx              "nginx -g 'daemon of…"  5 minutes ago      Up 5 minutes        0.0.0.0:80->80/tcp  docker_nginx1

    二、使用Dockerfile定制镜像在一个空白目录中,建立一个文本文件,并命名为Dockerfile:

    mkdir mynginxcd mynginxtouch Dockerfile

    编辑Dockerfile文件写入内容

    FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html      ##修改nginx的index.html页面为<h1>Hello, Docker!</h1>

    构建镜像在Dockerfile文件所在目录执行:docker

    build -t nginx:v1 .

    Sending build context to Docker daemon  2.048kBStep 1/2 : FROM nginxlatest: Pulling from library/nginxa5a6f2f73cd8: Pull complete 1ba02017c4b2: Pull complete 33b176c904de: Pull complete Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dbaStatus: Downloaded newer image for nginx:latest ---> 568c4670fa80Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 94ed299f1300

    相关文章

      网友评论

          本文标题:2020-04-02 Docker 从入门到放弃

          本文链接:https://www.haomeiwen.com/subject/dentphtx.html