Week24 - 用Minecraft来说明Docker为什么这么香 - 实作篇 [Server的终局之战系列]

本文章同时发布于:

MediumiT邦帮忙

大家好,继上次Week23 - 用Minecraft来说明Docker为什么这么香 - 概念篇的文章后,接下来要来实作用Docker启动Minecraft Server

关于安装Docker

安装的部分在Docker的官网都写得很清楚了,由于本篇主要讨论实作而不是安装,我这边就把三种系统的安装介绍都贴上来,不说明此部分了~

UbuntuWindowsMac

Docker内启动Minecraft Server

首先,我们运行:

docker run -p 25565:25565 superj80820/minecraft-server

然后...就没有然后了,因为Minecraft Server起好了!

你可能会说:等等!我都不用设置些什么吗?比如说Minecraft Server的参数,我连的Server的主程式jar都没下载耶!?

是的,这就是Docker的好处,如上篇所述,Docker可以把需要隔离的的档案放入里头,就像放到资料夹里,而这资料夹实际上就是一个Docker Image

Docker又提供了Dockerhub供大家放置Docker Image,我们可以直接下载执行。

所以猜到了吗?我只是把Minecraft Server这些必备条件打包成Docker Image并上传至Dockerhub而已:

Server执行的环境Server所需的程式档与配置Server执行的方式

既然已经起好Minecraft Server了,那本文章就到此结束...喂!才没有XD

我们接下来好好介绍要怎么打包Dokcer Image

透过Dockerfile来打包Docker Image

首先可以透过GitClone完整範例

再用Terminal进入week24资料夹

$ cd week24

会看到此资料夹有以下几个档案

Dockerfile: 用来说明要如何打包Docker Imageeula.txt与server.properties: 这些都是Minecraft Server的参数配置档server.jar: Minecraft Server的主程式,可以至官网下载

让我们来看看Dockerfile里头是怎么表示Minecraft Server的运作条件:

# Server执行的环境,我们选用JDK 8FROM openjdk:8# Server所需的程式档与配置,此指令是把week24资料夹所有的档案都複製到Docker Image里的/usr/src/myapp资料夹COPY . /usr/src/myapp# 说明Minecraft Server在Docker里运行时的目录WORKDIR /usr/src/myapp# Server执行的方式,我这边就是把官网的执行指令複製下来而已CMD ["java", "-Xmx1024M", "-Xms1024M", "-jar", "server.jar", "nogui"]

了解Dockerfile后,我们来打包Docker Image

.的意思就是指「透过此目录底下的Dockerfile」来打包-t的意思就是指此Image的名字要取什么
$ docker build . -t=minecraft-server

最后运行打包好的Docker Image,我们需要用-p这个参数把Docker内部的Minecraft Server25565 port与本机电脑的25565 port做连接,这样我们才能在Minecraft里透过localhost:25565连入Docker内部的Minecraft Server

$ docker run -p 25565:25565 minecraft-server

这样就可以啦~赶快连入Minecraft Server开玩吧!


如果想要把Docker Image放到Dockerhub上,你必须先在Dockerhub上注册帐号,并在Terminal登入:

$ docker login

输入完帐号密码登入完毕后,我们要特别在Docker Image的名子里里标示自己的帐号,在Push上Dockerhub:

$ docker build . -t={帐号}/minecraft-server$ docker push {帐号}/minecraft-server

以我的帐号来说就要这样下指令:

$ docker build . -t=superj80820/minecraft-server$ docker push superj80820/minecraft-server

有了Docker以后的有趣世界

在实作了Docker版的Minecraft Server之后,我来整理一下刚刚我们在Docker上获得的好处。

Make it work, make it right, make it fast!

白话来讲就是:

先让程式可以动,如果有需求在客製化逻辑,如果有需求再优化程式运行速度

就是先求有再求好啦XD,在现在很多很多的Open source之中,我们会很常碰到要「跨语言」的问题。

当语言变换,我们甚至连「让程式可以动」都变成了一件很难的事,因为我们要去了解这个语言的许多配置与安装。

比如说小弟我主要是学习JavascriptGolang的,但这时候要架设用Java语言设计的Jenkins CI,以往我就要先安装Java,并且学习Java架设Server的方式。

但现在我只要下此指令Docker就起好了:

$ docker run jenkins/jenkins

就可以去泡咖啡了吃零食了~


你会发现很多的Open source都会提供Docker,比如go-micor, nginx等。

你可以用很低的成本去转换不同语言,毕竟「先让程式可以动,再去了解细节」是更加直观的。

微服务的新起

由于有了DockerServer的运作条件都打包起来,所以快速启动Server在电脑上变成了很简单的事情,

这导致后端从「Server常驻在电脑上」变为「依照不同的流量需求启动不同数量的Server」

由于有了DockerServer的隔离变得简单:

这导致后端从「单一个Server众多逻辑」变为「多个职责单一的Server分享逻辑」


这次实作了Minecraft ServerDocker Image容器化,下回将会介绍如何透过Docker Compose来管理多个Docker以达到此系列一开始「单个电脑,多个Minecraft Server」的需求~


谢谢你的阅读,也欢迎分享讨论指正~

参考与引用资料

Docker 实战系列(二):在 DockerHub 上分享自己的 imageDocker Tip #63: Difference between an Array and String Based CMD

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章