乐趣区

关于docker:Docker-实战总结非常全面收藏了

Docker 简介

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

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

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

Docker 劣势

1. 个性劣势2. 资源优势

Docker 基本概念

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

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

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

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

Docker 扭转了什么?

Docker 扭转了云服务,使云服务的共融共通的现实逐渐成为了可能。并且 Docker 曾经是云策略的一部分,许多开发者正在打算应用 Docker 将业务迁徙到云端。另外,为了防止被云服务供应商绑定,Docker 成为很多开发者的首选。

Docker 扭转了产品交付,为产品的整个生命周期提供了一整套的解决方案和流程。

Docker 扭转了开发方式,提供了简化的环境配置、封装的运行环境以及对立的环境。并且提供了疾速部署的形式。

Docker 扭转了测试,多版本测试变得极为不便,疾速构建测试环境也变得更加简略并且无需开发人员干涉或者搭建。

Docker 扭转了运维,环境的一致性让运维变得更加简略,同时热更新的反对让运维不再须要中午加班部署更新,更新能够随时进行。当呈现重大问题时,还能疾速回滚到指定版本。

Docker 扭转了架构,自动化扩容反对让架构变得更加简略,分布式系统也更加易于搭建和反对。同时遗留的单体利用也很易于转变为古代利用。

总之,在某种程度上,Docker 扭转了产品开发中的一些游戏规则。尽管 Docker 是一项技术,然而它也带来了新的思维,新的流程和工作办法,Docker 在推动行业的倒退,Docker 曾经在扭转世界,并且在逐渐的变为事实……关注民工哥技术之路公众号,回复 1024 获取 2TB 材料一份,助力大家更好的学习技术。

Docker 装置应用

操作系统:CentOS 7

1、装置依赖

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

2、增加软件源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 指定阿里云镜像源

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

参考:这 20 个 Docker Command,有几个是你会的?更多能够参考官网:https://docs.docker.com/engin…

Docker 镜像构建

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

# 运行容器
docker run -dit -p 8080:80 --name Nginx nginx
#批改容器(这里我只是做个演示,所以就复制一下文件,具体批改须要依据你理论状况)docker cp custom.conf Nginx:/etc/nginx/conf.d/
#将容器保留为新的镜像
docker commit Nginx zwx/nginx

2.Dockerfile(1 编写 2 构建)

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

3.Dockerfile 罕用指令 更多能够参考: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 搭建本地公有仓库

Docker 与图形管理工具 Portainer

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

事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户治理和管制等性能。性能非常全面,根本能满足中小型单位对容器治理的全副需要。更多能够参考:docker 可视化管理工具举荐

2. 装置应用

# 搜寻并下载镜像
docker search portainer
docker pull portainer/portainer
#单机形式运行
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

拜访 http://localhost:9000, 首次登陆须要注册用户,给 admin 用户设置明码,而后单机版抉择 local 连贯即可。管制治理

Docker 与集群管理工具 Swarm

1. 简介

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

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

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

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

设置 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

设置 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

查看节点

docker node ls

创立服务

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
--detach , -d:  指定容器运行于前台还是后盾,默认为 false
--name:  服务名称
--network:  网络连接
--publish , -p:  端口映射
--env , -e:  设置环境变量
--tty , -t:  调配 tty 设施,该能够反对终端登录
--mount:  文件挂载
--replicas:  指定工作数量

更多参考:Docker Swarm 集群部署实际

比照 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)利用配置文件

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

出处:https://www.cnblogs.com/leozh…
作者:LeoZhanggg

退出移动版