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过程中所记录的一些笔记,这里分享出来,希望其他人在学习过程中能从我的笔记中得到一些帮助!
出处:https://www.cnblogs.com/blayn/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任