docker使用

Scroll Down

Docker作为一个开源容器引擎,可以极大的简化软件的部署安装。容器可以打包应用、软件、操作系统成为镜像,发布的镜像可以在各种环境中部署,启动即可直接运行,无需复杂安装。其采用沙箱机制提供虚拟化环境,各容器相互隔离,对宿主环境的侵入性极小。

Docker官网:https://www.docker.com

1.安装docker

官方脚本安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.启动docker服务

service docker start

systemctl start docker

3.配置镜像加速

阿里云获取镜像地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

在/etc/docker/daemon.json中加入加速器服务,docker启动会自动生成/etc/docker文件夹,如果没有daemon.json文件,需要自己创建。

{
   "registry-mirrors": [
      "https://docker.1ms.run",
      "https://doublezonline.cloud",
      "https://dislabaiot.xyz",
      "https://docker.fxxk.dedyn.io",
      "https://dockerpull.org",
      "https://docker.unsee.tech",
      "https://hub.rat.dev",
      "https://docker.1panel.live",
      "https://docker.nastool.de",
      "https://docker.zhai.cm",
      "https://docker.5z5f.com",
      "https://a.ussh.net",
      "https://docker.udayun.com",
      "https://hub.geekery.cn"
   ]
}

其他源(可能更快一些)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",   
    "https://noohub.ru", 
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud" 
  ]
}

默认情况下,docker会绕过firewalld防火墙,直接操作iptables,将容器的对外端口暴露到外网。如果不想docker自动暴露端口,可以在daemon.json文件中加入以下配置,再重启docker服务。注意,这会导致域名无法解析,请谨慎使用。

{
  "iptables": false
}

重启服务

systemctl daemon-reload
systemctl restart docker

4.docker使用

4.1查找镜像

Docker Hub 网站来搜索镜像:https://hub.docker.com/

也可以用docker命令搜索

docker search mysql

4.2获取镜像

docker pull mysql

4.3运行容器

本地镜像不存在时,会联网进行下载

//启动ubuntu系统,使用/bin/bash作为交互式shell
docker run -it ubuntu /bin/bash
//启动mysql容器,并设置root密码为123456
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_container mysql
//启动mariadb容器,并设置root密码为123456
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mariadb_container mariadb

参数:
i:交互式操作
t:终端
d:后台运行
p:对外端口与容器内端口
name:容器名
e:设置环境变量
–restart=always:服务重启后会自动重启容器
–restart=on-failure:5:服务重启后,容器最大重启5次,值为0不重启。

4.4进入容器命令行环境

docker exec -it <容器ID或容器名> /bin/bash

4.5查看所有容器

docker ps -a

4.6查看本地所有镜像

docker images

4.7启动容器(容器已存在,且未运行)

docker start <容器ID或容器名>

4.8停止容器

docker stop <容器ID或容器名>

4.9删除容器

docker rm <容器ID或容器名>

4.10删除镜像

docker rmi <镜像ID>

4.11查看容器日志

docker logs <容器ID或容器名>

参数:
-f:实时滚动日志,相当于tailf

4.12复制文件

复制宿主机aa目录到容器并重命名为bb

docker cp /opt/aa <容器ID>:/opt/bb

复制宿主机aa目录到容器aa目录下

docker cp /opt/aa <容器ID>:/opt/aa/

复制容器aa目录下的内容到宿主机aa目录下

docker cp <容器ID>:/opt/aa/ /opt/aa/

4.13导出镜像

docker save <镜像ID> > /opt/docker/oracle_image.tar

4.14加载镜像

docker load < /opt/docker/oracle_image.tar

4.15修改镜像标签

docker tag <镜像ID> oracle:11g

4.16查询docker内空间占用情况

docker system df

加-v查看空间占用细节

4.17清理docker空间

docker system prune
  • 删除已停止容器。
  • 删除未被容器使用的卷。
  • 删除未被容器关联的网络。
  • 删除没有标签的镜像,如果要删除未被使用的镜像,加-a参数。

4.18查看容器挂载目录

docker inspect <镜像ID> | grep Mounts -A 20

4.19推送镜像

推之前需要登陆

docker login http://xxx.com

如果是私有仓库,也可以将镜像名改为:xxx.com/镜像名
再在/etc/docker/daemon.json中加入如下配置片段

"insecure-registries" : ["xxx.com"]

推送

docker push <镜像名>:<TAG>

–disable-content-trust :忽略镜像的校验,默认开启

4.20查看docker容器详细配置

如网络、文件系统、硬件等。

docker inspect <镜像ID>

查询容器目录映射

docker inspect <镜像ID>|grep Mounts -A 20

4.21删除远程私有仓库镜像

查询镜像

curl  <仓库地址>/v2/_catalog

查询镜像tag(版本)

curl  <仓库地址>/v2/<镜像名>/tags/list

查询镜像digest_hash

curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET  <仓库地址>/v2/<镜像名>/manifests/<tag>

删除镜像API

curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>"

4.22安装docker-compose

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

pip安装

yum -y install python-pip
pip install docker-compose

树莓派pip安装

sudo apt-get install -y python3 python3-pip
sudo pip install docker-compose

官方方式安装

curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

也可以直接到github下载相应版本的docker-compose文件到/usr/local/bin下,重命名为docker-compose,授予可执行权限,再创建软连接。
github地址:https://github.com/docker/compose/releases

检查docker-compose是否安装成功

docker-compose --version

给已启动的容器增加端口映射

容器的配置文件/var/lib/docker/containers/[containerId]目录下,hostconfig.jsonconfig.v2.json修改好之后,重启容器服务。

4.23创建网络

创建网络后,可以将多个容器指定为同一个网络,使容器间可以通信

docker network create elastic

创建网络时指定子网

docker network create --subnet=172.18.0.0/16 elastic

创建容器时指定网络

docker run --name es-node01 --net elastic -p 9200:9200 -p 9300:9300 -t docker.elastic.co/elasticsearch/elasticsearch:8.2.3

查看指定网络

docker inspect elastic

5.问题

错误1:docker0: iptables: No chain/target/match by that name.
原因:firewalld服务在docker服务启动之后打开,启动容器时就会报该错误。
解决办法:删掉容器,重启docker服务,重新运行镜像生成容器。

错误2:Database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD,MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
原因:mysql没有初始化密码,运行镜像开启容器时没有设置参数,无法启动。
解决方法:docker run时加上-e MYSQL_ROOT_PASSWORD=123456参数,设置密码。参数不能设置在容器名后,否则参数无效。

6.案例

直接安装,或先pull都可以

6.1安装oracle11g

需要自己先把oracle安装包放到/install目录下,并解压。
需要150M以上的swap内存,开启swap的方法见:内存不足导致的应用进程被杀

docker run -d --privileged --name my_oracle -p 1521:1521 --shm-size=1g -v /install:/install jaspeen/oracle-11g
  • –privileged:给容器root权限
  • -v /install:/install:将install文件夹挂载到容器中

启动后,自带的脚本会自动开始安装,可以通过容器日志查看安装进展,当日志中出现100% complete,基本就安装完成。

sys用户默认密码:change_on_install
system用户默认密码:manager

修改登录密码

alter user sys identified by "dd123456";

6.2安装oracle10g

1.下载运行镜像

docker run -d -p 1521:1521 -v /data/oracle10g:/data/oracle --name my_oracle10g klwang/oracle10g

2.进入容器

docker exec -it my_oracle10g bash

3.进入oracle用户,并连接oracle

su - oracle
sqlplus / as sysdba
conn / as sysdba

4.查询初始密码

show parameter password;

5.查看用户

select * from v$pwfile_users;

6.授权

grant sysdba to sys;

7.创建用户

create user dd identified by 123456;
grant connect,resource,dba to dd;

8.密码策略设置为永不过期

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

6.3官方dockerfile安装oracle 19c(进行到5失败,待修正)

1.clone官方镜像
官方镜像支持以下版本的安装:11.2.0.2 12.1.0.2 12.2.0.1 18.3.0 18.4.0 19.3.0

git clone https://github.com/oracle/docker-images.git

2.需要提前准备好oracle安装包,放入指定目录下。

安装包:LINUX.X64_193000_db_home.zip
目录:docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/

安装包可以从官网下载,Linux x86-64版本
地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

3.执行buildDockerImage.sh脚本,开始制作镜像。
脚本在docker-images/OracleDatabase/SingleInstance/dockerfiles/下

./buildDockerImage.sh -v 19.3.0 -e

-v:oracle版本号
-e:企业版

出现以下提示,表示镜像制作完成。

Successfully built 128af23f763f
Successfully tagged oracle/database:19.3.0-ee


  Oracle Database Docker Image for 'ee' version 19.3.0 is ready to be extended: 
    
    --> oracle/database:19.3.0-ee

  Build completed in 900 seconds.

4.创建所需组、用户、文件夹并授权

  • 创建用户组
groupadd -g 1000 oinstall 
groupadd -g 1300 dba
groupadd -g 1301 oper
  • 创建用户
useradd -u 54321 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "oracle" | passwd --stdin oracle

-u:指定用户uid
-c:注释
第二个命令:将echo打印的输入流写入为用户密码,此种方案不安全,history可以看到密码,实际使用需要用passwd命令改密码。

  • 文件夹授权
chown oracle:oinstall /oracle/oradata

5.启动容器,安装数据库

docker run --name oracle-19c \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl \
-e ORACLE_PDB=orclpdb \
-e ORACLE_PWD=123456 \
-v /oracle/oradata:/opt/oracle/oradata \
oracle/database:19.3.0-ee

-p:第一个是oracle监听器端口,第二个是OEM程序端口。OEM是oracle图形化管理工具集。
/oracle/oradata:oracle数据文件夹在宿主机的挂载点,/opt/oracle/oradata为容器内数据文件夹路径,容器内的oracle用户(uid:54321)必须有写权限。如果省略该项,则不会创建持久化数据库。

6.4安装postgreSQL

拉取镜像(最新版本)

docker pull postgres

启动容器

docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres

6.5安装Elasticsearch+kibana

拉取Elasticsearch镜像(7.13.1)

docker pull elasticsearch:7.13.1

创建网络

docker network create elastic

启动Elasticsearch容器

docker run -d --name es7 --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.13.1

拉取kibana镜像(7.13.1)

docker pull docker.elastic.co/kibana/kibana:7.13.1

启动kibana容器

docker run -d --name kib-01 --net elastic -e ELASTICSEARCH_HOSTS=http://es7:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:7.13.1

问题

内存不足问题

日志包含如下错误,此错误为内存不足,jvm内存超出了宿主机实际可用内存。

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 4102029312 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid164.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006cb800000, 4102029312, 0) failed; error='Not enough space' (errno=12)
        at org.elasticsearch.tools.launchers.JvmOption.flagsFinal(JvmOption.java:119)
        at org.elasticsearch.tools.launchers.JvmOption.findFinalOptions(JvmOption.java:81)
        at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:38)
        at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:135)
        at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)

解决方案1:
1.查找jvm.options文件

find /var/lib/docker/ -name jvm.options

2.找到diff目录下的文件

/var/lib/docker/overlay2/b1e872c3c573bce9dbc12063728ffab4b5481fd5e2131329bab5755f5c3fa263/diff/usr/share/elasticsearch/config/jvm.options

3.默认jvm为4g内存,修改为合适的内存,此处修改为2g

-Xms2g
-Xmx2g

解决方案2:
创建容器时加上jvm参数

docker run -d --name elasticsearch7_1_1 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms2g -Xmx2g" elasticsearch:7.11.1

4.重启容器(解决方案2无需重启容器)

docker restart elasticsearch7_1_1

6.6安装db2

拉取并运行镜像

docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=12345678 -e DBNAME=testdb -v /data/docker/db2:/database ibmcom/db2

创建用户

进入容器操作

# 添加用户组
groupadd dd
# 添加用户
useradd -m -g dd -d /home/dd dd
# 修改用户密码
passwd dd

创建数据库

su - db2inst1
db2 create db test

授权

# 连接数据库
db2 connect to test
#授权
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT ON DATABASE TO USER dd;

删除数据库

db2 drop database test

6.7安装ceph

创建网络

docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network

拉取镜像

docker pull ceph/daemon:latest-luminous

搭建mon节点

docker run -d --name ceph-mon --network ceph-network --ip 172.20.0.10 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_IP=172.20.0.10 -e MON_NAME=ceph-mon -e CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /var/log/ceph/:/var/log/ceph/ ceph/daemon:latest-luminous mon

搭建osd节点

docker exec ceph-mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring

修改/etc/ceph/ceph.conf配置文件以兼容ext4盘,在文件最后加入以下内容:

osd max object name len = 256
osd max object namespace len = 64

启动三个容器模拟集群

docker run -d --privileged=true --name ceph-osd-1 --network ceph-network --ip 172.20.0.11 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /var/lib/ceph/osd/1:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon:latest-luminous osd
docker run -d --privileged=true --name ceph-osd-2 --network ceph-network --ip 172.20.0.12 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /var/lib/ceph/osd/2:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon:latest-luminous osd
docker run -d --privileged=true --name ceph-osd-3 --network ceph-network --ip 172.20.0.13 -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=ceph-mon -e MON_IP=172.20.0.10 -e OSD_TYPE=directory -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /var/lib/ceph/osd/3:/var/lib/ceph/osd -v /etc/localtime:/etc/localtime:ro ceph/daemon:latest-luminous osd

搭建mgr节点

docker run -d --privileged=true --name ceph-mgr --network ceph-network --ip 172.20.0.14 -e CLUSTER=ceph -p 7000:7000 --pid=container:ceph-mon -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ ceph/daemon:latest-luminous mgr

开启管理界面

docker exec ceph-mgr ceph mgr module enable dashboard

搭建rgw节点

docker exec ceph-mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
docker run -d --privileged=true --name ceph-rgw --network ceph-network --ip 172.20.0.15 -e CLUSTER=ceph -e RGW_NAME=ceph-rgw -p 7480:7480 -v /var/lib/ceph/:/var/lib/ceph/ -v /etc/ceph:/etc/ceph -v /etc/localtime:/etc/localtime:ro ceph/daemon:latest-luminous rgw

检查ceph状态

docker exec ceph-mon ceph -s

添加rgw用户

实际连接时,使用uid中的用户名

docker exec ceph-rgw radosgw-admin user create --uid="dd" --display-name="dd"

连接时使用rgw端口

6.8.RocketChat搭建

安装docker和docker-compose

用官方安装命令,自带docker-compose,docker-compose要求V2版本以上

curl -L https://get.docker.com | sh

获取compose文件

该网址需要翻墙才能下载,建议手动创建,粘贴配置

curl -L https://raw.githubusercontent.com/RocketChat/Docker.Official.Image/master/compose.yml

compose.yml

volumes:
  mongodb_data: { driver: local }

services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:${RELEASE:-latest}
    restart: on-failure
    labels:
      traefik.enable: "true"
      traefik.http.routers.rocketchat.rule: Host(`${DOMAIN}`)
      traefik.http.routers.rocketchat.tls: "true"
      traefik.http.routers.rocketchat.entrypoints: https
      traefik.http.routers.rocketchat.tls.certresolver: le
    environment:
      MONGO_URL: "${MONGO_URL:-\
        mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
        ${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
      MONGO_OPLOG_URL: "${MONGO_OPLOG_URL:\
        -mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
        local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
      ROOT_URL: ${ROOT_URL:-http://localhost:${HOST_PORT:-3000}}
      PORT: ${PORT:-3000}
      DEPLOY_METHOD: docker
      DEPLOY_PLATFORM: ${DEPLOY_PLATFORM}
    depends_on:
      - mongodb
    expose:
      - ${PORT:-3000}
    ports:
      - "${BIND_IP:-0.0.0.0}:${HOST_PORT:-3000}:${PORT:-3000}"

  mongodb:
    image: docker.io/bitnami/mongodb:${MONGODB_VERSION:-4.4}
    restart: on-failure
    volumes:
      - mongodb_data:/bitnami/mongodb
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
      MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
      MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongodb}
      MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
      MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
      MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true}
      ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}
  • ROOT_URL修改为虚机的IP

编排部署

旧版docker没有此命令,需要安装新版docker

docker compose up -d

访问地址

http://IP:3000

7.镜像收藏

fish/peerflix-server (边下边播,支持磁力,种子)

地址:https://hub.docker.com/r/fish/peerflix-server
docker run -d -p 9000:9000 fish/peerflix-server

forsaken-mail(临时邮箱)

地址https://hub.docker.com/r/rockmaity/forsaken-mail/
docker命令方式

docker run --name forsaken-mail -itd -p 25:25 -p 3000:3000 denghongcai/forsaken-mail

docker compose方式

version: '3'
services:
  forsaken-mail:
    image: denghongcai/forsaken-mail
    container_name: forsaken-mail
    restart: always
    ports:
      - "25:25"
      - "3000:3000"

web访问地址:http://ip:3000/
邮箱必须要有域名才能使用
域名解析设置,如域名为aa.comweb访问地址为mail.aa.com

alexwhen/docker-2048(游戏2048)

地址:https://hub.docker.com/r/alexwhen/docker-2048/
docker run -d -p 80:80 alexwhen/docker-2048

docker-pan(网盘+离线下载工具)

根目录为Filerun网盘,/dweb为AriaNg离线下载工具,使用aria2 web界面

docker run --name=pan  -d -p 8081:80 -p 6800:6800 jaegerdocker/pan

如果需要开启ImageMagick支持和FFmpeg支持,需要进入容器(Ubuntu系统)安装。

apt install imagemagick ffmpeg

dos-web小游戏

docker run -d --name dosgame -p 666:262 -v /opt/data/game/dosgame:/app/static/games oldiy/dosgame-web-docker:latest
  • 如果不需要新增游戏,可以不挂载文件路径

新增游戏:
https://github.com/rwv/chinese-dos-games下载游戏
将下载下来的新游戏zip包放进bin目录,然后添加下json配置,再重启下docker容器就OK了

反向代理工具 nginx-proxy-manager(NPM)

很实用的反向代理工具,81为web端口。

以下为docker-compose.yml的内容

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'  # 冒号左边可以改成自己服务器未被占用的端口
      - '81:81'  # 冒号左边可以改成自己服务器未被占用的端口
      - '443:443' # 冒号左边可以改成自己服务器未被占用的端口
    volumes:
      - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
      - ./letsencrypt:/etc/letsencrypt  # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中

创建好后执行以下命令启动

docker compose up -d

初始账号密码
admin@example.com
changeme

poste邮箱

搭建自己的邮箱,需要域名才能正常使用

version: '2.1'

services:
  mailserver:
    image: analogic/poste.io
    container_name: mailserver
    hostname: mail.ddgjl.fun
    environment:
      - TZ=Asia/Shanghai
      - HTTPS=OFF
    volumes:
      - ./data:/data
    ports:
      - 8080:80 #http
      - 10025:25   #SMTP
      - 110:110 #POP3
      - 143:143 #IMAP 
      - 8081:443 #HTTPS
      - 465:465 #SMTPS 
      - 587:587 #MSA
      - 993:993 #IMAPS
      - 995:995 #POP3S 
      - 4190:4190 #Sieve
    restart: always

wikijs

搭建自己的wiki

version: "2.1"
services:
  wikijs:
    image: linuxserver/wikijs
    container_name: wikijs
    environment:
      - PUID=1000        # 如何查看当前用户的PUID和PGID,直接命令行输入id就行
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config  # 配置文件映射到本地,数据不会因为Docker停止而丢失
      - ./data:/data  # 数据映射到本地,数据不会因为Docker停止而丢失
    ports:
      - 3000:3000   # 左边的8080可以自己调整端口号,右边的3000不要改
    restart: unless-stopped

chatgpt客户端 pandora

chatgpt代理客户端,和官网页面的使用体验很接近。支持gpt-3.5和gpt-4,基于cookie token登录(需科学上网到官网获取),无需api,所以被官方禁掉的概率很小
最新:开发者github账号被封,客户端已无法使用。开发者已创建pandora2,搭建需要一个license,需要github认证后才能获取,暂未研究。

version: '3'
 
services:
  app:
    image: pengzhile/pandora # 不带tga的话,总是使用 latest ,更新时重新 pull 该 tag 镜像即可
    ports:
      - 8880:8090  # 左边的3002可以自行修改成服务器上没有使用的端口
    environment:
      PANDORA_CLOUD: cloud
      # 二选一
      PANDORA_SERVER: 0.0.0.0:8090
      #PANDORA_ACCESS_TOKEN: eyxxxx

chatgpt客户端 chatgpt-next-web

基于chatgpt api,支持gpt-3.5,被官方禁掉的风险比较高。

version: '3.3'
services:
    chatgpt-next-web:
        ports:
            - '8881:3000'
        environment:
            - OPENAI_API_KEY=xxx    # 填写你的API KEY
            #- CODE=123456    # 填一个密码,不然你的额度很快就会被刷完
        image: yidadaa/chatgpt-next-web

chatgpt客户端 lobe-chat

支持语音输入输出,识别图像信息。

version: "3"
services:
    lobe-chat:
        ports:
            - 8080:3210
        environment:
            - OPENAI_API_KEY=sk-xxx # 你的API Key
            - ACCESS_CODE=xxx # 设置一个密码
        image: lobehub/lobe-chat

即时通讯服务vocechat

即时通信服务,有手机客户端

version: '3.3'
services:
    vocechat:
        restart: always
        ports:
            - '3123:3000'  # 冒号左边可以改成自己服务器未被占用的端口
        container_name: vocechat-server
        volumes:
            - './data:/home/vocechat-server/data' # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
        image: privoce/vocechat-server:latest

下载神器 qbittorrent

version: "2"
services:
  qbittorrent:
    image: linuxserver/qbittorrent
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai # 你的时区
      - UMASK_SET=022
      - WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口 
    volumes:
      - ~/qBittorrent/config:/config # 绝对路径请修改为自己的config文件夹
      - ~/qBittorrent/downloads:/downloads # 绝对路径请修改为自己的downloads文件夹
    ports:
      # 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。
      - 6881:6881 
      - 6881:6881/udp
      # 此处WEB UI 目标端口与内部端口务必保证相同,见问题1
      - 8081:8081
    restart: unless-stopped

web页面:ip:WEBUI_PORT
默认用户名密码:admin/adminadmin

nextcloud网盘

nextcloud不仅仅是一个网盘,它有强大的插件系统,可以通过插件市场下载安装非常丰富的插件,如drawio(画流程图)、即时通讯模块、记事本模块(支持markdown)、邮件等。

version: "2.1"
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./data:/data
    ports:
      - 3333:80  # web端口
      - 4433:443
    restart: unless-stopped

SearXNG搜索引擎

SearXNG是一个开源搜索引擎,集合了多个搜索引擎的结果,无广告。由于容器启动初始化时需要访问一些被墙的资源,所以部署的服务器需要科学上网或者使用国外服务器,否则会启动失败,服务无法访问。
github:https://github.com/searxng/searxng
官网文档:https://docs.searxng.org

services:
  redis:
    container_name: redis
    image: "redis:alpine"
    command: redis-server --save "" --appendonly "no"
    restart: always
    networks:
      - searxng
    tmpfs:
      - /var/lib/redis
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE

  searxng:
    container_name: searxng
    image: searxng/searxng:latest
    restart: always
    networks:
      - searxng
    ports:
     - "8180:8080"   # 这个冒号左边的端口可以更改,右边的不要改
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=https://域名或者ip+端口/
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
networks:
  searxng:
    ipam:
      driver: default

如果搜索后出现too many requests,修改searxng目录下的settings.yml文件,把limiter改成false