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

Hello Docker

使用Docker容器配置ssh服务,远程直接进入容器

https://blog.csdn.net/qq_33259057/article/details/124737659

王者操作:在web端口访问支持的情况下,容器内部增设AI支持,双端口,处理ssh和web api调用容器内部AI服务

代码加烟法力无边:docker容器设置ssh登录(ubuntu/centos)

https://blog.csdn.net/zhongguootngxu/article/details/118019457

5.启动SSH

/etc/init.d/ssh start

6.设置开机自启SSH

sudo systemctl enable ssh

7.容器内部添加新用户nest01,执行sudo

安装:apt-get install -y sudo

# 在/etc/sudoers文件中找到root ALL=(ALL:ALL) ALL,在该行下面添加:nest01 ALL=(ALL:ALL) ALL


为新创建的用户添加sudo权限

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 '

Hello, Docker!

' > /usr/share/nginx/html/index.html      ##修改nginx的index.html页面为

Hello, Docker!

构建镜像在 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 '

Hello, Docker!

' > /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 [email protected]

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 '

Hello, Docker!

' > /usr/share/nginx/html/index.html      ##修改nginx的index.html页面为

Hello, Docker!

构建镜像在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 '

Hello, Docker!

' > /usr/share/nginx/html/index.html ---> Running in 94ed299f1300

docker:如何查看容器的挂载目录

docker inspect container_id | grep Mounts -A 20

你可能感兴趣的:(2020-04-02 Docker 从入门到放弃)