docker-spigot
Dockerfile:
FROM nimmis/java:openjdk-8-jdk
:指定基础镜像,配置 java 环境ENV SPIGOT_HOME=/minecraft \
:SPIGOT-server 的默认目录SPIGOT_VER=latest \
:默认版本为最新SPIGOT_AUTORESTART=yes
:结合 readme 里写的,应该是如果 mc 内部的 stop 出了问题,就重新启动COPY rootfs /
:复制额外需要的文件rootf 中:
waitjava.sh 处理 mc 错误的 stop 命令,在 supervisor/conf.d 里调用了 waitjava.sh
在 usr/local/bin 中指定了常用简便指令,eg:mc_stop
mc_log
:/etc/init.d/minecraft_server log
查阅 /etc/init.d/minecraft_server 可发现:log)
echo “Abort with CTRL-C”
tail -f $MC_DIR/output.con
即输出日志mc_restart
:supervisorctl restart spigot
supervisor 主要由两部分组成:
1.supervisord (server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
2.supervisorctl (client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。mc_send
:echo “/etc/init.d/minecraft_server send \”$1\””
/etc/init.d/minecraft_server send “$1 $2 $3 $4 $5”
mc_log
RUN apt-get update && \
apt-get -y dist-upgrade && \
printf “Build of nimmis/spigot:latest, date: %s\n”
:更新,并且更新一次就写一个更新文件,里面写明了更新的时间date -u +"%Y-%m-%dT%H:%M:%SZ"
> /etc/BUILDS/spigot && \apt-get install -y wget git && \
:下载/usr/sbin/useradd -s /bin/bash -d /minecraft -m minecraft && \
:为 mc 创建特别用户apt-get clean all
:清理镜像中的缓存EXPOSE 25565
:声明容器提供服务端口
docker run
docker run -d -p 25565:25565 -e EULA=true nimmis/spigot
:指定端口,并同意最终用户协议
访问仓库
仓库(Repository)是集中存放镜像的地方。一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu 来说,dl.dockerpool.com 是注册服务器地址,ubuntu 是仓库名
Docker Hub
docker search
docker pull
docker push
私有仓库
docker-registry
工具
安装:sudo pip3 install docker-registry
数据管理
数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
在用 docker run
命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。
也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器
删除数据卷:可以在删除容器的时候使用 docker rm -v 这个命令
使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。Dockerfile 中不支持这种用法
数据卷容器
如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器
数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的
- 创建一个名为 dbdata 的数据卷容器
sudo docker run -d -v /dbdata –name dbdata training/postgres echo Data-only container for postgres
- 在其他容器中使用
–volumes-from
来挂载 dbdata 容器中的数据卷sudo docker run -d –volumes-from dbdata –name db1 training/postgres
sudo docker run -d –volumes-from dbdata –name db2 training/postgres
使用 –volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态