Docker安装启动过程
Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并 让他们彼此联通(这样一对接口叫v pair);可以参考阿里云的安装教程,这里使用了镜像加速器
docker服务启动命令_docker启动命令端口
docker服务启动命令_docker启动命令端口
当然我们也可以不用镜像加速直接安装,不过存在安装速度慢或者安装不成功的风险。
安装完成后需要start一下docker,查看一下版本信息已经docker的地址信息,如下图:
如果要设置docker开机启动,可以使用ctl enable docker命令,这里start的时候可能会报错
在某些条件下,我们的机器可能不符合安装的条件,这个时候我们要检查一下我们的系统环境。
查看centos系统版本命令:
配置阿里云yum源
升级系统2、get内核
查看centos系统内核命令
查看机器配置
关闭防火墙
关闭selinux
网桥过滤
命令补全
阿里云,daocloud的docker是啥os/docker 注意事项
etcd version 0.5.0-alpha 2、组件二、架构说明配置Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。由于众多新颖的特性以及项目本身的开放性,Docker在不到两年的时间里迅速获得诸多IT厂商的参与,其中更是包括Google、Microsoft、VMware等业界行业。同时,Docker在开发者社区也是一石激起千层浪,许多如我之码农纷纷开始关注、学习和使用Docker,许多企业,尤其是互联网企业,也在不断加大对Docker的投入,大有掀起一场容器革命之势。
DOCKER 总结
2. 容器 开启和停止 程序Docker 是一个开源的 应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口。
由于本地开发好的程序往往都需要部署到上进行运行,这就导致了程序需要运行在不同的环境上,这通常是一个令人头痛的事情。在过去,开发团队需要清楚的告诉运维部署团队,其所使用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。
于是乎, 虚拟化 技术应运而生。开发团队将开发好的程序在虚拟机上运行,这样就能解决运维的问题。但是由于虚拟机技术过重的特性导致了其 资源占用多、冗余详细见以下配置文件,其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令,本例中配置成haproxy的reload命令。步骤多以及启动慢的缺陷 。而这个时候 一种新的虚拟化技术搭配上容器化的思想 的产品便出现了,而它就是Docker。
下图是虚拟机技术和容器化技术架构的对比。我们可以得出以下总结:
[上传失败...(image-efadd2-1643314980201)]
]( )
于是乎相比于虚拟机技术,容器化技术具有以下 优势:
相关网站
如下图所示,Docker使用客户端-(C/S)架构模式,使用远程API来管理和创建Docker容器。端分为Docker daemon, Image和Container三个部分。此外还有Docker Registry。
下面首先来介绍一下Docker中的主要概念
Docker的运行原理如下:客户端可以将docker命令发送到端的Docker daemon上,再由Docker damon根据指令创建、选择或者从Docker仓库中拉取(pull)镜像。接着客户端可以通过镜像创建容器。当我们需要使用程序时,运行相应的容器即可。
小结
需要正确的理解仓储/镜像/容器这几个概念 :
在外面使用容器的时候,我们不希望容器中的数据在容器被删除后也一并删除了,这时候我们就可以 通过使用容器数据卷,将数据储存在本地并用Docker将其挂载到容器中,这样我们即使删除了容器,数据也依旧存在中,也就实现了数据持久化。
特点
容器数据卷挂载命令(-v)
Dockerfile 挂载容器数据卷
我们除了可以从仓库中拉取镜像以外,我们也可以 自己创建镜像 ,这就要用到Docerfile。
dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 。
构建步骤:
基础知识:
流程:
说明:
在实际场景中,我们会遇到 多个Container之间通讯 的问题。而Docker网络就是用于解决此问题的技术。docker会给每个容器都分配一个ip,且容器和容器之间是可以互相访问的。
Docker网络原理
每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了 v-pair 技术 。Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据 Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网 关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中 进行数据的来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容 器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。
[上传中...(image-41d42a-1642627027452-2)]
Docker Come是一个用于定义并运行多容器应用的工具 。
Docker Come的 步骤如下 :
NOTE: Come :重要的概念。
docker-come.yml编写
Note: docker-come会自动为多容器之间创建网络,保证通讯。
Docker Swarm 是Docker 的集群管理工具。 它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
Docker 是一个开源的 应用容器引擎 ,它的出现大大简化了运维的难度,提高了运维效率。过去我们需要在上安装程序所需要的所有依赖,而如今我们只需要编写好docker-come和Dockefile的脚本,就可以使程序一键跑通。在企业级的应用中,我们必然会惊颤使用到Docker和容器化技术。
狂神说
如何在容器中运行docker命令
# ./build交互式运行docker容器
port: {{index $ 1}}[root@gage ~]#docker run -t -i ubuntu:14.04 /bin/bash
root@89471dce598b:/# ls
boot etc lib media opt root in sys usr
root@89471dce598b:/# pwd
/root@89471dce598b:/# exit
exit
后台运行一个容器让其输出hello world
[root@gage ~]# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
4bc1b2f2257e253e45b672811653f409b53176ac6670d4ddaeabe028dcd35b8e
显示正在运行的docker容器
[root@gage ~]# docker ps
Container
ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
4bc1b2f2257e
ubuntu:14.04 "/bin/sh -c 'while tr" 27 seconds ago Up 26
使用docker logs命令查看容器标准输出
[root@gage ~]# docker logs insane_bhabha
使用docker stop 停止容器
[root@gage ~]# docker stop insane_bhabha
insane_bhabha
[root@gage ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
10. Docker 安装与配置
Docker 是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、 Dockerfile等;Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序, 程序之间相互隔离;
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的一个的进程,不占用其他任何可执行文件的内存,非常轻量、高效、快速。
虚拟机运行的是一个完成的作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
参考:
Linux版本CentOS7
使用加速器可以提升获取Docker镜像的速度,下面使用 阿里云镜像 进行加速。
通过修改daemon配置文件 /etc/docker/daemon.json 来使用加速器
Docker 守护进程绑定在 Unix socket 而不是 TCP 端口。默认情况下 Unix socket 归属于 root 用户,其他用户只能通过 sudo 命令访问。所以 Docker 守护进程总是以 root 用户来运行。
如果你不希望每次运行 docker 命令时在前面加上 sudo,你可以创建一个 docker 用户组并把用户加进去。当 Docker 守护进程启动时,会创建一个 Unix socket 供 docker 用户组成员访问
什么是 DockerHub 以及为什么它很重要?DockerHub 是一个由 Docker 公司运行和管理的基于云的存储库。它是一个在线存储库,Docker 镜像可以由其他用户发布和使用。
有两种库:公共存储库和私有存储库 。如果你是一家公司,你可以在你自己的组织内拥有一个私有存储库,而公共镜像可以被任何人使用。
镜像层和容器层
例如:镜像、容器、网络和挂载卷等具体对象的作和管理。
Docker 从诞生到现在,服务端经历了多次架构重构。起初,服务端的组件是全部集成在docker 二进制里。但是从 1.11 版本开始, dockerd 已经成了的二进制,此时的容器也不是直接由dockerd 来启动了,而是集成了containerd、runC 等多个组件。
Docker 有两个至关重要的组件: runC和contaisrvtimeout 50000nerd。
runC 是Docker 按照OCI 容器运行时标准的一个实现。通俗地讲,runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。
containerd 是Docker 服务端的一个核心组件,它是从dockerd 中剥离出来的 ,它的诞生完全遵循OCI 标准,是容器标准化后的产物。containerd通过containerd-shim 启动并管理runC,可以说containerd真正管理了容器的生命周期。
1.作为path.Base函数的别名,获取路径一段。 容器中长期运行 程序
有两种方式:
有两种方式
3. 进入容器
有2种方法
想要web部署在互联网上 或者 在Web问 应用;
个人电脑处于 私网 中; IP地址处于 IPV4 和 IPV6 ;
安装appium
排错,困难
测试adb
改变TCPIP连接方式
查看appium运行日志
容器端口号为 4
开启nginx,就可以在web访问 192.168.0.100;
Dockerfile其实可以看做一个命令集 。每行均为一条命令。每行的个单词,就是命令command。后面的字符串是该命令所要接收的参数。比如ENTRYPOINT /bin/bash。ENTRYPOINT命令的作用就是将后面的参数设置为镜像的entrypoint。至于现有命令的含义,这里不再详述。DockOne上有很多的介绍。
FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。
在镜像的构建过程中执行特定的命令,并生成一个中间镜像。格式:
最多127层,不是写shell ;
如何在ubuntu上安装docker
创建 docker 用户组并添加你的用户Docker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个。更多的还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。注意:由于Docker需要在Linux Kernel 3.8及以上才可以很好的工作【本人在ubuntu12.04 lts 内核3.2也正常安装】,更是Ubuntu系统,这里有两种选择:Ubuntu 12.04 LTS或的Ubuntu 13.10 而本文比较喜欢倾向LTS,幸好有办法解决Kernel版本问题。
1、更新Ubuntu内核
使用如下命令1、haproxy行更新内核至3.8.0-25
sudo apt-get install linux-image-3.8.0-25-generic
sudo apt-get install linux-headers-3.8.0-25-generic
完成后重启电脑,通过命令 “uname -r” 来查看内核是否成功更新。
docker-come快速启动nginx
3. 进入容器 处于运行状态的容器可以通过docker创建nginx目录,目录下创建docker-come.yml文件如下:
nginx目录下创建创建nginx.conf文件,根据实际情况配置,我这里写一个示例:
在nginx目录下创建build目录,将前端静态文件拷贝到下边
在nginx目录下执行如下命令启动服务
启动之后,nginx就可以seconds insane_bhabha正常使用了。
使用busybox镜像创建容器启动容器并查看容器状态的命令是什么?
bin dev home lib64 mnt proc run srv tmp var1. 创建并启动容器 docker create命令来创建容器 $ 虽然 Docker 的架构在不停重构,但是各个模块的基本功能和定位并没有变化。它和一般的 C/S 架构系统一样,Docker 服务端模块负责和 Docker 客户端交互,并管理Docker 的容器、镜像、网络等资源。docker create -it --name=busybox busybox 1 容器启动有两种方式: 使用docker start命令基于
2. 终止容器 容器停止用docker stop 命令。格式为: docker stop [-t]|–time[=10]. 该命令首先会向运行中的容器发送SIGTERM信号,如果
用docker搭建一个高可用可扩展的服务支撑系统怎么做
hello world一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。
Docker 服务端是Docker 所有后台服务的统称 。其中dockerd 是一个非常重要的后台管理进程,它负责响应和处理来自Docker 客户端的请求,然后将客户端的请求转化为Docker 的具体作。一、架构优势
约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:
自动、实时发现及无感知服务刷新;
支持任意多台Docker主宿机;
支持多种APP接入且打散至不分主宿机;
采用Etcd存储信息,集群支持可靠性高;
采用Confd配置引擎,支持各类接入层,如Nginx;
具备资源弹性,伸缩自如(通过生成、销毁容器实现);
在HECD架构中,首先作Docker ,除了提交容器(Container)启动与停止指令外,还通过REST-API方式向Etcd(K/V)存储组件注册容器信息,包括容器名称、主宿机IP、映射端口等。Confd配置组件会定时查询Etcd组件获取的容器信息,根据定义好的配置模板生成Haproxy配置文件Haproxy.cfg,并且自动reload haproxy服务。用户在访问业务服务时,完全没有感知后端APP的上线、下线、切换及迁移,达到了自动发现、高可用的目的。详细架构图见图1-1。 图1-1 平台架构图
为了方便大家理解各组件间的关系,通过图1-2进行架构流程梳理,首先通过Shell或API作容器,下一步将容器信息注册到Etcd组件,Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息,通过Confd的模板引擎生成Haproxy配置,整个流程结束。
图1-2架构流程图
了解架构流程后,我们逐一对流程中各组件进行详细介绍。
1、Etcd介绍
Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
简单:支持 c 方式的用户 API (HTTP+JSON)
安全:可选 SSL 客户端证书认证
快速:单实例可达每秒 1000 次写作
可靠:使用 Raft 实现分布式
2、Confd介绍
Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置,同时具备定期探测机制,配置变更自动reload。
3、Haproxy介绍
HAProxy是提供高可用性、负载均衡以及基于TCP和HTTP应用的,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。(来源百科)
三、架构部署
平台环境基于Centos6.5+Docker1.2构建,其中Etcd的版本为etcd version 0.5.0-alpha,Confd版本为confd 0.6.2,Haproxy版本为HA-Proxy version 1.4.24。下面对平台的运行环境、安装部署、组件说明等进行详细说明,环境设备角色表如下: 1、组件安装
1.1 Docker安装
SSH终端登录192.168.1.22,执行以下命令:
# yum -y install docker-io
# serv docker start
# chkconfig docker on
1.2 Haproxy、confd安装
SSH终端登录192.168.1.20,执行以下命令:
# yum –y install haproxy
2、confd
# wget
# mv confd /usr/local/bin/confd
# chmod +x /usr/local/bin/confd
# /usr/local/bin/confd -version
confd 0.6.2
1.3 Etcd安装
SSH终端登录192.168.1.21,执行以下命令:
# yum -y install golang
# mkdir -p /home/install && cd /home/install
# git clone
# cd etcd
# cp bin/etcd /bin/etcd
# /bin/etcd -version
2.1 Etcd配置
由于etcd是一个轻量级的K/V存储平台,启动时指定相关参数即可,无需配置。
# /bin/etcd -peer-addr 192.168.1.21:7001 -addr 192.168.1.21:4001 -data-dir /data/etcd -peer-bind-addr 0.0.0.0:7001 -bind-addr 0.0.0.0:4001 &
由于etcd具备多机支持,参数“-peer-addr”指定与其它节点通讯的地址;参数“-addr”指定服务地址;参数“-data-dir”为指定数据存储目录。
由于etcd是通过REST-API方式进行交互,常见作如下:
1) 设置(set) key作 # c -L -d value="this is awesome"
{"action":"set","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}} 2) 获取(get) key信息# c -L
{"action":"get","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}}
3) 删除key信息
# c -L {"action":"delete","node":{"key":"/mykey","modifiedIndex":29,"createdIndex":28},"prevNode":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}} 更多作API见s://
2.2 Confd+Haproxy配置
由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。具体配置如下:
创建配置文件目录
# mkdir -p /etc/confd/{conf.d,templates}
(1)配置资源文件
【/etc/confd/conf.d/ haproxy.toml】 [template]
src = "haproxy.cfg.tmpl"
dest = "/etc/haproxy/haproxy.cfg"
keys = [
"/app/servers",
]reload_cmd = "/etc/init.d/haproxy reload"
(2)配置模板文件
Confd模板引擎采用了Go语言的文本模板,更多见://
【/etc/confd/templates/haproxy.cfg.tmpl】 global
log 127.0.0.1 local3
maxconn 5000
uid 99
gid 99
daemon
defaults
log 127.0.0.1 local3
mode
option dontlognull
retries 3
option redispatch
contimeout 5000
clitimeout 50000
listen frontend 0.0.0.0:80
mode
balance roundrobin
option forwardfor
{{range gets "/app/servers/"}}
server {{base .Key}} {{.Value}} check inter 5000 fall 1 rise 2
{{end}}
stats enable
stats uri /admin-status
stats auth admin:123456
stats admin if TRUE
(3)模板引擎说明
本小节详细说明Confd模板引擎基础语法与示例,下面为示例用到的KEY信息。
# c -XPUT value="192.168.1.22:456"
# c -XPUT value="192.168.1.22:458"
# c -XPUT value="192.168.1.22:460"
# c -XPUT value="192.168.1.22:462"1、base
{{ with get "/app/servers/prickly_blackwell"}}
server {{base .Key}} {{.Value}} check
{{end}}
prickly_blackwell 192.168.1.22:462
返回一对匹配的KV,找不到则返回错误。
{{with get "/app/servers/prickly_blackwell"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
/app/servers/prickly_blackwell 192.168.1.22:462
3、gets
{{range gets "/app/servers/"}}
{{.Key}} {{.Value}}
{{end}}
/app/servers/backstabbing_rosalind 192.168.1.22:456
/app/servers/cocky_morse 192.168.1.22:458
/app/servers/goofy_goldstine 192.168.1.22:460
app/servers/prickly_blackwell 192.168.1.22:462
4、getv
返回一个匹配key的字符串型Value,找不到则返回错误。
{{getv "/app/servers/cocky_morse"}}
192.168.1.22:458
5、getvs
返回所有匹配key的字符串型Value,找不到则返回错误。
{{range getvs "/app/servers/"}}
value: {{.}}
{{end}}
value: 192.168.1.22:456
value: 192.168.1.22:458
value: 192.168.1.22:460
value: 192.168.1.22:462
6、split
对输入的字符串做split处理,即将字符串按指定分隔符拆分成数组。
{{ $ := split (getv "/app/servers/cocky_morse") ":" }}
host: {{index $ 0}}
host: 192.168.1.22
port: 458
7、ls
返回所有的字符串型子key,找不到则返回错误。
{{range ls "/app/servers/"}}
subkey: {{.}}
{{end}}
subkey: backstabbing_rosalind
subkey: cocky_morse
subkey: goofy_goldstine
subkey: prickly_blackwell
8、lsdir
返回所有的字符串型子目录,找不到则返回一个空列表。
{{range lsdir "/app/"}}
subdir: {{.}}
{{end}}
subdir: servers
(4)启动confd及haproxy服务
下面为启动Confd服务命令行,参数“interval”为指定探测etcd的频率,单位为秒,参数“-node”为指定etcd服务主地址,以便获取容器信息。
# /usr/local/bin/confd -verbose -interval 10 -node '192.168.1.21:4001' -confdir /etc/confd > /var/log/confd.log &
# /etc/init.d/haproxy start
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。