docker images 镜像官网

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

1、启动docker的命令如下:

docker run -it --gpus all --shm-size=8gb --name [你的名字] python:3.8 /bin/bash

2、带有路径映射的docker启动命令:

docker run -it --gpus all --shm-size=8gb -v [宿主机绝对路径]:[映射到容器内的绝对路径] --name [你的名字] python:3.8 /bin/bash

示例:

docker run -itd --gpus all --shm-size=8gb -v /home/zzk:/home/zzk --name zzk_test python:3.8 /bin/bash

多加了个 -d 是可以让容器在后台运行,确保不会 因为断网退出而中断.

如果退出后,可以用

docker exec -it zzk_test /bin/bash 重新进入。

1、查看英伟达驱动信息:nvidia-smi

2、查看cuda 的版本:nvcc -V

3、查看docker版本: nvidia-docker version

4、查看镜像: docker images

5、cuda的版本

base:基于CUDA,包含最精简的依赖,用于部署预编译的CUDA应用,需要手工安装其他依赖

runtime:基于base,添加了CUDA toolkit共享的库

develop:基于runtime,添加了编译工具链,调试工具,头文件,静态库,用于从源码编译CUDA应用

6、查看容器的显卡信息: nvidia-docker run --rm [镜像ID] nvidia-smi

7、进入docker容器之后退出容器:exit

8、杀掉一个运行中的容器:docker kill

9、查看docker版本:docker --version

10、docker run hello-world 命令执行流程

docker run 改参数 docker run --shm-size_docker

11、docker可以把APP文件打包成一个镜像,以nginx为例,这个镜像里面跑着一个最基本的Linux所需的最小的东西。然后上面跑着一个nginx软件,只不过它是打包好的,我们直接拉下来创建即可。

12、镜像分层

docker run 改参数 docker run --shm-size_容器_02

Nginx、Redis、ES都跑在同一个Linux上,如果有很多容器,那么这些容器就共用一层。比如Nginx、Redis必须有c++环境,那么只需要创建一个c++环境放在同一个镜像层里面,用到C++的软件共用这一层。

docker run 改参数 docker run --shm-size_docker run 改参数_03

13、Volume数据卷——保存数据

容器很容易丢失

把容器和宿主机建立映射关系,把容器里面的数据映射到宿主机上。

在创建容器的时候要指定容器和宿主机的映射,这样容器产生的数据就可以保存到宿主机上。

14、registry可以让我们构建局域网内部的仓库

15、docker pull redis :获取最新的redis镜像

docker pull redis:5 :获取版本为5.0的redis镜像

16、删除镜像:docker rmi redis:5 或者 docker rmi IMAGE ID

删除容器: docker rm 容器名 / 容器ID

IMAGE ID是唯一的

17、搜索镜像:docker search [镜像名]

18、拉取镜像:docker pull [镜像名]或 docker pull [镜像名]:标签

类似:docker pull redis:5

容器

19、docker ps :查看正在运行的容器

docker ps --help

docker ps -a:查看所有容器

docker ps - l :查看最后运行的容器

docker ps -f status=exited:查看停止的容器

20、创建并进入容器

容器运行起来会有一个端口,这个端口是80

docker run --name mynginx -P 80:80 nginx (大写P为随机)

后面的80是容器里面的,映射到外面(宿主机)的80,如果外面的80端口被占用,映射到随便一个端口也可。

进入容器

docker run -it --name 容器名称 镜像名称:标签 /bin/bash

-p是指定映射, -P是随机映射

-t是进入之后直接进入命令行

docker run -it --name mynginx(容器名) -p 80:80 nginx(镜像名)

21、守护方式创建线程

docker run -di --name mynginx -p 80:80 nginx

进入容器

docker exec -it 容器名称/容器ID /bin/bash(相当于cmd的命令行)

cat /etc/nginx/conf.d/default.conf

22、停止与启动容器

docker stop/start 容器名/容器ID

23、文件拷贝

将文件拷贝到容器内-cp

docker cp 需要拷贝的文件或目录 容器名称:容器目录

将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

24、指定目录挂载

docker run -di --name nginx02 -p 81:80 -v nginx (-v:添加目录挂载)

docker run -di --name nginx02 -p 81:80 -v /mydata/docker_nginx/ : /abc/123 nginx(会把宿主机和容器内的文件目录关联起来)

25、匿名挂载

匿名挂载只需要写容器目录即可,容器外对应的目录会在 /var/lib/docker/volumes 中生成

#匿名挂载

docker run -di -v /usr/local/data --name centos7-02 centos:7

#查看 volume 数据卷信息

docker volume ls

docker run -di -v /usr/local/data(容器内的目录) --name nginx05 nginx

26、具名挂载

具名挂载就是给数据卷起了名字,容器外对应的目录会在 /var/lib/docker/volumes 中生成

# 匿名挂载

docker run -di -v docker_centos_data:/usr/local/data --name nginx06 nginx

#查看volume数据卷信息

27、数据卷只读或者读写:

docker run -di --name nginx07 -P -v /mydata/docker_nginx/:/abc:ro nginx

ro : read only rw: read write

28、volumes-from 继承目录卷

# 容器 centos7-01 指定目录挂载

docker run -di -v /mydata/docker_centos/data : /usr/local/data --name 容器名 镜像名

#容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录

docker run -di --volume-from 要继承的容器名 --name 容器名 镜像名

29、查看目录挂载关系

通过 docker volume inspect 数据卷名称 可以查看该数据卷对应的宿主机的目录地址

30、查看容器的IP地址

docker inspect 容器名称|容器ID

直接输出IP

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID

31、删除容器

# 删除指定容器

docker rm 容器名称|容器ID

#删除多个容器

docker rm 容器名称|容器ID 容器名称|容器ID

32、创建容器并拷贝资源

docker commit:从容器创建一个新的镜像

docker build:配合Dockerfile文件创建镜像

33、构建镜像

docker commit -a="mrhelloworld" -m="jdk11 and tomcat9" 容器名 要构建的镜像名

commit:构建镜像

-a:作者

-m:解释说明

步骤(以centos、jdk、tomcat为例):

1、官网下载centos:7 镜像

2、根据官网创建一个容器

3、将宿主机的jdk和tomcat的资源拷贝进容器

4、在容器内部安装jdk和tomcat

5、将这个已安装的jdk和tomcat的容器重新构建为一个新镜像

Dockerfile常用指令

1、from

语法:from <image>:<tag>

指明构建的新镜像来自于哪个基础镜像,如果没有选择tag,那么默认值为latest

如果不以任何镜像为基础,那写法为FROM scratch。官方说明:scratch镜像是一个空镜像,等于从零开始构建属于自己的镜像

2、ADD

语法:ADD <src>.... <dest>

拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个URL,如果把src写成一个url,那么ADD就类似于wget命令,然后自动下载和解压。

示例:

ADD jdk-11.0.6_linux_bin.tar.gz /usr/local/java

3、copy

语法:COPY <src>.....<dest>

拷贝文件或者目录到镜像中。用法同ADD,只是不支持自动下载和解压