docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群
题目要求
实现过程
springboot项目搭建及打包
项目实现功能:输入 http://localhost:8080/docker/test,网页上会打印:docker-hot。
由于功能非常简单,故这里不讲解项目搭建过程及打包过程。
安装docker
安装官方yum源
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker引擎
yum install -y docker-ce docker-ce-cli containerd.io
启动docker
启动命令
systemctl start docker
设置开机启动
systemctl enable docker
查看docker状态
docker info
修改镜像
vim /etc/docker/daemon.json
构建镜像
拉取java环境并上传jar包
docker pull java:8u111
mkdir /usr/dockerfile -p
将hot.jar上传到 /usr/dockerfile 目录下。
编写dockerfile:
cd /usr/dockerfile
vim dockerfile-demo
FROM java:8u111
COPY hot.jar /root
CMD ["nohup","java","-jar","/root/hot.jar","&"]
构建镜像并启动
docker build -f dockerfile-demo -t hot:1.0 .
启动含 hot.jar 容器:
docker run --rm -it --network host hot:1.0
输入网址访问,可以看到访问成功:
搭建 swarm+compose 集群
首先,复制前面那台已安装好docker的虚拟机。
安装swarm(两台虚拟机都要安装)
docker pull swarm
安装compose(主机安装即可)
运行以下命令以下载Docker Compose的当前稳定版本:
curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注:这里我因为在线下载总是无法成功,所以直接到:https://github.com/docker/compose/releases 网站上下载了最新的 docker-compose-Linux-x86_64,之后改名为 docker-compose 并上传至虚拟机的 /usr/local/bin/ 目录下。
将可执行权限应用于二进制文件:
chmod +x /usr/local/bin/docker-compose
添加到环境中:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看compose版本:
docker-compose --version
看到这个结果,就证明compose安装成功了。
搭建集群
建立manager(对应的虚拟机ip地址:192.168.112.140)
docker swarm init --advertise-addr 192.168.112.140
建立worker(对应的虚拟机ip地址:192.168.112.141)
docker swarm join --token SWMTKN-1-2e2d1l1p4qf7frlqxsca8q3qr3hu21glrffp6x687q6h5oh1s8-4u1h08jtq8ryauq4rc8941zve 192.168.112.140:2377
注:这里我第一次执行的时候报错了,错误信息如下:
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.112.140:2377: connect: no route to host"
原因是忘记将manager虚拟机的防火墙关闭。(执行 systemctl stop firewalld.service 命令即可)
编写docker-compose.yml文件
cd /usr/local/bin
vim docker-compose.yml
docker-compose.yml文件的内容如下:
version: "3.0"
services:
mysql:
image: mysql:5.7.30
ports:
- 3306:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--default-time-zone=+8:00
environment:
MYSQL_ROOT_PASSWORD: "root"
deploy:
mode: replicated
replicas: 2
redis:
image: redis:5.0.9
environment:
- TZ=Asia/beijing
ports:
- 6379:6379
#主备都存在
deploy:
mode: replicated
replicas: 2
hot:
image: hot:1.0
ports:
- 8080:8080
deploy:
mode: replicated
replicas: 2
部署应用程序hot(注意:下文中 docker stack 相关的命令都需要在 /usr/local/bin 目录下执行)
docker stack deploy -c docker-compose.yml hot
运行应用程序hot
docker stack services hot
分别使用 192.168.112.140:8080/docker/test 和 192.168.112.141:8080/docker/test 访问应用程序
停止应用程序hot
docker stack down hot
总结
到这里,我们就完成了题目要求中的所有内容,其实还是非常简单的,只不过在搭建过程中可能会遇到各种各样的小问题,基本上也可以通过上网搜索找到对应的解决方案。
这是我自己在学习docker过程中所记录的一些笔记,这里分享出来,希望其他人在学习过程中能从我的笔记中得到一些帮助!
docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群的更多相关文章
- Docker容器学习梳理 - Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- 使用Dockerfile构建镜像-Docker for Web Developers(5)
1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- 013、Dockerfile构建镜像(2019-01-02 周三)
参考https://www.cnblogs.com/CloudMan6/p/6830067.html Dockerfile构建镜像过程分析 root@docker-lab:~/111# ls ...
- Dockerfile构建镜像
Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...
- Dockerfile 构建镜像
一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest b.设置维护者信息 没有固定格式 c.设置需要添加到容器中的文件 ...
- Dockerfile构建镜像实战
目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...
- RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...
随机推荐
- python之pillow模块学习--验证码的生成和破解
一.基础学习 在Python中,有一个优秀的图像处理框架,就是PIL库,pip install pillow 示例1 from PIL import Image # 读取当前图片 im = Image ...
- Prometheus时序数据库-数据的查询
Prometheus时序数据库-数据的查询 前言 在之前的博客里,笔者详细阐述了Prometheus数据的插入过程.但我们最常见的打交道的是数据的查询.Prometheus提供了强大的Promql来满 ...
- 在用free()函数释放指针内存时为何要将其指针置空
在通过free()函数释放指针内存之后讲其指针置空,这样可以避免后面的程序对与该指针非法性的判断所造成的程序崩溃问题.释放空间,指针的值并没有改变,无法直接通过指针自身来进行判断空间是否已经被释放,将 ...
- 2018ICPC南京K. Kangaroo Puzzle
题目:在一个20×20的地图上,1表示有袋鼠,0表示有障碍物,边界外和障碍物上不能走. 要求给出一个50000步以内的操作,每一步操作为'L', 'R', 'U', 'D', 表示所有袋 ...
- C++覆盖,隐藏,重载
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
- Codeforces-121C(逆康托展开)
题目大意: 给你两个数n,k求n的全排列的第k小,有多少满足如下条件的数: 首先定义一个幸运数字:只由4和7构成 对于排列p[i]满足i和p[i]都是幸运数字 思路: 对于n,k<=1e9 一眼 ...
- 有了CMDB,为什么还需要应用配置管理?
有了CMDB,为什么还需要应用配置管理? 你不妨先停下来,思考一下这个问题. 我抛出的观点是: CMDB是面向资源的管理,应用配置是面向应用的管理. 请注意,这里是面向"资源",不 ...
- springboot基础项目搭建(十五篇)
springboot系列一.springboot产生背景及介绍 springboot系列二.springboot项目搭建 springboot系列三.springboot 单元测试.配置访问路径.多个 ...
- 神奇的魔方阵--(MagicSquare)(2)
在上一篇博客中,我们讨论了阶数为奇数,以及阶数为(4K)的魔方阵的排列规则,以及代码实现(详见:https://www.cnblogs.com/1651472192-wz/p/14640903.htm ...
- Pycharm Fiddler Requests https in _create raise ValueError("check_hostname requires server_hostname
打开Fiddler, 开启抓取https, 在PyCharm中使用requests 发送https请求, 遇到 in _create raise ValueError("check_ho ...