举个栗子,假设用户试图基于常见的LAMP(Linux+Apache+MySQL+PHP)组合来构建网站。按照传统的做法,首先需要安装Apache 、MySQL 和PHP 以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。可以想象,如果应用数目变多,事情会变得更加难以处理。
更为可怕的是, 一旦需要服务器迁移(例如从亚马逊云迁移到其他云),往往需要对每个应用都进行重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
而Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台。这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险。
Docker镜像
类似于虚拟机镜像,可以理解为一个只读模版,一个镜像可以包含一个基本的操作系统等好多内容,镜像是创建Docker容器的基础
Docker容器
类似于一个轻量级沙箱,Docker利用容器来运行和隔离应用,容器从镜像创建的应用运行实例,容器可以启动、开始、停止、删除,容器之间互相隔离、互不可见
Docker仓库
类似于代码仓库,存放着镜像文件的场所
docker [image] pull NAME [ :TAG]
支持选项:
docker pull ubuntu: 18. 04
说明:对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载仓库中最新版本的镜像。
docker images或docker image ls
支持选项:
docker iamges
说明:可以使用docker [image] inspect获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等
可以使用docker [image] history查看镜像的创建过程。
docker search [option] keyword
支持选项:
docker search --filter=is-official=true nginx
docker rmi或docker image rm
支持选项:
docker rmi myubuntu:latest
说明:当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像的多个标签中的指定标签,并不影响镜像文件。当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,可以使用-f参数强行删除。正确的做法是先使用docker rm来删除容器,然后在删除镜像。
docker使用一段时间后,系统中会遗留一些临时文件,以及一些没有被使用的镜像,可以通过docker image prune来镜像清理。
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY] [:TAG]]
支持选项:
docker [container] commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test:0.1
说明:顺利的话会返回新创建镜像的ID信息。
docker [container] import [OPTIONS] file|URL|-[REPOSITORY] [:TAG]]
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:lB.04
说明:要直接导入一个镜像,可以使用OpenVZ提供的模版来创建,或者用其他已导出的镜像模版来创建。
docker build [选项] <上下文路径/URL/->
下面是Dockerfile文件
FROM tomcat:8.0-jre8
#作者
MAINTAINER AuthorName
#定义工作目录
ENV WORK_PATH /usr/local/tomcat/conf
#定义要替换的server.xml文件名
ENV SERVER_CONF_FILE_NAME server.xml
#删除原文件server.xml
RUN rm $WORK_PATH/$SERVER_CONF_FILE_NAME
#复制文件server.xml
COPY ./$SERVER_CONF_FILE_NAME $WORK_PATH/
docker build -t w2gtomcat:0.0.1 . 注意后面的点不能少了
说明:Dockerfile语法详情
docker [image] save
docker [image] load
支持参数:
docker save -o ubuntu 18 04 tar ubuntu:18 .04
docker load -i ubuntu_ 18 04 tar
说明:save导出镜像到本地文件中,load将导出的tar文件再导入到本地镜像库。
docker [image] push NAME [:TAG] | [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG ]
docker tag test:latest user/test : latest //添加新的标签user/test:latest
docker push user/test:latest
说明:用户在DockerHub网站上注册后可以上传自制的镜像。
docker [container] create
支持选项:参数太多就不一一展示了
参数列表
docker create -t -i fedora bash
docker create -it ubuntu:latest
说明:注意创建的容器为停止状态,如果要启动需要使用start命令。
或者使用docker run命令
docker run ubuntu / bin/ echo ’ Hello world'
docker [container] pause CONTAINER [CONTAINER ... ]
例如,启动一个容器然后将其暂停:
$ docker run --name test --rm -it ubuntu bash
$ docker pause test
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
893c8llcf845 ubuntu "bash” 2 seconds ago Up 12 seconds (Paused) test
说明:处于paused状态的容器,可以使用unpause命令来恢复到运行状态
docker [container] stop
docker stop ce5
说明:处于终止状态的容器,可以通过start命令来重新启动,
docker restart 命令会将一个运行的容器先终止,然后再重新启动。
docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
支持参数:
docker attach nginx
说明:使用attach命令有时候并不方便,当多个窗口同时attach到同一个容器的时候,所有窗口会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
docker [container] exec [-d| --detach] [ detach-keys[=[]]] [-i|--interactive] [ - -privileged][-t|--tty] [- u | --user [=USER]] CONTAINER COMMAND [ARG . . . ]
支持参数:
docker exec -it 24 3 c32535da7 / bin/ bash
说明:通过指定-it参数来保持标准输入打开,并且分配一个伪终端,通过exec命令对容器执行操作是最为推荐的方式
docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH |-
支持选项:
docker [container] cp data test : / tmp/
说明:如果要将容器中的文件复制到宿主机中,将参数对调即可。
docker [container] diff CONTAINER
docker container diff test
说明:查看容器内文件系统的变更。
docker container port CONTAINER [PRIVATE_PORT[/PROTO ]]
docker container port test
说明:查看该容器的端口映射信息,输出为端口映射信息。
docker [container] update [OPTIONS] CONTAINER [CONTAINER .. . ]
支持选项:
例如:限制总配额为1秒,容器teset所占用时间为10%:
docker update --cpu-quota 1000000 test
说明:可以更新容器的一些运行时配置,只要是一些资源限制份额。