搜索 K
Appearance
Appearance
打开群晖的套件中心
搜索Container Manager套件进行安装
设置镜像仓库地址, 打开镜像仓库, 点击设置, 添加镜像仓库, 并点击使用
### 新增镜像仓库, 设定名称如: 毫秒, 添加如下URL
https://docker.1ms.run可下载一些常用的镜像如: jre17等
创建共享文件夹docker, 给予http群组读写权限
在控制面板中开启终端机, 启用SSH功能
使用xshell等工具连接群晖终端
/var/packages/ContainerManager/etc/dockerd.json文件中添加属性
#进入/var/packages/ContainerManager/etc文件夹, 编辑dockerd.json
sudo -i
cd /var/packages/ContainerManager/etc
ls
vi dockerd.json
# 添加属性: "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
# 注意多属性之间用逗号隔开
# 使用sudo模式下进行编辑ip:2375, ip为群晖ipDockerfile指令, 每条指令创建一个新的镜像层, 并对镜像进行提交, 能少则少原则
# 基础镜像, 当前新镜像是基于哪个镜像的
FROM
# 镜像维护者的姓名, 不推荐用这个, 更推荐使用LABEL
MAINTAINER
# LABEL 镜像元数据, 应该是不算指令不会增加层数
LABEL maintainer=$AUTHOR
# RUN构建容器时运行的命令
RUN
# 当前容器对外保留出的端口
EXPOSE
# 指定在创建容器后终端默认登录进来的工作目录
WORKDIR
# 环境变量
ENV
# 将宿主机目录下的文件拷贝进容器, 并且会自动处理URL和解压tar压缩包
ADD
# 只进行拷贝
COPY
# 容器数据卷, 用于数据保存和持久化工作
VOLUME
# 指定一个容器启动时需要运行的命令, 可以有多个cmd命令, 但只生效最后一个
CMD
# 和cmd一样
ENTRYPOINT
# 当构建一个被继承的Dockerfile时运行此命令, 父镜像在被子镜像继承后, 父镜像的ONBUILD触发
ONBUILD
# 综上: FROM, COPY, EXPOSE, WORKDIR, ENTRYPOINT指令基本是必须的
# ENV, VOLUME, 为了直观也需要
# ARG: 仅用于构建时的环境变量示例Dockerfile
# 声明基础镜像=>实际部署时,根据具体环境调整;默认是公网镜像
FROM docker.1ms.run/joengenduvel/jre17:latest
## 声明变量:应用运行模式, 默认为prod, 启动时可以通过-e参数传入
#ENV RUN_MODE="prod"
# 声明变量:应用名称
ARG APP_NAME=wenbot
# 声明变量:应用开放端口
ARG SERVER_PORT=9200
# 声明变量: 容器工作目录
ARG WORKDIR=/$APP_NAME
# 声明变量: 作者
ARG AUTHOR=zhangch
# 声明变量: 应用target
ARG TARGET_DIR=./wenbot-starter/target
## 系统编码
#ENV LANG C.UTF-8
## 设置时区
#ENV TZ Asia/Shanghai
# 一行ENV
ENV LANG=C.UTF-8 TZ=Asia/Shanghai RUN_MODE="prod"
# 声明应用发布者、来源
LABEL maintainer=$AUTHOR
# 声明工作目录
WORKDIR $WORKDIR
# 设置容器时间和宿主机时间一致
#RUN echo "Asia/Shanghai" > /etc/timezone
#RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 挂载配置文件目录和日志文件目录,
VOLUME ["${WORKDIR}/logs","${WORKDIR}/config", "${WORKDIR}/.env"]
# 声明端口,可设置多个,仅声明
EXPOSE $SERVER_PORT
# 声明变量:应用版本
ARG APP_VERSION=0.0.1
# 添加执行应用jar
COPY ${TARGET_DIR}/${APP_NAME}-starter-${APP_VERSION}.jar app.jar
# 添加外部配置文件目录到工作目录下的config文件夹, 挂载空目录会将配置目录覆盖为空, 解决不了就不需要这步
#COPY ./robot-qq-boot/target/classes/config $WORKDIR/config
# 容器运行后默认启动的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar", "--spring.profiles.active=${RUN_MODE}"]构建镜像, 但不要运行容器
打开群晖Container Manager, 点开映像列表, 查看构建好的镜像
运行
docker-compose)运行推荐使用第二种
在docker文件夹下创建一个新的项目文件夹
创建好需要挂载的文件夹(可在镜像中查看其存储空间)
ContainerManager中点击项目, 新增, 设定名称和路径
可上传docker-compose.yml, 或新建
services:
wenbot:
image: wenbot:0.0.1
container_name: wenbot
ports:
- "9200:9200"
# 挂载目录 挂载到宿主机的/volume1/docker/`项目名称`文件夹下
volumes:
- ./wenbot/logs:/wenbot/logs
- ./wenbot/config:/wenbot/config
- ./wenbot/.env:/wenbot/.env
- ./wenbot/plugins:/wenbot/plugins
# 设置网络, #若为默认的bridge, 有关服务间通讯的ip使用容器名即可
network_mode: host
restart: always好处:
当镜像有变动, 可停止项目进行构建, 会自动重新构建容器(老方法是停止容器, 删除旧容器, 创建新容器)
支持一个项目中构建多个容器, 使其处于同一环境下
# 查看所有镜像
docker images
docker image ls
# 查看所有运行中的容器 -q:仅显示容器ID
docker ps
# 查看所有容器(包含未运行的)
docker ps -a
# 列出匿名卷
docker volume ps
#删除`悬空`匿名卷(创建容器时未指定挂载空间导致产生匿名卷), 可加入定期清理计划, --force: 跳过确认提示
docker volume prune --force
# 查看镜像历史层, 示例: docker history nginx:latest
docker history image_name_or_id
# docker logs -f --tail 100 my_app, -f实时跟踪, --tail 100:显示最后一百行
docker logs -f --tail 100 my_app
# 查看容器资源占用 示例: docker stats --no-stream # 仅显示当前状态
docker stats container_id_or_name
# 查看悬空镜像
docker images -f "dangling=true"
# 删除所有悬空镜像 -a: 删除所有未被使用的镜像(容器引用) --force:跳过确认
docker image prune
# 若需保留镜像,可为其添加标签:docker tag <image_id> my-image:keep
docker tag <image_id> my-image:keep建议添加定时清理任务, 清理运行时产生的匿名卷和构建时产生的悬空镜像