简介
Docker的意思是码头工人,码头工人在码头从船上装卸海运的货物,你可以把你的所有货物打包起来,装到同一个标准规格的集装箱里,这样不仅可以跟别人的集装箱隔离开、互不影响,而且便于装卸。
再看Docker的logo,一头船一样的鲸鱼,背上背着一些小方块,这些小方块就是一个个集装箱,是不是很有意思?这也是Docker的基本思想。我们可以把我们需要的一些应用打包到一个“集装箱”里,只需要管理这个“集装箱”即可,应用的部署和卸载都变的容易。
接下来了解一些Docker的基本概念:
- Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
- Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者都可以使用这个镜像;
- 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
- 运行中的这个镜像称为容器,容器启动是非常快速的;
- Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker和虚拟机
- 容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。
- 相比之下,虚拟机(VM)运行具有“虚拟机管理程序”对主机资源进行虚拟访问的成熟的“ guest”操作系统。通常,VM会产生大量开销,超出了应用程序逻辑所消耗的开销。
- 简单来说,容器仅包含我们的应用程序以及一些命令和依赖库,而虚拟机则必须包含一个操作系统。
核心概念
docker主机(Host) | 安装了Docker程序的机器(Docker直接安装在操作系统之上) |
docker客户端(Client) | 连接docker主机进行操作 |
docker仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
docker镜像(lmages) | Docker 镜像是用于创建 Docker 容器的模板,放在docker仓库中。镜像由许多层叠加组成,第一层是基础镜像。 |
docker容器(Container) | 镜像启动后的实例称为容器;容器是独立运行的一个或一组应用。容器是在镜像层之上加了一个可写层。 |
数据卷(Volume) | Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。 数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker安装和卸载
Docker镜像加速
常用命令
镜像仓库 | |
docker login | 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 例:docker login -u 用户名 -p 密码 |
docker logout | 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub |
docker pull | 从镜像仓库中拉取或者更新指定镜像 例:docker pull nginx:tag tag 版本号,可以任意写,如果不写,默认是latest,后面的tag也是一样的意思 |
docker search | 从镜像仓库查找镜像 例:docker search nginx:tag |
docker push | 将本地镜像上传到镜像仓库 例:docker push mynginx:tag |
本地镜像管理 | |
docker images | 列出本地所有镜像 |
docker tag | 标记本地镜像,将其归入某一仓库 例:docker tag ubuntu:15.10 bukale/ubuntu:v3 将镜像ubuntu:15.10标记为 bukale/ubuntu:v3 镜像 |
docker rmi | 删除本地镜像 例:docker rmi [镜像id或镜像名称] |
docker build | 使用 Dockerfile 创建镜像 例:docker build -t bukale/mynginx:v1 . -t 创建的镜像的名称 最后面参数是Dockerfile文件目录,. 代表当前目录,也可以写该文件绝对路径 |
docker history | 查看指定镜像创建历史 例:docker history bukale/im |
docker save | 将指定镜像保存成 tar 归档文件 例:docker save -o ./Desktop/mynginx.tar nginx -o 指定保存的文件 |
docker load | 导入使用docker save命令导出的镜像 例:docker load -i ./Desktop/mynginx.tar --input , -i 指定导入的文件,代替 STDIN --quiet , -q 精简输出信息。 |
docker import | 从归档文件中创建镜像 例:docker import mynginx.tar bukale/mynginx:v1 从镜像归档文件mynginx.tar创建镜像,命名为bukale/mynginx:v1 |
容器rootfs命令 | |
docker commit | 从容器创建一个新的镜像 例:docker commit -m="updated nginx" -a="bukale" edcfc87a3295 bukale/nginx -m 描述信息;-a 作者信息;edcfc87a3295是容器id,bukale/nginx是创建后的镜像名 |
docker cp | 用于容器与主机之间的数据拷贝 例: 1、将主机/www/kaka目录拷贝到容器edcfc87a3295的/www目录下。 |
docker diff | 检查容器里文件结构的更改 例:docker diff mynginx |
容器操作 | |
docker ps | 列出所有运行中的容器,加-a,则是列出所有容器 |
docker inspect | 获取容器/镜像的元数据 |
docker top | 查看容器中运行的进程信息,支持 ps 命令参数 例:docter top mynginx |
docker attach | 连接到正在运行中的容器 |
docker events | 从服务器获取实时事件 |
docker logs | 获取指定容器的日志 例:docker logs --tail 10 mynginx 列出最新10条容器mynginx的日志 |
docker wait | 阻塞运行直到容器停止,然后打印出它的退出代码 |
docker export | 将指定容器保存成 tar 归档文件 例:docker export -o ./Desktop/mynginx.tar nginx |
docker port | 列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口 例:docker port mynginx |
容器生命周期管理 | |
docker run | 创建一个容器 例: docker run -it -v /host/path/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /host/path/nginx/html:/usr/share/nginx/html -v /root/Desktop/dockerTest/nginx/logs:/var/log/nginx -p 80:80 --name myNginx nginx /bin/bash -i 以交互模式运行; -t 分配一个伪输入终端; -d 后台运行; -v 挂载宿主机目录或文件到容器的目录或文件; -p 端口映射,宿主机端口:容器端口; -P 容器内部端口随机映射到主机端口; -m 设置容器使用内存最大值; --name 为容器指定名称; -h 指定容器hostname; --dns 指定容器使用的dns服务器,默认和宿主机一致; /bin/bash 使用-it参数时,在容器内执行/bin/bash命令; --network 指定网络 |
docker start | 启动容器 例:docker start mynginx |
docker restart | 重新启动容器 |
docker stop | 停止容器 |
docker kill | 杀掉一个运行中的容器 |
docker rm | 删除一个或多个容器,需先停止容器的运行 例:docker rm mynginx -f 通过 SIGKILL 信号强制删除一个运行中的容器 -l 移除容器间的网络连接,而非容器本身 -v 删除与容器关联的卷 |
docker pause | 暂停容器中所有进程 例:docker pause mynginx |
docker unpause | 恢复容器中所有进程 例:docker unpause mynginx |
docker create | 创建一个新的容器,但不启动它,用法与docker run一样,但docker run是创建并启动 |
docker exec | 在运行的容器中执行命令 例:docker exec -it mynginx /bin/bash -i 以交互模式运行; -t 分配一个伪输入终端; /bin/bash 使用-it参数时,在容器内执行/bin/bash命令; 要退出,先按CTRL+P,然后按CTRL+Q,这样不会中断容器的运行; |
数据卷操作 | |
docker volume | docker volume ls 列出所有数据卷 docker volume create nginx_vol 创建数据卷nginx_vol docker volume rm nginx_vol 删除数据卷 docker volume inspect nginx-vol 查看指定数据卷详情 |
网络 | |
docker network create | 创建一个网络,官网地址。 例:docker network create -d bridge test-net -d:参数指定 Docker 网络类型,有 bridge、overlay。 其中 overlay 网络类型用于 Swarm mode。 |
其它 | |
docker info | 显示docker信息 |
docker version | 显示docker版本 |