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高可用负载均衡集群.受限于自身条件,本 ...
随机推荐
- android 调用js,js调用android
Java调用JavaScript 1.main.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?xml v ...
- 在ASP.NET Core中用HttpClient(三)——发送HTTP PATCH请求
在前面的两篇文章中,我们讨论了很多关于使用HttpClient进行CRUD操作的基础知识.如果你已经读过它们,你就知道如何使用HttpClient从API中获取数据,并使用HttpClient发送PO ...
- 为 .NET 打 Call,为国产平台 Gitee 打 Call,我的 .NET/C# 开源项目清单,同步维护于 Github 和 Gitee
所有项目遵循 MIT 开源协议.可以随意使用,但是需在源代码和产品关于画面保留版权声明和我的网站链接,谢谢. Sheng.Winform.IDE Github:https://github.com/i ...
- ajax函数
使用三个函数是按ajax请求的处理 1.$.ajax() jQuery中实现ajax的核心函数 2.$.post() 使用post方式做ajax请求 3.$.get 使用get方式做ajax请求 $. ...
- ch1_6_3求解移动字符串问题
import java.util.Scanner; public class ch1_6_3求解移动字符串问题 { public static void main(String[] args) { / ...
- MyEclipse安装过程
1.安装JDK并配置环境变量 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/index.html ①点击download ...
- Android Studio中Switch控件有关 textOn 和 textOff 用法
•属性 textOn:控件打开时显示的文字 textOff:控件关闭时显示的文字 showText:设置是否显示开关上的文字(API 21及以上) •用法 <?xml version=" ...
- Shell prompt(PS1) 与 Carriage Return(CR) 的关系?-- Shell十三问<第二问>
Shell prompt(PS1) 与 Carriage Return(CR) 的关系?-- Shell十三问<第二问> 当你成功登录进一个文字界面之后,大部份情形下,你会在荧幕上看到一个 ...
- 深入理解Java并发框架AQS系列(四):共享锁(Shared Lock)
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock) 深入 ...
- angular+ionic -- 启动命令
初始angular+ionic项目,启动需ionic的启动命令: ionic serve