Docker

查询镜像库地址https://hub.docker.com

Docker是一个开源的应用容器引擎,基于GO语言并遵从Apache2.0协议开源

Docker可以让开发者打包他们的而应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低

命令:

安装:docker pull 服务名:版本号

查看已安装镜像:docker images

运行容器:docker run

查看正在运行的容器:docker ps

删除容器:docker rm -v 容器名

删除镜像:docker rmi 镜像名/镜像ID

运行容器:docker start 容器名

停止容器:docker stop 容器名

从容器里面拷文件到宿主机:docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径

从宿主机拷文件到容器里面:docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

进入容器客户端: docker exec -it mysql /bin/bash

通过运行镜像进入客户端:docker run -t -i 镜像名/镜像ID /bin/bash

查看服务安装后的信息:docker image inspect zookeeper(服务名称):latest(对应的版本)

查看所有容器:docker ps -a

image.png

0.0.0.0:3306->3306/tcp表示的是Docker开放了3306端口映射到主机端口3306上,然后主机可以通过3306端口来访问该容器,需要运行镜像时通过-p参数来指定。默认绑定tcp端口,如需指定udp,可:-p 127.0.0.1:5000:5000/udp

查看应用程序日志:docker logs -f ID/容器名

查看指定容器绑定的端口状态:docker port 容器名 端口号

新建Docker网络:docker network create -d bridge test-net -d:参数指定 Docker 网络类型,有 bridge、overlay。

应用场景

Web应用的自动化打包和发布

自动化测试和持续集成、发布

在服务型环境中部署和调整数据库或者其他的后台应用

从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

优点

Docker是一个用于开发、交付和运行应用程序的发放品台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用Docker的方法来快速交付、测试和部署代码。可以大大减少编写代码和在生产环境中运行代码之间的延迟

快速且一致地交付应用程序

Docker允许开发人员使用自己提供的应用程序或者服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。且容器非常适合持续集成和持续交付(CI/CD)工作流程:

  1. 可以与开发人员在本地编写代码,并使用Docker容器与同时共享他们的工作;
  2. 他们使用Docker将其应用程序推送到测试环境中,并执行自动或手动测试;
  3. 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证
  4. 测试完成后,将修补程序推送给生产环境,就像更新的镜像 推送到生产环境一样简单

响应式部署和扩展

Docker是基于容器的平台,允许高度可移植的工作负载。Docker容器可以在开发人员的本机上,数据中心的物理或虚拟机上,还有云服务上或者混合环境中运行

Docker的可移植性和轻量级的特性,还可以轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务

在同一硬件上运行更多工作负载

Docker轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此可以利用更多的计算能力来实现业务目标。

Docker非常适合与高密度环境以及中小型部署,从而可以用更少的资源做更多的事情。

Docker架构

Docker包括三个基本概念:

  • 镜像(Image)。相当于是一个root文件系统。比如官方进项Ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统
  • 容器(Container)。镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像时静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
  • 仓库(Repository)。仓库可以看成一个代码控制中心,用来保存镜像

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器

Docker容器通过Docker镜像来创建

容器与镜像的关系类似于面向对象编程中的对象与类
image.png

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/
) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com
) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

通过Dockerfile文件来创建一个镜像

在该文件同一级目下执行docker build

连接容器

运行一个容器并链接到新建的test-net网络(网络新建可在命令中查看):

  1. docker run -itd --name 容器名 --network test-net 镜像名 /bin/bash

打开新的终端,在运行一个容器加入到test-net网络

  1. docker run -itd --name 容器名 --network test-net 镜像名 /bin/bash

然后相互之间ping一下,如果没有ping命令,则在容器中安装ping,也可在一个容器里安装好后,提交容器到镜像,再以新的镜像重新运行容器

  1. #ping安装命令
  2. apt-get update
  3. apt install iputils-ping

如果有掉个容器之间需要互相连接,推荐使用Docker Compose

Docker Compose

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YML文件来配置应用程序需要的所有服务,然后使用一个命令,就可以从YML文件配置中创建并启动所有服务。

步骤:

  1. 使用Dockerfile定义应用程序的环境
  2. 使用dicker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  3. 最后,执行docker-compose up命令来启动并运行真个应用程序
  1. # yaml 配置实例
  2. version: '3'
  3. services:
  4. web:
  5. build: .
  6. ports:
  7. - "5000:5000"
  8. volumes:
  9. - .:/code
  10. - logvolume01:/var/log
  11. links:
  12. - redis
  13. redis:
  14. image: redis
  15. volumes:
  16. logvolume01: {}

Compose安装

Linux

可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。

运行以下命令以下载 Docker Compose 的当前稳定版本:

  1. $ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 v2.2.2。

将可执行权限应用于二进制文件:

  1. $ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

  1. $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

  1. $ docker-compose --version
  2. cker-compose version 1.24.1, build 4667896b

注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。

macOS

Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。Docker 安装说明可以参阅 MacOS Docker 安装

windows PC

Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Windows 用户不需要单独安装 Compose。Docker 安装说明可以参阅 Windows Docker 安装