docker安装、docker-compose安装、Swarm集群搭建、portainer可视化安装、和项目部署案例

四台服务器,我这里选用四台虚拟机1核2G,系统centos7,ip:192.168.10.104、 192.168.10.105、 192.168.10.106、 192.168.10.107

一、环境准备

三台服务器都执行以下命令

1、关闭防火墙或者开放相应端口

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld# 开放2377端口
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 2375 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp --dport 4789 -j ACCEPT
service iptables save firewall-cmd --zone=public --add-port=2377/tcp --permanent #TCP port 2377 用于集群管理节点间通信
firewall-cmd --zone=public --add-port=2375/tcp --permanent #docker服务开启TCP远程管理容器功能,portainer可以使用该端口管理主机上的容器
firewall-cmd --zone=public --add-port=7946/tcp --permanent #TCP 和 UDP 端口号 7946 用于节点间通信
firewall-cmd --zone=public --add-port=4789/tcp --permanent #UDP port 4789 for overlay network traffic,也就是说docker如果使用overlay网络,该端口会用于主机间网络数据包的传输
firewall-cmd --reload

2、关闭 selinux

方法一:

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

方法二:

setenforce 0
vi /etc/sysconfig/selinux
#将里面的SELINUX配置为disabled    SELINUX=disabled

3、更改四台主机hostname

vim /etc/hostname
node1vim /etc/hostname
node2vim /etc/hostname
node3vim /etc/hostname
node4

4、修改四台主机hosts

vim /etc/hosts192.168.10.104 node1
192.168.10.105 node2
192.168.10.106 node3
192.168.10.107 node4

5、同步时间(可选)

date  #查看时间 (可选)
yum install -y ntpdate
ntpdate time.windows.com #同步最新时间

二、安装docker

三台服务器都执行以下命令

1、卸载系统之前的 docker

 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
#删除容器镜像:
sudo rm -rf /var/lib/docker

2、安装依赖包

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

3、设置阿里云镜像源

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装 docker,以及 docker-cli

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

5、配置 docker 加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://yuma69sd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

可以登录阿里云设置自己加速镜像,用我的也可以。

6、启动 docker & 设置 docker 开机自启

sudo systemctl start docker
sudo systemctl enable docker

7、查看版本

docker version

8、安装Docker可视化(单机选做)

# 创建外链
docker volume create portainer_data# 创建Portainer容器
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

在浏览器中输入http://ip:9000 可以看到效果

三、安装docker-compose

1、下载

#官方镜像文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose#国内镜像文件
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

如果网不好,可离线安装

(1) 访问https://github.com/docker/compose/releases,下载 docker-compose-Linux-x86_64,将docker-compose-Linux-x86_64重命名为docker-compose

(2) 将刚才下载的docker-compose文件上传到centos7的/usr/local/bin/目录下

(3) 重命名

mv /usr/local/bin/docker-compose-Linux-x86_64.64 /usr/local/bin/docker-compose

2、授权

sudo chmod +x /usr/local/bin/docker-compose

3、查看版本

docker-compose version

四、Swarm集群搭建

1、初始化管理节点(node1执行)

docker swarm init --advertise-addr ip地址

docker swarm init --advertise-addr 192.168.10.104

2、添加节点(其他节点执行)

docker swarm join 加入一个节点

#获取 创建其加入管理节点token命令
docker swarm join-token manager
#获取 创建其加入工作节点token命令
docker swarm join-token worker#在其他三个节点执行(token从上面两个命令获取)
docker swarm join --token SWMTKN-1-1gtih3nv8gfch2fdtisx0xg3wbn8yt894r1yyzb6c7hxu4ot4a-0sxc5jaogtao45wa726af9474 192.168.10.104:2377

3、在管理节点查看node信息

docker node ls

4、步骤总结

  1. init初始化swarm
  2. 把需要加入集群的节点join到对应角色(管理节点、工作节点)

5、概念总结

  1. swarm

    集群的管理和编号。docker可以初始化一个swarm集群,其他节点可加入(管理、工作者)

  2. node

    就是一个docker节点。多个节点组成了一个网络集群。(管理、工作者)

  3. service

    服务,可以在管理节点或者工作节点来运行。当你创建服务的时,你需要指定容器镜像

  4. task

    容器内的命令,细节任务

6、raft一致性协议

二主二从: 假设一个节点挂了 , 其他节点是否可用呢?
raft协议:保证大多数节点存活才可以用 至少 > 1个节点存活 集群 > 3
实验:
如果将主docker停掉一台,那么另外一台主节点也不能使用。
如果将从docker节点离开集群,集群信息会看到此节点down的状态
work节点只是为了工作,manager节点才是为了管理集群
为了达到集群可用,若三个主节点,必须 > 1台存活的主节点 才可以正常使用。

7、安装Docker可视化(集群选做)

(1) 每台主机都开启TCP远程管理端口2375,方便管理(可不做)
vim /lib/systemd/system/docker.service
#ExecStart后添加【 -H tcp://0.0.0.0:2375 】
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
#执行命令使它生效
systemctl daemon-reload
service docker restart
#查看端口是否已经监听成功
netstat -nlp |grep 2375
(2) 安装portainer

方法一:

# 创建Portainer容器 方法一
docker service create \--name portainer \--publish 9000:9000 \--replicas=1 \--constraint 'node.role == manager' \--mount type=volume,src=portainer_data,dst=/data \--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \portainer/portainer# 下载protainer官方的yml文件  方法二
curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
-o portainer-agent-stack.yml
# #通过yml文件进行部署
docker stack deploy -c portainer-agent-stack.yml portainer

方法二:

# 下载protainer官方的yml文件  方法二
curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
-o portainer-agent-stack.yml
# #通过yml文件进行部署
docker stack deploy -c portainer-agent-stack.yml portainer

portainer-agent-stack.yml

version: '3.2'services:agent:image: portainer/agent:2.11.1volumes:- /var/run/docker.sock:/var/run/docker.sock- /var/lib/docker/volumes:/var/lib/docker/volumesnetworks:- agent_networkdeploy:mode: globalplacement:constraints: [node.platform.os == linux]portainer:image: portainer/portainer-ce:2.11.1command: -H tcp://tasks.agent:9001 --tlsskipverifyports:- "9443:9443"- "9000:9000"- "8000:8000"volumes:- portainer_data:/datanetworks:- agent_networkdeploy:mode: replicatedreplicas: 1placement:constraints: [node.role == manager]networks:agent_network:driver: overlayattachable: truevolumes:portainer_data:

在浏览器中输入http://ip:9000 可以看到效果

五、基本命令总结

1、docker

示例:以nginx为例

# 查看可用版本
docker search nginx
# 获取nginx镜像
docker pull nginx
# 查看镜像
docker images
# 运行容器
docker run --name nginx-test -p 8080:80 -d nginx# --name nginx-test:容器名称。# -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。# -d nginx: 设置容器在在后台一直运行。
# 查看运行容器
docker ps
# 进入容器
docker exec -it nginx /bin/bash
# 容器:启动、重启、停止
docker start nginx-test
docker restart nginx-test
docker stop nginx-test
# 删除容器
docker rm nginx-test
# 清理掉所有处于终止状态的容器
docker container prune

编写Dockerfile文件定制镜像

构建镜像

docker build -t nginx:v3 .# 在 Dockerfile 文件的存放目录下,执行构建动作。# 以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。# 注:最后的 . 代表本次执行的上下文路径,下一节会介绍。

2、docker-compose(单机)

docker-compose:官网地址 https://docs.docker.com/compose/

主要就是对多个容器进行编排管理 主要核心就是 编写dockerfile文件构建镜像 以及 编写docker-compose.yml文件

# 部署yaml文件
docker-compose up -d
# 打包重构镜像
docker-compose up --build

常用命令

docker-compose 命令 --help                     获得一个命令的帮助
docker-compose up -d nginx                     构建启动nignx容器
docker-compose exec nginx bash                 登录到nginx容器中
docker-compose down                            此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose ps                              列出项目中目前的所有容器
docker-compose restart nginx                   重新启动nginx容器
docker-compose build nginx                     构建镜像
docker-compose build --no-cache nginx          不带缓存的构建
docker-compose top                             查看各个服务容器内运行的进程
docker-compose logs -f nginx                   查看nginx的实时日志
docker-compose images                          列出 Compose 文件包含的镜像
docker-compose config                          验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx             以json的形式输出nginx的docker日志
docker-compose pause nginx                     暂停nignx容器
docker-compose unpause nginx                   恢复ningx容器
docker-compose rm nginx                        删除容器(删除前必须关闭容器,执行stop)
docker-compose stop nginx                      停止nignx容器
docker-compose start nginx                     启动nignx容器
docker-compose restart nginx                   重启项目中的nignx容器
docker-compose run --no-deps --rm php-fpm php -v   在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

3、swarm(集群)

docker swarm: 官网地址 https://docs.docker.com/engine/swarm/

主要是对集群的管理和编排 能够轻松实现 动态扩展,动态更新服务 实现动态扩容。 swarm是在docker环境中的扩展。通过初始化swarm,让其他服务器docker节点加入到swarm集群,之后就可以管理节点node从而管理服务service。

# 用于列出 Swarm 中的所有节点及相关信息,包括哪些是管理节点、哪个是主管理节点。
docker node ls
# 管理器节点脱离 docker swarm集群:
docker swarm leave --force
# 工作节点脱离Docker Swarm集群
docker swarm leave# 创建nginx服务
docker service create -p 8080:80 --name nginx-test nginx
# 查看服务部署情况
docker service ps nginx-test
# 动态扩缩容
docker service scale nginx-test=2
# 删除服务
docker service rm nginx-test
# 集群部署yaml文件
docker stack deploy docker-compose.yml

4、参考网站

KuangStudy:https://www.kuangstudy.com/bbs/1405398545049108481

菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html

六、部署案例

1、部署wordpress博客

官网练习 compose一键部署wordpress
https://docs.docker.com/samples/wordpress/

编写docker-compose.yml

version: "3.9"services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestvolumes:- wordpress_data:/var/www/htmlports:- "627:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}wordpress_data: {}

执行安装部署命令

# 单机部署
docker-compose up -d
# 集群部署
docker stack deploy docker-compose.yml my_wordpress

2、部署jar项目

(1)编写Dockerfile

FROM java:8
EXPOSE 88
VOLUME /tmp
ADD *.jar  /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]

(2)编写docker-compose.yml

version: '2'
services:#1.gatewaygateway:container_name: gatewaybuild: ./gatewayimage: gatewaymem_limit: 512Mrestart: alwaysports:- "88:88"# environment:#  - spring.profiles.active=dev#2.authauth:container_name: authbuild: ./authimage: authmem_limit: 512Mrestart: alwaysports:- "8080:8080"#environment:#  - spring.profiles.active=dev

执行安装部署命令

# 单机部署
docker-compose up -d
# 集群部署
docker stack deploy docker-compose.yml my_wordpress

Swarm集群搭建( docker安装、docker-compose安装、portainer可视化安装、基本使用命令总结、项目集群部署案例)相关推荐

  1. redis集群搭建(基于docker)

    一.Redis Cluster(Redis集群)简介 redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求自动将数据进行分片,每个maste ...

  2. mysql集群搭建(使用docker 一主一从)

    mysql集群搭建 my.cnf 配置文件配置 在 /etc/mysql/my.cnf 中 (拿一个举例) (docker中需要先进入开启的容器,docker exec -it 容器名称 /bin/b ...

  3. hadoop-HA集群搭建,启动DataNode,检测启动状态,执行HDFS命令,启动YARN,HDFS权限配置,C++客户端编程,常见错误

    本篇博文为整理网络上Hadoop-HA搭建后出来的博客,参考网址为:http://blog.chinaunix.net/uid-196700-id-5751309.html 3. 部署 3.1. 机器 ...

  4. 大数据集群搭建(一)虚拟机和Centos6的安装

    文章目录 1.安装虚拟机 2.安装Centos6 3. Centos系统的网络配置 3.1关于IPADDR地址的由来: 4.将搭建好的虚拟机克隆出四台 4.1给四台节点配置独立的IP地址和主机名 1. ...

  5. 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...

    Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...

  6. redis伪集群安装linux,redis伪集群搭建(亲测无坑)

    一.单机版安装部署,伪集群只需要操作前1-8步即可,再往下浏览找到:二.单机版-伪集群  安装部署继续搭建,如需设置密码参照第10步 1.安装基本工具 yum install -y gcc-c++ v ...

  7. windows2016+sqlserver2017集群搭建alwayson之域控篇

    IP 用途 10.2.159.218 域控(sqlserver.com) 10.2.159.219 节点一(AAA) 10.2.159.220 节点二(BBB) 10.2.159.221 节点三(CC ...

  8. RocketMq单机和集群搭建教程

    文章目录 1. rocketMQ单机版安装 2. rocketMQ集群方案 3. rocketMQ集群搭建 4. Dleger搭建rokcetMQ高可用集群 5. 启动rockerMQ控制台界面 6. ...

  9. HBase——集群搭建

    HBase--集群搭建 基础:三台虚拟机(node-01,node-02,node-03)已经完成HA(高可用集群)的搭建.Hadoop4--HA集群的搭建(高可用) 每台虚拟机文件目录如下      ...

最新文章

  1. 微信红包随机算法实现
  2. 解决在Ubuntu下打开txt文件乱码的问题
  3. hdu 6200 mustedge mustedge mustedge(dfs序+树状数组+并查集)
  4. windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式
  5. Kendo UI开发教程:Kendo UI模板概述
  6. 手把手搭建一个容器化+代理网关+可视化管理环境
  7. mysql管理密码修改及管理权限设定(zz)
  8. VisualAssistX中文注释提示错误 解决办法
  9. 【Javascript Demo】图片瀑布流实现
  10. Deeping Learning for self-driving cars
  11. MLP手写数字识别实现
  12. android传感器测试工具,传感器测试工具
  13. 电商 竞品分析_电商竞品分析
  14. mysql+check+男或女_关于MYSQL 检察check约束
  15. Altium Designer 2021导入CAD图(DWG格式)作为PCB板框的方法
  16. 有关TN-C、TN-S和TN-C-S三种系统
  17. HBase内置过滤器的一些总结
  18. TeXstudio编辑中文时文字下方出现红色波浪符的问题
  19. [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现
  20. 游戏技能系统(Gameplay Ability System,简称GAS)配合GASDocumentation阅读学习笔记

热门文章

  1. 【C语言】寄存器变量
  2. Android 实现短信的备份恢复
  3. LCA 的若干种求法
  4. 502 bad gateway原因
  5. 电脑不正常,不正常关电脑会怎样
  6. 浅谈makefile
  7. 程序员为什么成为高级打工仔
  8. 8 款浏览器兼容性测试工具介绍,需要的赶紧点赞收藏吧
  9. python数据处理函数_python数据处理小函数集合
  10. 详细解释卷积神经网络CNN中卷积层以及BN层的参数