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
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:v1docker 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 94ed299f1300docker:如何查看容器的挂载目录
docker inspect container_id | grep Mounts -A 20