GVKun编程网logo

Docker安装部署es集群(docker 搭建es集群)

5

如果您对Docker安装部署es集群感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Docker安装部署es集群的详细内容,我们还将为您解答docker搭建es集群的相关问题

如果您对Docker安装部署es集群感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Docker安装部署es集群的详细内容,我们还将为您解答docker 搭建es集群的相关问题,并且为您提供关于005.基于docker部署etcd集群部署、CentOS 7上安装Kubernetes集群部署Docker、CentOS6.8下docker安装部署、Centos7.3 Docker安装部署学习记录1的有价值信息。

本文目录一览:

Docker安装部署es集群(docker 搭建es集群)

Docker安装部署es集群(docker 搭建es集群)

Docker安装部署es集群:
环境准备:已安装docker的centos服务器一台
1. 拉取es版本
docker pull elasticsearch:5.6.8
2. 新建文件夹 数据挂载目录 和 配置文件目录
[root@localhost es]# mkdir data1
[root@localhost es]# mkdir data2
[root@localhost es]# mkdir data3
[root@localhost es]# cd config/
[root@localhost config]# touch es1.yml
[root@localhost config]# vim es1.yml

es1.yml文件

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.1.110
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.110:9300","192.168.1.110:9301","192.168.1.110:9302"]
discovery.zen.minimum_master_nodes: 2
es2.yml文件

cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.1.110
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.110:9300","192.168.1.110:9301","192.168.1.110:9302"]
discovery.zen.minimum_master_nodes: 2
es3.yml文件

cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.1.110
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.110:9300","192.168.1.110:9301","192.168.1.110:9302"]
discovery.zen.minimum_master_nodes: 2

3. 调高jvm线程数限制
vim /etc/sysctl.conf
加入
vm.max_map_count=262144

执行生效
sysctl –p
4. 启动es集群
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /home/soft/ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data1:/usr/share/elasticsearch/data --name ES01 elasticsearch:5.6.8

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /home/soft/ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data2:/usr/share/elasticsearch/data --name ES02 elasticsearch:5.6.8

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /home/soft/ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/soft/ES/data3:/usr/share/elasticsearch/data --name ES03 elasticsearch:5.6.8

5. 可以使用google(elasticsearch-head.crx)插件连接集群查看:

 

005.基于docker部署etcd集群部署

005.基于docker部署etcd集群部署

一 环境准备

ntp配置:略 #建议配置ntp服务,保证时间一致性
etcd版本:v3.3.9
防火墙及SELinux:关闭防火墙和SELinux
名称
地址
主机名
备注
etcd1
172.24.8.71
etcd1.example.com
 
etcd2
172.24.8.72
etcd2.example.com
 
etcd3
172.24.8.73
etcd3.example.com
 
  1 # hostnamectl set-hostname etcd1.example.com
  2 # hostnamectl set-hostname etcd2.example.com
  3 # hostnamectl set-hostname etcd3.example.com
 

二 docker etcd集群部署

2.1 安装docker

见《docker版本及安装》。

2.2 etcd基础配置

  1 # mkdir -p /var/log/etcd/			        #建议创建etcd日志保存目录
  2 # mkdir -p /data/etcd				#建议创建单独的etcd数据目录
  3 # REGISTRY=gcr.io/etcd-development/etcd		#配置etcd镜像的仓库,不推荐使用
  4 # REGISTRY=quay.io/coreos/etcd			#建议使用此仓库
  5 # ETCD_VERSION=latest				#设置etcd版本
  6 # TOKEN=my-etcd-01				        #设置唯一集群ID
  7 # CLUSTER_STATE=new				        #置为新建集群
  8 # NAME_1=etcd1
  9 # NAME_2=etcd2
 10 # NAME_3=etcd3					#设置三个节点的name
 11 # HOST_1=172.24.8.71
 12 # HOST_2=172.24.8.72
 13 # HOST_3=172.24.8.73				#设置三个节点的IP
 14 # CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380					                        #设置集群所有节点信息
 15 # DATA_DIR=/data/etcd				#设置集群etcd数据节点
 
提示:以上所有操作需要在所有节点操作。

2.3 启动docker etcd集群

  1 [root@etcd1 ~]# THIS_NAME=${NAME_1}
  2 [root@etcd1 ~]# THIS_IP=${HOST_1}
  3 [root@etcd1 ~]# docker run \
  4   -p 2379:2379 \
  5   -p 2380:2380 \
  6   --volume=${DATA_DIR}:/etcd-data \
  7   --name etcd ${REGISTRY}:${ETCD_VERSION} \
  8   /usr/local/bin/etcd \
  9   --data-dir=/etcd-data --name ${THIS_NAME} \
 10   --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
 11   --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
 12   --initial-cluster ${CLUSTER} \
 13   --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
 14 
 15 [root@etcd2 ~]# THIS_NAME=${NAME_2}
 16 [root@etcd2 ~]# THIS_IP=${HOST_2}
 17 [root@etcd2 ~]# docker run \
 18   -p 2379:2379 \
 19   -p 2380:2380 \
 20   --volume=${DATA_DIR}:/etcd-data \
 21   --name etcd ${REGISTRY}:${ETCD_VERSION} \
 22   /usr/local/bin/etcd \
 23   --data-dir=/etcd-data --name ${THIS_NAME} \
 24   --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
 25   --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
 26   --initial-cluster ${CLUSTER} \
 27   --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
 28 
 29 [root@etcd3 ~]# THIS_NAME=${NAME_3}
 30 [root@etcd3 ~]# THIS_IP=${HOST_3}
 31 [root@etcd3 ~]# docker run \
 32   -p 2379:2379 \
 33   -p 2380:2380 \
 34   --volume=${DATA_DIR}:/etcd-data \
 35   --name etcd ${REGISTRY}:${ETCD_VERSION} \
 36   /usr/local/bin/etcd \
 37   --data-dir=/etcd-data --name ${THIS_NAME} \
 38   --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
 39   --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
 40   --initial-cluster ${CLUSTER} \
 41   --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
 
提示:quay.io/coreos/etcd镜像国内可能无法pull,可在国外节点pull,然后scp至集群节点。

2.4 确认验证

  1 [root@etcd1 ~]# docker ps
15
  1 [root@etcd2 ~]# docker ps
16
  1 [root@etcd3 ~]# docker ps
17
  1 [root@etcd1 ~]# docker exec -it 21e6cf6e5e89 /usr/local/bin/etcdctl cluster-health
18
  1 [root@etcd1 ~]# netstat -nltp | grep 2380
19
 

CentOS 7上安装Kubernetes集群部署Docker

CentOS 7上安装Kubernetes集群部署Docker

1.操作系统详情
需要三台主机,都最小化安装CentOS7.3,并update到最新
cat /etc/RedHat-release
CentOS Linux release 7.3.1611 (Core)
角色主机名IP
Master master192.168.1.14
node1 slave-1192.168.1.15
node2slave-2192.168.1.16

2.在每台主机上关闭firewalld改用iptables
输入以下命令,关闭firewalld
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
然后安装iptables并启用
yum install -y iptables-services #安装
systemctl start iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

3.安装ntp服务
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd

二、安装配置
注:kubernetes,etcd等已经进去centos epel源,可以直接yum安装(需要安装epel-release)

1.安装Kubernetes Master

使用以下命令安装kubernetes 和 etcd
# yum install -y kubernetes etcd
编辑/etc/etcd/etcd.conf 使etcd监听所有的ip地址,确保下列行没有注释,并修改为下面的值
vim /etc/etcd/etcd.conf
# [member]
ETCD_NAME=default
ETCD_data_dir="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER="default=http://192.168.1.14:2380"
#[cluster]
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.14:2379"
编辑Kubernetes API server的配置文件 /etc/kubernetes/apiserver,确保下列行没有被注释,并为下列的值
vim /etc/kubernetes/apiserver
###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"
# The port on the local server to listen on.
KUBE_API_PORT="--port=8080"
# Port minions listen on
KUBELET_PORT="--kubelet_port=10250"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.14:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# default admission control policies
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
# Add your own!
KUBE_API_ARGS=""
启动etcd,kube-apiserver,kube-controller-manager and kube-scheduler服务,并设置开机自启
vim /script/kubenetes_service.sh
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
sh /script/kubenetes_service.sh
在etcd中定义flannel network的配置,这些配置会被flannel service下发到nodes:
etcdctl mk /centos.com/network/config '{"Network":"172.17.0.0/16"}'
添加iptables规则,允许相应的端口
iptables -I INPUT -p tcp --dport 2379 -j ACCEPT
iptables -I INPUT -p tcp --dport 10250 -j ACCEPT
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
iptables-save
或者写入iptables配置文件 /etc/sysconfig/iptables
查看节点信息(我们还没有配置节点信息,所以这里应该为空)
# kubectl get nodes
NAME LABELS STATUS

2. 安装Kubernetes Minions (Nodes)
注:下面这些步骤应该在minion1和minions2上执行(也可以添加更多的minions)
使用yum安装kubernetes 和 flannel
# yum install -y flannel kubernetes
为flannel service配置etcd服务器,编辑/etc/sysconfig/flanneld文件中的下列行以连接到master
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD="http://192.168.1.14:2379" #改为etcd服务器的ip
FLANNEL_ETCD_PREFIX="/centos.com/network"
编辑/etc/kubernetes/config 中kubernetes的默认配置,确保KUBE_MASTER的值是连接到Kubernetes master API server:
# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.1.14:8080"
编辑/etc/kubernetes/kubelet 如下行:
node1:
# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname_override=192.168.1.15"
KUBELET_API_SERVER="--api_servers=http://192.168.1.14:8080"
KUBELET_ARGS=""
node2:
# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname_override=192.168.1.16"
KUBELET_API_SERVER="--api_servers=http://192.168.1.14:8080"
KUBELET_ARGS=""
启动kube-proxy,kubelet,docker 和 flanneld services服务,并设置开机自启
for SERVICES in kube-proxy kubelet docker flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
在每个minion节点,你应当注意到你有两块新的网卡docker0 和 flannel0。你应该得到不同的ip地址范围在flannel0上,就像下面这样:
node1:
# ip a | grep flannel | grep inet
inet 172.17.29.0/16 scope global flannel0
node2:
# ip a | grep flannel | grep inet
inet 172.17.37.0/16 scope global flannel0
添加iptables规则:
iptables -I INPUT -p tcp --dport 2379 -j ACCEPT
iptables -I INPUT -p tcp --dport 10250 -j ACCEPT
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
现在登陆kubernetes master节点验证minions的节点状态:
# kubectl get nodes
NAME LABELS STATUS
192.168.1.15 kubernetes.io/hostname=192.168.1.15 Ready
192.168.1.16 kubernetes.io/hostname=192.168.1.16 Ready
至此,kubernetes集群已经配置并运行了,我们可以继续下面的步骤。


三、创建 Pods (Containers)
为了创建一个pod,我们需要在kubernetes master上面定义一个yaml 或者 json配置文件。然后使用kubectl命令创建pod
# mkdir -p /k8s/pods
# cd /k8s/pods/
# vim Nginx.yaml
在Nginx.yaml里面增加如下内容:
apiVersion: v1
kind: Pod
Metadata:
name: Nginx
labels:
app: Nginx
spec:
containers:
- name: Nginx
image: Nginx
ports:
- containerPort: 80
创建pod:
# kubectl create -f Nginx.yaml
此时有如下报错:
Error from server: error when creating "Nginx.yaml": Pod "Nginx" is forbidden: no API token found for service account default/default,retry after the token is automatically created and added to the service account
解决办法是编辑/etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL中的SecurityContextDeny,ServiceAccount,并重启kube-apiserver.service服务:
#vim /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,ResourceQuota"
#systemctl restart kube-apiserver.service
之后重新创建pod:
# kubectl create -f Nginx.yaml
pods/Nginx
查看pod:
# kubectl get pod Nginx
NAME READY STATUS RESTARTS AGE
Nginx 0/1 Image: Nginx is not ready on the node 0 34s
这里STATUS一直是这个,创建不成功,下面排错。通过查看pod的描述发现如下错误:
# kubectl describe pod Nginx
Wed,28 Oct 2015 10:25:30 +0800 Wed,28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} implicitly required container POD pulled Successfully pulled Pod container image "gcr.io/google_containers/pause:0.8.0"
Wed,28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} implicitly required container POD Failed Failed to create docker container with error: no such image
Wed,28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} FailedSync Error syncing pod,skipping: no such image
Wed,28 Oct 2015 10:27:30 +0800 Wed,28 Oct 2015 10:29:30 +0800 2 {kubelet 192.168.1.16} implicitly required container POD Failed Failed to pull image "gcr.io/google_containers/pause:0.8.0": image pull Failed for gcr.io/google_containers/pause:0.8.0,this may be because there are no credentials on this request. details: (API error (500): invalid registry endpoint "http://gcr.io/v0/". HTTPS attempt: unable to ping registry endpoint https://gcr.io/v0/
v2 ping attempt Failed with error: Get https://gcr.io/v2/: dial tcp 173.194.72.82:443: I/O timeout
这里可能会遇到pod状态一直处于Penning的问题,此时可以通过kubectl describe pods/pod-name来查看pod信息,如果没有出错信息,那么Minion一直处于下载镜像中,下载好之后pod即会成功启动。
从网上找到 pause:0.8.0 的镜像,然后再每个node上导入镜像:
请在境外docker服务器执行 docker pull 命令下载镜像
gcr.io/google_containers/pause:latestgcr.io/google_containers/pause:1.0gcr.io/google_containers/pause:0.8.0
再用导出镜像
docker save -o pause.tar gcr.io/google_containers/pausegzip pause.tar
最后把这个包放到 kubernetes 环境所有的 docker 服务器上
docker load -i pause.tar.gz
在执行以下命令即可成功创建pod
[root@master ~]#kubectl create -f Nginx.yamlpods/Nginx
查看pod
[root@master ~]# kubectl get pod NginxNAME READY STATUS RESTARTS AGENginx 1/1 Running 0 2min
前往nodes节点上查看docker images
[root@slave1 ~]# docker imagesREPOSITORY TAG

更多Docker相关教程见以下内容

Docker安装应用(CentOS 6.5_x64)http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu14.04安装Dockerhttp://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu使用VNC运行基于Docker的桌面系统http://www.linuxidc.com/Linux/2015-08/121170.htm

阿里云CentOS 6.5 模板上安装 Dockerhttp://www.linuxidc.com/Linux/2014-11/109107.htm

Ubuntu 15.04下安装Dockerhttp://www.linuxidc.com/Linux/2015-07/120444.htm

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Dockerhttp://www.linuxidc.com/Linux/2014-10/108184.htm

在 Ubuntu 15.04 上如何安装Docker及基本用法http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04上Docker使用手记http://www.linuxidc.com/Linux/2016-12/138490.htm

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142676.htm

CentOS6.8下docker安装部署

CentOS6.8下docker安装部署

1 docker简介

Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXCLinuX Containerslinux 容器)上的管道,允许开发者在更高层次的概念上工作。

Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXCcgroups Linux 自己的内核。和传统的虚拟机不同的是,一个 Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。

Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:

1.虚拟化技术依赖物理cpu和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached

3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker也是一个云计算平台,它利用LinuxLXCAUFUGo语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

Docker 由下面这些组成:

1. Docker 服务器守护程序(server daemon),用于管理所有的容器。

2. Docker 命令行客户端,用于控制服务器守护程序。

3. Docker 镜像:查找和浏览 docker 容器镜像。

2 docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如cpu和内存。

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。

写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式ShellDocker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell

3 两个基础概念imagescontainer

ContainerImage Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:

wKioL1fYslfBEGRaAAG4sTb3Sbo843.png-wh_50

Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container

ImageContainer的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。

4 docker安装与启动

安装docker

# yum install docker-io

更改配置文件:

# vi /etc/sysconfig/docker

other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"

启动docker服务:

# servicedockerstart

docker加入开机启动:

# chkconfig docker on

基本信息查看

docker version:查看docker的版本号,包括客户端、服务端、依赖的Go

# docker version

docker info :查看系统(docker)层面信息,包括管理的images,containers数等

# docker info

5 镜像的获取与容器的使用

镜像可以看作是包含有某些软件的容器系统,比如ubuntu就是一个官方的基础镜像,很多镜像都是基于这个镜像“衍生”,该镜像包含基本的ubuntu系统。再比如,hipache是一个官方的镜像容器,运行后可以支持httpwebsocket的代理服务,而这个镜像本身又基于ubuntu

搜索镜像:

docker search <image>:在docker index中搜索image

# docker search ubuntu12.10

下载镜像:

docker pull <image> :从docker registry server 中下拉image

# docker pull chug/ubuntu12.10x64

注意:这种下载方式会出现跨洋网络延迟,下载速度很慢,或者下载失败。此时可以使用国内DaoCloud团队提供的服务Docker Hub Mirror,到DaoCloud官网注册账号,获得镜像下载路径,如下:

wKiom1fYsnCwxqYNAAB7lGXgLy0209.png-wh_50

# docker pull daocloud.io/library/ubuntu:precise-20160819 //下次下载需要新的链接。

查看镜像

docker images: 列出images

docker images -a :列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi <image ID>: 删除一个或多个image

使用镜像创建容器

# docker run docker pull daocloud.io/library/ubuntu:precise-20160819 /bin/echo hello world

hello world

交互式运行

# docker run -i -t docker pull daocloud.io/library/ubuntu:precise-20160819 /bin/bash

root@2161509ff65e:/#

查看容器

docker ps :列出当前所有正在运行的container

docker ps -l :列出最近一次启动的container

docker ps -a :列出所有的container(包含历史,即运行过的container

docker ps -q :列出最近一次运行的container ID

再次启动容器

docker start/stop/restart <container> :开启/停止/重启container

docker start [container_id] :再次运行某个container (包括历史container

docker attach [container_id] :连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach 一个container实例)

docker start -i <container> :启动一个container并进入交互模式(相当于先start,在attach

docker run -i -t <image> /bin/bash :使用image创建container并进入交互模式,login shell/bin/bash

docker run -i -t -p <host_port:contain_port> :映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container

删除容器

docker rm <container...> :删除一个或多个container

docker rm `docker ps -a -q` :删除所有的container

docker ps -a -q | xargs docker rm :同上,删除所有的container

6 持久化容器与镜像

6.1 通过容器生成新的镜像

运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。

docker commit <container> [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选。

6.2 持久化容器

export命令用于持久化容器

docker export <CONTAINER ID> > /tmp/export.tar

6.3 持久化镜像

Save命令用于持久化镜像

docker save 镜像ID > /tmp/save.tar

6.4 导入持久化container

# cat /tmp/export.tar | docker import - export:latest

6.5 导入持久化image

# docker load < /tmp/save.tar

imagetag

# docker tag daa11948e23d load:tag

6.6 一些其它命令

docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行

docker inspect $CONTAINER_ID #docker inspect <image|container> 查看imagecontainer的底层信息

docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

docker build -t repo[:tag] 同上,可以指定repo和可选的tag

docker build - < <dockerfile> 使用指定的dockerfile配置文件,dockerstdin方式获取内容,使用此配置生成新的image

docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到.

7 一些使用技巧

Docker实际上把所有东西都放到/var/lib/docker路径下了。

# ls -F

containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/

containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。

Centos7.3 Docker安装部署学习记录1

Centos7.3 Docker安装部署学习记录1

一、Docker基础环境的安装

1. 环境说明

本机采用操作系统如下: CentOS-7.3-X86-64,内核3.10 x64位,docker 1.12.x版本。
建议采用CentOS7版本或ubuntu版本,本文采用CentOS7即CentOS-7-x86_64-DVD-1611.iso版本最小化安装。
Docker可以在虚拟机环境中运行进行使用测试。本文出自:http://koumm.blog.51cto.com/

2. 主机网络

1)关闭firewalld防火墙和SELinux
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

systemctl disable firewalld
systemctl stop firewalld

docker是必须要防火墙功能模块的,个人目前用iptables

systemctl disable iptables.service
systemctl stop iptables.service

注意最小化需要补充安装的软件包:
yum install vim net-tools iptables-config


2)配置hosts文件(主机名称)
echo "192.168.1.90 docker1" >> /etc/hosts

3. 安装Docker软件包

1)可以直接安装包yum源
# yum install -y docker

2)配置docker开机自启动以及启动服务
# systemctl start docker.service
# systemctl enable docker.service

3)查看docker服务器,表示docker已安装成功

查看版本:docker version
帮助信息:docker --help
概要信息:docker info
镜像查看:docker images
进程查看:docker ps -a
搜索镜像:docker search centos #搜索可用docker镜像

示例: 表示docker已安装成功。

[root@docker1~]#dockerinfo

Containers:4
Running:0
Paused:0
Stopped:4
Images:3
ServerVersion:1.12.6
StorageDriver:devicemapper
PoolName:docker-253:0-16798063-pool
PoolBlocksize:65.54kB
BaseDeviceSize:10.74GB
backingFilesystem:xfs
Datafile:/dev/loop0
Metadatafile:/dev/loop1
DataSpaceUsed:849.3MB
DataSpacetotal:107.4GB
DataSpaceAvailable:15.27GB
MetadataSpaceUsed:1.937MB
MetadataSpacetotal:2.147GB
MetadataSpaceAvailable:2.146GB
ThinPoolMinimumFreeSpace:10.74GB
UdevSyncSupported:true
DeferredRemovalEnabled:false
DeferredDeletionEnabled:false
DeferredDeletedDeviceCount:0
Dataloopfile:/var/lib/docker/devicemapper/devicemapper/data
WARNING:Usageofloopbackdevicesisstronglydiscouragedforproductionuse.Use`--storage-optdm.thinpooldev`tospecifyacustomblockstoragedevice.
Metadataloopfile:/var/lib/docker/devicemapper/devicemapper/Metadata
LibraryVersion:1.02.135-RHEL7(2016-09-28)
LoggingDriver:journald
CgroupDriver:systemd
Plugins:
Volume:local
Network:bridgehostnulloverlay
Swarm:inactive
Runtimes:docker-runcrunc
DefaultRuntime:docker-runc
SecurityOptions:seccomp
KernelVersion:3.10.0-514.el7.x86_64
OperatingSystem:CentOSLinux7(Core)
OSType:linux
Architecture:x86_64
NumberofDockerHooks:2
cpus:2
TotalMemory:984.8MiB
Name:docker1
ID:YZZ7:NRHH:WJM7:PYUR:DGRH:4MLD:4GT4:UR2I:5PUZ:EAGS:P4Z2:JSL4
DockerRootDir:/var/lib/docker
DebugMode(client):false
DebugMode(server):false
Registry:https://index.docker.io/v1/
InsecureRegistries:
127.0.0.0/8
Registries:docker.io(secure)


二、Docker使用基础

1. 下载docker基础镜像

1)搜索centos基础镜像

[root@docker1~]#dockersearchcentos
INDEXNAMEDESCRIPTIONSTARSOFFICIALAUTOMATED
docker.iodocker.io/centosTheofficialbuildofCentOS.3362[OK]
docker.iodocker.io/jdeathe/centos-sshCentOS-66.9x86_64/CentOS-77.3.1611x8...69[OK]
docker.iodocker.io/nimmis/java-centosThisisdockerimagesofCentOS7withdif...26[OK]
docker.iodocker.io/gluster/gluster-centosOfficialglusterFSImage[CentOS-7+glu...19[OK]
docker.iodocker.io/million12/centos-supervisorBaseCentOS-7withsupervisordlauncher,h...16[OK]
docker.iodocker.io/kinogmt/centos-sshCentOSwithSSH13[OK]
docker.iodocker.io/egyptianbman/docker-centos-Nginx-PHPAsimpleandhighlyconfigurabledockerco...9[OK]
docker.iodocker.io/torusware/speedus-centosAlwaysupdatedofficialCentOSdockerimag...8[OK]
docker.iodocker.io/centos/mariadb55-centos75[OK]
docker.iodocker.io/nathonfowlie/centos-jreLatestCentOSimagewiththeJREpre-insta...5[OK]
docker.iodocker.io/darksheer/centosBaseCentosImage--Updatedhourly3[OK]
docker.iodocker.io/harisekhon/centos-javaJavaonCentOS(OpenJDK,tagsjre/jdk7-8)2[OK]
docker.iodocker.io/harisekhon/centos-scalaScala+CentOS(OpenJDKtags2.10-jre7-2...2[OK]
docker.iodocker.io/blacklabelops/centosCentOSBaseImage!BuiltandUpdatesDaily!1[OK]
docker.iodocker.io/freenas/centosSimpleCentOSLinuxinteractivecontainer1[OK]
docker.iodocker.io/sgfinans/docker-centosCentOSwitharunningsshdandDocker1[OK]
docker.iodocker.io/timhughes/centosCentoswithsystemdinstalledandrunning1[OK]
docker.iodocker.io/vorakl/centosCentOS7,EPEL,tools.Updated/Testeddaily!1[OK]
docker.iodocker.io/grossws/centosCentOS6and7baseimageswithgosuandl...0[OK]
docker.iodocker.io/januswel/centosyumupdate-edCentOSimage0[OK]
docker.iodocker.io/kz8s/centosOfficialCentOSplusepel-release0[OK]
docker.iodocker.io/labengine/centosCentosimagebase0[OK]
docker.iodocker.io/repositoryjp/centosDockerImageforCentOS.0[OK]
docker.iodocker.io/vcatechnology/centosACentOSImagewhichisupdateddaily0[OK]
docker.iodocker.io/wenjianzhou/centoscentos0[OK]
[root@docker1~]#


2)下载centos基础镜像

本文采用官方默认镜像仓库下载。

[root@docker1 ~]# docker pull centos

Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
343b09361036: Pull complete
Digest: sha256:bba1de7c9d900a898e3cadbae040dfe8a633c06bc104a0df76ae24483e03c077

下载其它示例:下载支持ssh服务器的centos镜像

[root@docker1~]#dockerpulljdeathe/centos-ssh
Usingdefaulttag:latest
Tryingtopullrepositorydocker.io/jdeathe/centos-ssh...
latest:Pullingfromdocker.io/jdeathe/centos-ssh
45a2e645736c:Pullcomplete
f0d571ff94cf:Pullcomplete
ea228e12ac20:Pullcomplete
edd63eef0a83:Pullcomplete
27c3eb39991d:Pullcomplete
4bf26ef9f3dd:Pullcomplete
4e572750aff7:Pullcomplete
b94a26882ae9:Pullcomplete
91ee52de11b1:Pullcomplete
e89f8a480c42:Pullcomplete
bd26710715b3:Pullcomplete
75c421c47829:Pullcomplete
f6eabaf37913:Pullcomplete
Digest:sha256:c80d3b79c853ce41a993cfa76f1b5983dffeb08aceefaaf04d64c9dc2e177d8e


2. 通过导出、导入的方式部署基础镜像

#官方镜像的下载很慢,有时多次尝试才能下载。

方法一:

#一台已经下载的好的镜像的服务器上操作。

docker save centos > /opt/centos.tar #Docker导出镜像
docker load < /opt/centos.tar #Docker导入镜像

方法二:

docker export id > /opt/centos.tar #Docker导出镜像
cat /opt/centos.tar | docker import centos #Docker导入镜像


*注1:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。
*注2:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指定标签等元数据信息。


3. 查看下载的基础镜像

[root@docker1~]#dockerimages
-----------------------------------------------------------------------------------------------------
REPOSITORYTAGIMAGEIDCREATEDSIZE
docker.io/jdeathe/centos-sshlatest1d551d635e994daysago214MB
docker.io/centoslatest8140d0c643102weeksago192.5MB

说明 :
REPOSITORY:来自于哪个仓库,比如 centos
TAG : 镜像的标记,一般修改版本号,latest为最后版本
IMAGE ID : 镜像的id号
CREATED : 创建镜像的时间
SIZE : 镜像的大小

4. 通过基础镜像创建一个容器

1)通过基础镜像centos创建一个容器名为centos_v1,并在后台执行

[root@docker1 ~]# docker run -it -d --name centos_v1 centos /bin/bash
0c1841e5d1115d35b80177ed5ea4fc5782e8a3ffc5f5c801979fb90ac5f26423

常用参数说明:
-i: 开启交互式shell
-t: 为容器分配一个伪tty终端
centos: 指定镜像的名字
/bin/bash: 运行/bin/bash


2) 查看容器

[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c1841e5d111 centos "/bin/bash" 7 seconds ago Up 4 seconds centos_v1

查看docker镜像的状态,-a表示列出所有的容器,STATUS如果为Exited为退出,UP为运行。


3)进入容器

[root@docker1 ~]# docker exec -it centos_v1 /bin/bash

提示符变成了0c1841e5d111,也是该容器的ID,也是该容器的主机名。

[root@0c1841e5d111 /]# ls
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

[root@0c1841e5d111 /]# hostname
0c1841e5d111


4)退出容器

[root@0c1841e5d111 /]# exit
exit
[root@docker1 ~]#


5. 查看容器状态

[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c1841e5d111 centos "/bin/bash" About an hour ago Up About an hour centos_v1


6. 关闭与启动容器

关闭容器

[root@docker1 ~]# docker stop centos_v1
centos_v1

[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c1841e5d111 centos "/bin/bash" About an hour ago Exited (137) 3 seconds ago centos_v1

说明:STATUS状态为EXIT表示容器是退出状态。


启动容器

[root@docker1 ~]# docker start centos_v1
centos_v1

[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c1841e5d111 centos "/bin/bash" About an hour ago Up 3 seconds centos_v1
[root@docker1 ~]#
[root@docker1 ~]#


7. 删除容器

1)删除容器(通过镜像ID与镜像名称均可)

[root@docker1 ~]# docker rm centos_v1 或 docker rm 0c1841e5d111

2)对于正在运行的容器,可以加-f参数强制进行删除。

[root@docker1 ~]# docker rm -f centos_v1


8. 通过一个容器创建镜像

说明:只能对运行中的容器提交本地镜像,关闭状态的容器无法提交本地镜像。

1)通过容器提交镜像

[root@docker1 ~]# docker commit centos_v1 centos:v1
sha256:66d2dc12144a87def3c16080553cca41d2a2965d9332f2a085dc23cc30366afa

[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 66d2dc12144a 6 seconds ago 192.5 MB
docker.io/jdeathe/centos-ssh latest 1d551d635e99 4 days ago 214 MB
docker.io/centos latest 8140d0c64310 2 weeks ago 192.5 MB


2)删除镜像(通过镜像ID与镜像名称均可)

[root@docker1 ~]# docker rmi centos:v1

[root@docker1 ~]# docker rmi 66d2dc12144a

Untagged: centos:v1
Deleted: sha256:66d2dc12144a87def3c16080553cca41d2a2965d9332f2a085dc23cc30366afa
Deleted: sha256:9c6100b12798ef72aeb16c13d3d8da8bef0a060d3162f068ea8730025e3508ea


9. 示例:创建一个提供apache服务器的容器

1)通过最基础镜像创建一个容器,用于制做

[root@docker1 ~]# docker run -it -d --name abc centos /bin/bash
[root@docker1 ~]# docker exec -it httpd-80 /bin/bash

# yum install net-tools httpd -y


2) 通过httpd-80容器制一个http本地镜像

[root@docker1 ~]# docker commit httpd-80 centos:apache


3) 通过centos:apache镜像可以创建很多个容器

参数说明:-p 80:80 映射本地端口到容器的对应端口上,可以配置多个端口。

[root@docker1~]#dockerrun-it-d-p8082:80--nameapache-8082centos:apache/usr/sbin/apachectl-DFOREGROUND
1fb934170108b66fcdfa7c77f6673d33aca44fac63ca0b61b35f06519c3ef242
[root@docker1~]#dockerrun-it-d-p8081:80--nameapache-8081centos:apache/usr/sbin/apachectl-DFOREGROUND
cc4e7689db7bd5674f131782c470cf640594d298dbc88b680fc3caeb77bce256
[root@docker1~]#dockerrun-it-d-p8080:80--nameapache-8080centos:apache/usr/sbin/apachectl-DFOREGROUND
da494401dd34f843dac50e67a1a1c3077b44f9faeadff3403e50196fe4ce5318
[root@docker1~]#dockerps-a
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
da494401dd34centos:apache"/usr/sbin/apachectl"5secondsagoUp4seconds0.0.0.0:8080->80/tcpapache-8080
cc4e7689db7bcentos:apache"/usr/sbin/apachectl"17secondsagoUp15seconds0.0.0.0:8081->80/tcpapache-8081
1fb934170108centos:apache"/usr/sbin/apachectl"26secondsagoUp25seconds0.0.0.0:8082->80/tcpapache-8082
f4b6bffcca1bcentos"/bin/bash"8minutesagoUp8minuteshttpd-80
[root@docker1~]#

我们今天的关于Docker安装部署es集群docker 搭建es集群的分享已经告一段落,感谢您的关注,如果您想了解更多关于005.基于docker部署etcd集群部署、CentOS 7上安装Kubernetes集群部署Docker、CentOS6.8下docker安装部署、Centos7.3 Docker安装部署学习记录1的相关信息,请在本站查询。

本文标签: