乐趣区

关于docker:Docker实战总结非常全面建议收藏

一、Docker 简介

Docker 是一个开源的利用容器引擎,开发者能够打包本人的利用到容器外面,而后迁徙到其余机器的 docker 利用中,能够实现疾速部署。

简略的了解,docker 就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不管其外部的货物一样,软件容器充当软件部署的标准单元,其中能够蕴含不同的代码和依赖项。

依照这种形式容器化软件,开发人员和 IT 业余人员只需进行极少批改或不批改,即可将其部署到不同的环境,如果呈现的故障,也能够通过镜像,疾速复原服务。

二、Docker 劣势

1. 个性劣势

2. 资源优势

三、Docker 基本概念

Client(客户端):是 Docker 的用户端,能够承受用户命令和配置标识,并与 Docker daemon 通信。

Images(镜像):是一个只读模板,含创立 Docker 容器的阐明,它与操作系统的装置光盘有点像。

Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。

Registry(仓库): 是一个集中存储与散发镜像的服务。最罕用的 Registry 是官网的 Docker Hub。

四、Docker 装置应用

  • 操作系统:CentOS 7

1、装置依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

2、增加软件源

yum-config-manager –add-repo http://mirrors.aliyun.com/doc… # 指定阿里云镜像源

3、装置 docker-ce(对系统内核有肯定要求,centos6 不反对)

yum clean all  yum makecache fast       # 从新生成缓存

yum -y install docker-ce docker-ce-cli containerd.io

4、设置自启并启动

systemctl enable docker

systemctl start docker

5、查看版本

docker version

  • 运行示例:Nginx

1、搜寻并下载镜像

docker search nginx

docker pull nginx

2、启动一个容器并映射端口到本地

docker run -d -p 8080:80 –name Nginx nginx # 参数详解见下文

3、拜访本地映射端口

五、Docker 常用命令

1. 镜像管制

搜寻镜像:docker  search  [OPTIONS]  TERM

上传镜像:docker  push  [OPTIONS]  NAME[:TAG]

下载镜像:docker  pull  [OPTIONS]  NAME[:TAG]

提交镜像:docker  commit [OPTIONS]  CONTAINER  NAME[:TAG]

构建镜像:docker  build  [OPTIONS]  PATH

删除镜像:docker  rmi [OPTIONS]  IMAGE  [IMAGE…]

减少镜像标签:docker  tag  SOURCE_IMAGE[:TAG]  TARGET_IMAGE[:TAG]

查看所有镜像:docker  images  [OPTIONS]  [REPOSITORY[:TAG]]

2. 容器管制

启动 / 重启容器:docker start/restart CONTAINER

进行 / 强停容器:docker stop/ kill CONTAINER

删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER…]

重命名容器:docker rename CONTAINER CONTAINER_NEW

进入容器:docker attach CONTAINER

执行容器命令:docker exec CONTAINER COMMAND

查看容器日志:docker logs [OPTIONS] CONTAINER

查看容器列表:docker ps [OPTIONS]

3. 容器启动

docker  run  [OPTIONS]  IMAGE  [COMMAND]  [ARG…]

-d : 后盾运行容器,并返回容器 ID

-i: 以交互模式运行容器,通常与 -t 同时应用

-t: 为容器重新分配一个伪输出终端,通常与 -i 同时应用

-v: 绑定挂载目录

–name=”mycontainer”: 为容器指定一个名称

–net=”bridge”: 指定容器的网络连接类型,反对如下:

bridge / host / none / container:<name|id>

-p/-P : 端口映射,格局如图:

4. 其余命令

查看 docker 信息:docker info

docker 命令帮忙:docker run –help

复制文件到容器:docker cp custom.conf Nginx:/etc/nginx/conf.d/

更新容器启动项:docker container update –restart=always nginx

查看 docker 日志:tail -f /var/log/messages

六、Docker 镜像构建

1.Docker commit(1 运行 2 批改 3 保留)

a)运行容器

docker run -dit -p 8080:80 –name Nginx nginx

b)批改容器 (这里我只是做个演示,所以就复制一下文件,具体批改须要依据你理论状况)

docker cp custom.conf Nginx:/etc/nginx/conf.d/

c)将容器保留为新的镜像

docker commit Nginx zwx/nginx

2.     Dockerfile(1 编写 2 构建)

a)编写 Dockerfile 文件

vim Dockerfile

b)执行 Dockerfile 文件

docker build -t zwx/nginx . # 前面有个点,代表当前目录下 dockerfile 文件

3. Dockerfile 罕用指令

七、Docker 本地仓库

1、拉取镜像仓库

docker search registry

docker pull registry

2、启动镜像服务

docker run -dit

–name=Registry # 指定容器名称

-p 5000:5000 # 仓库默认端口是 5000,映射到宿主机,这样能够应用宿主机地址拜访

–restart=always                 # 主动重启,这样每次 docker 重启后仓库容器也会主动启动

–privileged=true               # 减少平安权限,个别可不加

-v /usr/local/my_registry:/var/lib/registry  # 把仓库镜像数据保留到宿主机

registry

3、注册 https 协定 (须要通过本地仓库下载镜像,均须要配置)

vim /etc/docker/daemon.json # 默认无此文件,需自行添加,有则追加一下内容。

   {“insecure-registries”:[” xx.xx.xx.xx:5000″] } # 指定 ip 地址或域名

4、新增 tag 指明仓库地址

docker tag zwx/nginx x.xx.xx.xx:5000/zwx/nginx # 如果构建时曾经指定仓库地址,则能够省略

5、上传镜像到本地仓库

docker push x.xx.xx.xx:5000/zwx/nginx

6、查看本地仓库

curl -XGET http://x.xx.xx.xx:5000/v2/_catalog

八、Docker 与图形管理工具 Portainer

1. 简介

Portainer 是 Docker 的图形化管理工具,提供状态显示面板、利用模板疾速部署、容器镜像网络数据卷的基本操作(包含上传下载镜像,创立容器等操作)、

事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户治理和管制等性能。性能非常全面,根本能满足中小型单位对容器治理的全副需要。

2. 装置应用

a)搜寻并下载镜像

docker search portainer

docker pull portainer/portainer

b)单机形式运行

docker run -d

-p 9000:9000 # portainer 默认端口是 9000,映射到本地 9000 端口,通过本地地址拜访

–restart=always # 设置主动重启

-v /var/run/docker.sock:/var/run/docker.sock # 单机必须指定 docker.sock

–name Prtainer portainer/portainer

c)拜访 http://localhost:9000

首次登陆须要注册用户,给 admin 用户设置明码,而后单机版抉择 local 连贯即可。

d)管制治理

九、Docker 与集群管理工具 Swarm

1. 简介

Swarm 是 Docker 官网提供的一款集群管理工具,其次要作用是把若干台 Docker 主机形象为一个整体,并且通过一个入口对立治理这些 Docker 主机上的各种 Docker 资源。

2. 装置应用

Swarm 在 Docker 1.12 版本之前属于一个独立的我的项目,在 Docker 1.12 版本公布之后,该我的项目合并到了 Docker 中,成为 Docker 的一个子命令。

a) 启动 swarm 集群只须要执行初始化命令即可:

docker swarm init # 默认初始化节点为治理节点
–advertise-addr xx.xx.xx.xx #指定应用的 ip
–listen-addr xx.xx.xx.xx:2377 #指定监听 ip 和 port,默认为 2377

b) 设置 manager 节点

docker swarm join-token manager #获取治理节点 token,放入上面命令

docker swarm join
–advertise-addr xx.xx.xx.xx
–listen-addr xx.xx.xx.xx:2377
–token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz
xx.xx.xx.xx:2377

c) 设置 worker 节点

docker swarm join-token worker #获取工作节点 token,放入上面命令

docker swarm join
–advertise-addr xx.xx.xx.xx
–listen-addr xx.xx.xx.xx:2377
–token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz
xx.xx.xx.xx:2377

c) 查看节点

 docker node ls

d) 创立服务

docker service create [OPTIONS] IMAGE [COMMAND] [ARG…]

–detach , -d:  指定容器运行于前台还是后盾,默认为 false

–name:  服务名称

–network:  网络连接

–publish , -p:  端口映射

–env , -e:  设置环境变量

–tty , -t:  调配 tty 设施,该能够反对终端登录

–mount:  文件挂载

–replicas:  指定工作数量

3. 比照 K8s 到底有何异同?

a)出世不同

Google 依据其在 Linux 上容器治理教训,革新到 docker 治理上,就是 kubernetes。他的在许多方面体现良好, 最重要的是结构于 Google 多年的贵重教训之上。

kubernetes 并不是为了 docker 写的,kubernetes 把集群带到了一个全新的高度,代价是学习曲线比拟陡。docker-swarm 应用了一个不同的形式, 它是 docker 原生的集群工具。

最不便的局部是它裸露了 docker 规范的编程接口,意味着你之前始终在应用的任何与 docker 沟通的工具(docker CLI,  docker compose 等),都能够无缝的在 docker swarm 上应用。

b)装置配置不同

装置设置 swarm 非常简单,简单明了并且很灵便。咱们须要做的就是装置一个服务发现工具,而后在所有的节点上装置 swarm 容器。

相比较而言,kubernetes 的装置就有点简单艰涩了。不同的操作系统上装置都不同。每个操作系统都有本人的独立装置指令。

c)运行形式不同

应用 Swarm 和应用容器没有什么不同。比方,你习惯于应用 Docker CLI(命令行接口),你能够持续应用简直雷同的命令。

如果你习惯于应用 Docker Componse 来运行容器,你能够持续在 Swarm 集群中应用。不论你之前习惯于怎么应用容器,你仍旧能够应用,只是在更大级别的集群中应用。

Kubernetes 要求你去学习它本人的 CLI(命令行接口)和配置。你不能应用你之前创立的 docker-compose.yml 配置,你必须要去新建与 Kubernetes 对应的配置。

你也不能应用之前学习的 Docker CLI(命令行接口)。你必须要去学习 Kubernetes CLI(命令行接口)

最初,当须要在 Docker Swarm 和 Kubernetes 做出抉择时,能够思考如下几点:

你是否想依赖于 Docker 本人来解决集群的问题。

如果是,抉择 Swarm。如果某些性能在 Docker 中不反对,那它也十分可能在 Swarm 中找不到,因为 Swarm 是依赖于 Docker API 的。

另外一方面,如果你想要一个工具能够解决 Docker 的限度,Kubernetes 将是不错的抉择。Kubernetes 不是基于 Docker,而是基于 Google 多年对于治理容器的教训。它是依照本人的形式来行事。

十、Docker 运维流程图

十一、Docker 配置管理

1. 用了容器当前,还须要配置管理吗?

起初咱们跟 Docker 官网一样,属于理想主义派。天真的认为容器就应该是 inmutable 的,当须要配置变更的时候,从新构建镜像重新部署。

基于这一思路,咱们在 cSphere 中增加了个镜像主动构建模块,用户能够配置代码仓库的地址。

服务的配置文件保留于 Git 或者 SVN 库中,须要配置变更时,向版本库中 Push 一下,主动通过 hook 触发镜像构建,并主动实现线上容器的重建。

通过这套零碎,用户能够十分不便的批量更新线上的服务,并不局限于配置文件的变更,代码的变更也天生反对。

通过理论应用,这套零碎可能很好的满足开发和测试环境的需要,晋升工作效率。

然而,在生产环境中应用的时候,咱们发现这种流程其实并不那么完满,次要体现在:

镜像构建和部署尽管自动化了,但构建是针对 VCS 中的某个仓库的,改一行配置就得整体从新构建一下,在更新容器时还须要把镜像从新散发到所有机器上,配置变更速度太慢。

这种形式的配置变更会波及到服务的重启,这在生产环境某些场景下是不可承受的,有可能引起短暂的服务中断。

2. 利用配置文件应该须要做到什么?

Docker 利用配置文件可能放弃可能反对针对不同环境作出更改。另外配置文件反对在线更改,重启就失效。个别分为以下两种形式。

a)Docker 环境变量

须要在制作镜像的时候就须要提前想好,有哪些参数是部署容器的时候会常常更改,而后把这些参数抽出来做成容器的环境变量,而后在部署的容器的时候填入不同的参数即可。

然而如果后续发现有一些参数不同场景下部署的时候也会批改,那就须要再从新制作镜像了。

b)利用配置文件

上述的治理形式不太灵便,灵便的治理形式是将配置文件和镜像剥来到,这样就不会被镜像给绑定了。

注:最新版本能够参考 docker config 命令治理

十二、Docker 后续问题

  • 集群环境
  • 网络安全
  • 存储管理
  • 日志收集
  • 实时监控
  • 性能调优
  • ……
退出移动版