安装CentOs7
操作系统安装略过,百度有很多教程。
安装docker
在该选项中有几种不同的安装方法,可根据自己需要进行安装,我这里常用的安装方式是下面这个:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
启动docker registry
新建目录:mkdir /home/registry
docker run -d -p 5000:5000 -v /home/registry:/var/lib/registry -u 0 --restart=always --name registry registry
在/etc/hosts中添加dns解析记录
10.83.3.120 s01.ycrh.jsyt
10.83.3.121 s02.ycrh.jsyt
10.83.3.123 s03.ycrh.jsyt
添加/etc/docker/daemon.json文件
{
"insecure-registries": ["s01.ycrh.jsyt:5000","10.83.3.120:5000"]
}
重启docker服务
service docker restart
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
例:
docker build -f /path/to/a/Dockerfile
下面是一个Dockerfile的例子
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
配置docker代理
因为部分网络环境下是无法访问外网下载镜像的,所以需要配置代理进行镜像的下载
vi /lib/systemd/system/docker.service
在 Service 部分下 增加 Environment 变量,配置成你自己的代理地址,如下
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
重启 docker
启动portainer
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --restart=always v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
启动完成后就可以通过http://10.83.3.120:9000/进行访问了
建立docker swarm集群
[root@manager-node ~]# docker swarm init --advertise-addr 10.83.3.120
Swarm initialized: current node (39efft8yudtdpwmnenxewlt4r) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5mci820jcs7dard6jrp19gjduj562kimptqmbfgd6omurkxa36-92jgt38tfowrsmo1wdzojtnde \
10.83.3.120:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@manager-node ~]
在其他主机上执行上面打印的命令
docker swarm join \
--token SWMTKN-1-5mci820jcs7dard6jrp19gjduj562kimptqmbfgd6omurkxa36-92jgt38tfowrsmo1wdzojtnde \
10.83.3.120:2377
即可加入到该集群,此处需要注意防火墙的配置。
查看当前集群节点信息
docker node ls
创建集群服务
此处编写可查阅docker-compose相关内容。
此处创建完成后就可在service界面看到bfis-server服务,
该界面显示了服务新建的服务共设置了三个实例并且都在正常运行,当其中一台实例挂掉后,swarm集群会自动在可用资源中重启实例,使应用服务始终保持指定数量运行和负载。
version: '3.7'
services:
bfis-server:
image: s01.ycrh.jsyt:5000/bfis-app-dev:20191104112514
networks:
- ycrh-network
deploy:
replicas: 3
ports:
- 8080:8080
networks:
ycrh-network:
external:
name: ycrh-network
此处是用docker-compse创建服务,下面列举用命令行创建docker服务
创建网络
docker network create --driver overlay test
创建服务
docker service create --replicas 3 --network test -p xx:xx --name 服务名 镜像名
新增副本,根据你服务器的压力进行伸缩
docker service scale 服务名称=3
其余命令根据下面提示使用:
docker swarm默认采用的是 vip 负载均衡模式,vip模式,就是docker swarm为每一个启动的service分配一个vip,并在DNS中将service name解析为该vip,发往该vip的请求将被自动分发到service下面的诸多active task上(down掉的task将被自动从vip均衡列表中删除)。