docker利用容器(Container)独立运行的一个或一组应用;
容器时用镜像创建的运行实例
容器可以被启动、开始i、停止、删除。每个容器都是相互隔离的】保证安全的平台;
docker相当于一个精简版的虚拟机,只保留了运行应用是所需要的库(包括root用户权限、进程空间、用户空间和网络空间等和运行再其中的应用程序),摒弃了硬件模拟等;
- 镜像(images)相当于每个容器的模板
- 容器(container)每个容器的实例,应用都是部署在容器中的
- 仓库(repository)相当于java中的maven仓库,有一些打包好的镜像
镜像:是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所哟内容,包括代码、运行时、库、环境变量和配置文件
Docker镜像都是只读的,当容器地洞是,一个新的可写层被加载到镜像顶部。这一层通常被叫做容器层,容器层之下的都叫做镜像层;
https://docs.docker.com/engine/install/centos/
由于docker仓库默认使用海外镜像库,建议配置成国内阿里云或者网易镜像库 docker常用命令-
docker -version //版本号
-
docker -info //容器信息
-
docker --help //docker帮助命令
-
docker run [镜像名称] //运行一个镜像的实例(docker run 镜像)
-
docker search 【镜像名称】从镜像仓库中搜索镜像
docker images //列出本地目前已有的镜像
1. REPOSITORY 表示镜像源 2. TAG:镜像的标签(docker run时不加tag默认就是latest) 3. IMAGE ID:镜像的id 4. CREATED创建时间 5. size镜像大小 docker images -a(镜像是分层的)显示所有包含中间镜像 docker images -qa 显示当前镜像所有镜像的id docker images --digests显示镜像的摘要信息 doucker pull [镜像名字] TAG下载镜像(如果不加tag的话等价于下载最新版的,等价于 docker pull [镜像名]:latest)
docker images -qa //展示所有本地docer镜像id
docker rmi [唯一镜像名或镜像id] :tag //删除镜像
- docker rmi -f [唯一镜像名或镜像id] :tag //强制删除删除镜像
- 同时删除多个镜像以空格分隔
- docker rmi -f ${docker images -qa}删除所有本地镜像
(有镜像才能创建容器)所以在创建容器前要先pull下相应的镜像
-
新建并启动容器 doker run [options] --name [镜像id]
* --name=’容器的新名字‘:为容器指定一个名称(如果不指定name则 默认随机分配)
* options:启动容器时需要的启动模式通常使用-it
* -i:以交互模式运行容器,通常与-t同时使用(启动容器后进行交互)
* -t:为容器重新分配一个伪终端,通常与-i同时使用(登录容器后创建一个伪终端**命令窗口)
* -d:后台运行容器,并返回容器id
* -P:随机端口映射
* -p:指定端口映射,有以下四种格式
1. hostPort:containerPort
比如docker run -it -p 8888:8080 【镜像id】,表示将容器中的8080端口启动容器后映射到宿主的8888端口上面的大写P是随机分配↑
-
列出当前所有正在运行的docker容器: docker ps
- OPTIONS
- -a 列出当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器(上一个容器)
- -n:显示最近n个创建的容器
- -q静默模式,只显示容器编号
- –no-trunc:不截断输出
-
退出容器 exit或者ctrl+p+q
- exit关闭容器并退出
- ctrl+P+Q退回到宿主机但不关闭容器
-
启动已经退出的容器doker start[容器id]
-
重启容器:docker restart [容器id]
-
关闭容器:docker stop
-
强制关闭容器:docker kill [容器id]
-
删除已停止的容器:docker rm [容器id](多个容器空格间隔,docker -f 强制删除)批量删除参照批量删除镜像,注意rm是删除容器,rmi是删除镜像
-
后台启动容器docker run -d --name [镜像id]
- 问题:docker ps -a查看时发现进程容器已经退出,是因为Docker容器后台运行是必须有一个前台进程是启动的,容器运行的命令如果不是一些挂起的命令比如(top、tail),容器就会自动退出,比如容器当中部署了nginx是以守护进程的方式运行的,也会导致容器自动退出,所以要运行的程序要以前台进程的形式运行 例如docker run -d centos /bin/sh -c “while true;do echo hello xxxx;lsleep 2;done” shell编程没两秒钟打印hello xxxx
-
查看容器日志:docker logs -t -f --tail [容器id]
- -t 加入时间戳
- -f跟随最新的日志打印
- –tail xx 显示最后xx条
-
查看容器内的进程:docker top [容器id]
-
查看容器内部细节:docker inspect 容器id
-
进入正在运行的容器:docker exec -it 【容器id】或者docker attach 【容器id】
* docker attach 【容器id】 进入到容器的根目录
* docker exec -it 【容器id】【需要在容器中执行的命令】在容器外面进行容器中的命令操作例如:docker exec -it 【容器id】 ls -l /tmp 表示在宿主机中查看容器内tmp目录下的内容,但是并没有进入到容器 -
从容器中拷贝数据到宿主机:docker cp 【容器id】:容器内部路径 目的主机路径
-
提交容器副本使之成为一个新的容器镜像:docker commit
- docker commit -m=“提交的描述信息” -a “作者" [容器id] 要创建的目标镜像名称:[标签名]
即:容器关闭后运行数据就丢失了,容器数据卷既是容器内的运行数据持久化
Docker的理念:
- 将运用于运行的而环境打包形成容器运行,容器内的运行数据可以持久化
- 容器间的数据可以共享(Docker容器产生的数据,如果用docler commit是生成新的镜像是可以保存的)
特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止



