1.镜像操作
镜像名称分成两个部分:[repository]:[tag]
- repository指的是镜像名称
- tag指的是镜像的版本
比如:mysql:5.7 其中mysql就是repository,而5.7指的就是tag
注意:以后在输入镜像名称的时候,都需要按照这个模式来输,假如,不指定tag,那么就默认采用latest版本,也就是最新版本
接下来,按照上述的结构图,来介绍下各个命令具体使用方式
1.1.拉取镜像
docker pull:用来从docker仓库里拉取镜像,具体的拉取命令,我们可以上dockerhub官网上查看,比如nginx的拉取命令,如下所示:
dockerhub官网上的命令没有指定tag,那就是默认采用latest版本
1.2.查看/删除镜像
从仓库拉取到了镜像之后,我们可以查看一下本地仓库已有的镜像
docker images:用来查看本地仓库已有的镜像
- 可以看到有镜像的名称,版本,id,创建时间,大小的相关信息
docker rmi 镜像名:删除镜像
1.3.压缩/解压镜像
我们想让其他人使用镜像,除了可以把镜像push到docker仓库里之外,还能将其压缩成一个文件,放在u盘里拷到其他人电脑里,那么压缩和解压的操作怎么做?如下:
docker save -o 指定压缩的文件 指定要压缩的镜像:将指定的镜像压缩成指定的文件
docker load -i 压缩文件名:解压指定的镜像文件
1.4.查看帮助文档
当我们忘记相关指令的具体用法的时候,我们可以查看帮助文档,比如我想查看docker save的具体用法,那么我可以输入docker save --help的指令
2.容器操作
区分一下暂停和停止的区别,如果是暂停,则操作系统会把容器内的进程挂起,cpu也不会把这一块内存回收,如果是停止,则进程会被直接杀死,内存也会被回收,就好比你在看电视的时候,把电视暂停和把电视关机的区别
docker logs:查看容器运行日志docker ps:查看所有运行的容器及其状态
docker exec:进入容器执行命令
docker rm:删除指定容器
2.1.创建容器
docker run --name 容器名称 -p 80:80 -d nginx
- docker run:创建并运行一个容器
- --name:给容器起一个名字
- -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
由于容器是对外隔离的,所以我们没有办法直接访问这个容器,所以做了端口映射,将宿主机的端口作为容器端口的代理,当我们访问宿主机的端口时,就能被映射到容器端口
- -d:表示后台运行容器
- nginx:表示镜像名称,这里是nginx这个镜像
运行创建容器的命令之后,会给我们一个容器的id
2.2.查看容器状态
docker ps:查看容器状态
查看容器状态,默认只查看正在运行的容器,加一个**-a**的选项就可以看到所以的容器
docker logs 容器名:查看容器运行日志
2.3.进入容器
docker exec -it 容器名 bash:进入指定的docker容器
- docker exec:进入容器内部
- -it:
- -i:交互式模式,即使没有附加到容器的标准输入,Docker也会保持容器运行
- -t:分配一个伪终端,这允许你像在终端一样与容器交互
- bash:表示要执行的命令,bash命令涵盖众多基本shell命令,例如cd、mv等等
进入容器内部之后,就会发现名字的地方变成了容器id了
使用ls命令也可以看到,这个容器内部,目录结构和linux挺相似的
2.4.退出容器
exit:退出容器
2.5.删除容器
docker rm 容器名:删除指定容器,但是当容器正在运行的时候是无法删除的,这个时候我们要加一个**-f**选项,表示强制删除
3.数据卷(volume)
在没有数据卷的之前,我们通过进入容器来修改容器内部的文件,这样操作的缺陷尤为明显
- 不便于修改:当修改数据,还得进入容器内部
- 数据没有复用性:由于容器的隔离性,我们对容器内部的数据修改之后,若又有另外一个容器也想要修改成这样的数据,那么此时我们没办法做到数据的复用,必须对这个新容器也做一遍相同的操作
- 升级维护困难:如要升级容器,那么必须要删除容器,其中的数据也会跟着被删除
但是没有什么是加一层解决不了的,我们现在在容器内部的文件,和宿主机内部文件之间加一层数据卷,这个数据卷可以关联容器内部文件和宿主机内部文件
例如上面的图,在某个docker容器内有一个文件目录,其中有一个文件是html,然后在数据卷层创建一个html文件,那么当容器内的html文件挂载到数据卷的html文件上之后,这个数据卷就会在宿主机的文件系统中关联一个html文件,注意,宿主机的这个关联文件目录是有规定的,必须是在/var/lib/docker/volume下,那么此时我们就可以通过操作宿主机的这个关联文件来间接操作容器内部文件了
3.1.数据卷相关操作
- docker volume create 数据卷名:创建一个数据卷
- docker volume ls:查看已有的数据卷
- docker volume inspect 数据卷名:查看指定数据卷的具体信息
- docker volume rm 数据卷名:删除指定数据卷
- docker run --name 容器名 -p 宿主机端口:容器端口 -v 数据卷名:容器内关联文件 -d 镜像
- 这里详细介绍下最后一条指令,这条指令是用来挂载数据卷的,只不过是在创建docker容器的时候进行挂载,例如:
- docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx:latest