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://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
阿里云获取镜像地址: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.json
和config.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.com,web访问地址为mail.aa.com:
- MX,主机记录为@aa.com,记录值设置为子域名,如mail.aa.com
- A,主机记录为mail.aa.com,记录值设置为ip
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
。