一、Docker是什么
二、Docker的基本命令
1 容器操作的相关命令
2 镜像操作的相关命令
Docker是一个应用打包、分发、部署的工具,你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要。
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一模一样的运行环境,不管是在Windows/Mac/Linux
Docker的基本组成镜像:Docker 镜像(Image)就是一个只读的模板,可以理解为软件安装包,可以方便的进行传播和安装。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
容器:Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例,可以理解为软件安装后的状态,每个软件运行环境都是独立的、隔离的。它可以被启动、开始、停止、删除。事实上容器就是一个可读可写的镜像文件。
仓库:集中存放镜像文件的场所。仓库 (Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中包含了多个镜像,每个镜像有不同标签(tag)。
Docker的应用
• 应用分发、部署,方便传播给他人安装,特别是开源软件和提供私有部署的应用;
• 快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上,例如Redis/MongoDB/ElasticSearch/ELK
• Windows上体验/学习各种Linux系统
• 持续集成
• 提供PaaS产品(平台即服务)
命令参考:命令
创建容器的命令如下,image代表一个镜像的名称:
docker container run
#例如创建nginx
docker container run nginx
#例如创建ubuntu镜像
docker container run ubuntu
输入完成后,直接回车。如果系统中没有这个镜像,Docker会自动去Docker Hub
上拉取对应的镜像到本地,然后执行对应的Shell
脚本,脚本会把镜像自动安装到Doker容器里,并最终启动对于的镜像服务。
Docker Hub 是Docker官方的镜像和社区,里边有很多开发者制作好的镜像,我们可以直接使用这些镜像。如果你有能力,也可以制作镜像,并上传到Docker Hub。
注意:这时候容器是在前台运行的。
查看容器的相关命令
创建万容器后,如何查看这个容器的信息和状态呢?这时候你可以新打开一个powerShell窗口使用下面的命令:
docker container ls
输入命令后,就会显示出当前已经存在的容器,并且会列出对应的信息,但只显示正在运行的容器,想要显示包括已经停止的所有容器,运行下面这个命令:
docker container ls -a
停止容器的相关命令
如果你想停止掉一个正在运行的容器,可以使用下面的命令:
docker container stop
删除容器
当我们停止容器之后,容器并没有删除,而只是停止掉了。这时候可以使用下面的命令删除容器:
docker container rm
多容器操作和强制删除容器的方法
在实际工作中,我们往往管理的都是多个容器,这也是容器的主要特点之一,这里说一下对于多个容器的操作。
创建多个容器
在WIndows环境下我们来作这个,先打开三个PowerShell窗口,然后在每个窗口中输入创建容器的命令,这里以Nginx
镜像为例
docker container run nginx
然后再重新打开一个PowerShell
窗口,输入查看命令,查看已经开启的容器。
docker container ls
可以看到现在已经有3个开启的容器了
现在要把三个容器用一个命令停掉,笨的方法是直接加上ID或名字:
docker container stop
但如果这时候有100个容器,我们用这种方法就会非常麻烦。这时候我们需要学一个新的查看命令,比如只查看现在所有容器的ID,命令如下:
docker container ls -aq
这样就打印出了所有容器的ID,这时候包括没有开启的:
有了这个命令之后,我们可以作一个命令组合:
docker container stop $(docker container ls -qa)
命令执行后,会返回给我们容器的编号,说明已经停止了。可以使用下面的命令再次查看,就可以看到,所有容器不在是up
状态了,而是exited
状态。
删除多个容器
删除多个容器类似停止多个容器
docker container rm $(docker container ls -aq)
强制删除容器
正在运行的容器,是不可以直接删除的,会报错。例如,新建一个容器后,新开一个PowerShell,直接使用rm命令删除,会直接报错。具体如下:
报错信息大体就是不能删除没有stop
的容器。但这时候就是要删除,可以使用强制删除命令。
docker container rm -f
输入完成就删除成功了。
容器的attached 和 detached 模式
容器的端口没有跟服务器的端口映射,没有办法在外网访问,想要在外网访问必须做端口映射。这里说明Docker的端口映射和两种运行模式attached和detached模式。首先看一下如何把一个容器的端口映射到主机的80端口上。在开启端口映射之前,你首先要知道Docker对应的容器端口是多少。比如Nginx镜像的端口是80
。知道这个端口后,就可以在启动容器的时候,用-p
的形式,启用映射了,第一个port为服务器的端口,一般的web对外访问端口为80,默认也为80,第二个port为容器的端口。
docker container run -p 80:80 nginx
等待项目启动后,打开浏览器窗口,在地址栏输入127.0.0.1
,就可以打开nginx的默认网址。
attached 和 detached 模式这两种模式最简单的对比理解就是:attached模式在前台运行,detached模式在后台运行。detached模式
的开启方法,就是加一个参数-d
或者--detach
。
Image镜像的拉取和删除
当在PowerShell
里输入docker image
命令后,会出现对于Image操作的所有命令和提示(算帮助信息吧)。
这些命令中可以看到pull
的使用方法是用于拉取镜像。比如去拉取一个wordpress的镜像来试试。打开hub.docker.com
,进入explore
后,搜索pytorch,选择镜像后
点击进入主页,右侧会告诉你拉取的方法。
这条命令是docker pull pytorch/pytorch
, 细心的小伙伴一定可以发现,正常应该是docker image pull pytorch/pytorch
,不写image
是老版本的写法,你也可以理解为简写,但建议大家把命令写全,也就是带上image
。如果是第一次拉取镜像是需要下载过程的,需要下载很多依赖的基础镜像。具体快慢会和网速有关。
查看现有镜像
查看镜像列表的方法,通过下面这条命令就可以查看Docker中有的镜像和相关信息。
docker image ls
查看具体镜像信息,inspect
是检查
的意思。执行这条命令后就会显示很多关于这个镜像的详细信息。
docker image inspect
删除镜像
docker image rm
需要注意的是,当有容器在使用镜像时,是没有办法被删除的。即使容器是停止掉的,依然是没办法删除的。
Docker镜像的导入导出
导出镜像
在导出之前,你最好到一个好找的路径下面,比如我这里就选择了D盘
,使用mkdir
命令创建一个文件夹,进入文件后输入下面的命令。比如现在要导出镜像中的busybox
镜像,可以这样写命令。
docker image save busybox:latest -o mybusybox.image
解读上面的命令,save
是导出/保存的意思,busybox:latest
是镜像名称+版本号, -o
代表输出,mybusybox.image
是导出后镜像的名字。
命令执行完成后,可以看到在执行命令所在的目录下就会多出一个mybusybox.image
的文件,这就是刚才导出的镜像了。
导入镜像
先删除掉本机已有的busybox
镜像。
docker image rm busybox
删除后直接导入镜像。
docker image load -i .\mybusybox.image
执行完命令之后,再使用docker image ls
命令查看,busybox
镜像已经回来了。
通过Dockerfile来DIY制作镜像
除了上述两种获取Docker镜像的方式,第一种是直接从Registry中拉去,第二种是自己导入导出镜像外,还有第三种获得镜像的方法,通过Dockerfile
来DIY制作镜像。
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
具体制作可以学习通过Dockerfile来DIY制作镜像
把镜像分享到Dockerhub
把镜像push
到dockerhub上去,这样就可以让所有人进行使用了。具体可以参考把镜像分享到Dockerhub
相关参考:
Docker&Kubernetes从入门到实战教程
Docker labs的github链接
Docker教程