Docker详细基础
一、Docker简介
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
1.1 Docker包含两方面技术:
- 1.镜像技术,打破“代码即应用”的概念,透过镜像将运作应用程式所需要的系统环境,自底向上打包应用,达到应用程式跨平台间的无缝运作。即一次封装,到处运行。
- 2.容器虚拟化技术,基于容器的虚拟化,仅包含业务运行所需的runtime环境。
1.2 Docker的优势(DevOps):
- 1.更快速的应用交付和部署
- 2.更快捷的升级和扩缩容
- 3.更简单的系统运维
- 4.更高效的计算资源利用
二、Docker三要素:仓库、镜像、容器
从远程仓库pull的镜像,就是一个只读的模版,用来创建Docker容器,并且一个镜像可以创建很多容器。
- 1.容器,Docker利用容器独立运行一个或一组应用,容器是用镜像创建的运行实例(runtime环境)。它可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。可以把容器看作是一个简易版的Linux环境和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
- 2.仓库,集中存放镜像文件的场所。
- 3.镜像,Docker本身是一个容器运行载体或称之为管理引擎(daemon)。我们将应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。一个容器运行一种服务,当我们需要的时候,就可以通过Docker客户端创建一个对应的容器。
三、docker底层原理
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。
3.1 docker为什么比VM快?(docker与虚拟化技术的特点)
- 1.docker有着比虚拟机更少的抽象层。运行在docker容器上的程序直接使用实际物理机的硬件资源,不需要实现硬件资源虚拟化。
- 2.docker通过Docker Engine利用的是宿主机的内核,而不需要Guest OS。
四、Docker常用命令
4.1 帮助命令:docker (-help、version、info)
4.2 镜像命令:
- 1.docker images,查看本地镜像。包含多个options:
- -a,列出本地所有的镜像(镜像分层,含中间映像层)。
- -q,只显示镜像id(-qa组合options)。
- –digests,现实摘要信息。
- – no-trunc,显示完整的镜像信息(–digests --no-trunc组合options)。
- 2.docker search 镜像名,options:
- –no-trunc,显示完整的镜像描述。
- -s,列出收藏数不小于指定值的镜像。
- –automated,只列出automated build类型的镜像。
- 3.docker pull 镜像名(镜像名可以:版本号,不指定版本号默认latest)
- 4.docker rmi 镜像名id,删除镜像。options:
- -f,删除单个镜像id。
- 空格分割,删除多个镜像。
- 3.-f $(docker images -q),删除全部镜像。
- 5.docker commit
- 6.docker push
4.3 容器命令:
- 1.docker run 镜像id,新建并启动容器。options:
- –name,为容器指定名字。
- -d,后台运行容器,并返回容器id,即启动守护式容器。
- -i,以交互模式运行容器,通常与-t同时使用。
- -t,为容器重新分配一个伪输入终端。
- -P,随机端口映射。
- -p,指定端口映射,有以下四种格式:
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- 2.docker ps,列出当前所有正在运行的容器。options:
- -a,列出所有正在运行的容器+历史上运行过的。
- -l,显示最近创建的容器。
- -n,显示最近n个创建的容器。
- -q,静默模式,只显示容器编号(-lq可组合使用)。
- –no-trunc,不截断输出。
- 3.退出容器有两种方式:
- exit,容器停止退出。
- ctrl+P+Q,容器不停止退出。
- 4.docker start 容器id或容器名,启动容器。
- 5.docker restart 容器id,重启容器。
- 6.docker stop 容器id或容器名,停止容器。
- 7.docker kill 容器id或容器名,强制停止容器。
- 8.docker rm 容器id,删除已经停止的容器。options:
- -f $(docker ps -a -q),删除全部。
- 直接全部删除,docker ps -a -q | xargs docker rm
五、容器重要命令
- 1.启动守护式容器,docker run -d 容器名
- 2.查看容器日志,docker logs -f -t --tail 容器id:
- -t,加入时间数
- -f,跟随最新的日志打印
- –tail,数字显示最后多少条
- 3.查看容器内运行的进程,docker top 容器id
- 4.查看容器内部细节以json格式,docker inspect 容器id
- 5.进入正在运行的容器并以命令行交互
- 1.docker exec -it 容器id /bin/bash,在容器中打开新的终端,并且可以启动新的进程;并且在宿主机外可以执行docker容器运行的命令,docker exec -t 容器id ls /tmp,直接返回结果到宿主机。
- 2.重新进入,docker attach 容器id,直接进入容器命令的终端,不会启动新的进程。
- 6.从容器内拷贝文件到主机上,docker cp 容器id:容器内路径 目的主机路径。(可对容器内数据进行持久化)。
- 7.提交容器副本使之成为一个新的镜像,docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]
启动就退出问题?
-
1.Docker容器后台运行就必须有一个前台进程。
-
2.容器运行的命令如果不是那些一直挂起的命令(top、tail等),就会自动退出。
-
3.这个是docker的机制问题,容器为后台进程模式运行,就导致docker前台没有运行的应用,容器就会立即停止。
-
4.最佳的解决方案,将要运行的程序以前台进程的形式运行。
-
5.后台运行某一个程序,容器就会一直运行,例如:
docker run -d centos /bin/sh -c 'while trues; do echo hello-world; sleep 2; done' #可用查看容器日志命令,后台一直在打印‘hello-world’