Debian10 上安装部分应用,速度几乎为0,至少需要Debian11以上,512M内存足够。
安装 Docker 1.首先,更新现有的软件包列表:
2.接下来,安装一些必备软件包,让 apt 通过 HTTPS 使用软件包。
1 sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
3.然后将官方 Docker hub 的 GPG key 添加到系统中。
1 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
4.将 Docker 版本库添加到APT源:
1 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
5.接下来,我们用新添加的 Docker 软件包来进行升级更新。
6.安装 Docker
1 sudo apt install docker-ce -y
7.检查 Docker 是否正在运行
1 2 docker --version sudo systemctl status docker
8.重启 docker 并设置开机自启
1 2 3 sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker
9.修改Docker配置(来自烧饼博客 )
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训)
1 2 3 4 5 6 7 8 9 10 11 12 13 cat > /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true } EOF
然后重启 Docker 服务:
1 systemctl restart docker
在 Docker 中使用镜像 1.要查看已下载到计算机的镜像:
2.删除某个docker镜像
1 docker rmi <your-image-id>
3.一次删除多张镜像
1 docker rmi <your-image-id> <your-image-id> ...
4.一次删除所有镜像
1 docker rmi $(docker images -q)
在 Docker 中使用容器 1.要查看所有 的容器对象,请使用:
docker ps -a -q 分解
docker ps 列出活动 中容器。
-a 这个选项用于列出所有 容器,包括停止运行的。如果没有这个选项,则默认只列出在运行的容器。
-q 这个选项列出容器的数字 ID,而不是容器的所有信息。
2.要启动已停止的容器,请使用docker start命令+容器ID或容器名
停止所有容器运行:docker stop $(docker ps -a -q)
3.通过docker rm命令来删除不用的容器。
先使用docker ps -a命令查找相关镜像关联的容器的容器ID或名称 ,然后通过docker rm命令来删除其删除。
删除所有停止运行的容器:docker rm $(docker ps -a -q)
Docker 容器开机自启 1.在使用docker run启动容器时,使用–restart参数来设置:
1 docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always
2.如果创建时未指定 –restart=always ,可通过update 命令设置
1 docker update --restart=always 容器ID或名称
安装 Docker Compose 1.安装
1 2 3 4 export LATEST_VERSION=$(wget -qO- -t1 -T2 "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g' )sudo curl -L https://github.com/docker/compose/releases/download/$LATEST_VERSION /docker-compose-linux-`uname -m` > ./docker-compose sudo chmod +x ./docker-compose sudo mv ./docker-compose /usr/local/bin/docker-compose
2.查看版本
1 docker-compose --version
3.使用 -d 选项以分离模式启动 Compose(后台)
4.要查看正在运行的 docker 容器,请使用以下命令
5.删除容器
1 2 3 4 5 cd /root/data/docker_data/joplin # 进入docker-compose所在的文件夹 docker-compose down # 停止容器,此时不会删除映射到本地的数据 rm -rf /root/data/docker_data/joplin # 完全删除映射到本地的数据
6.一些 Docker Compose 常用命令:
1 2 3 4 5 docker-compose restart # 重启容器 docker-compose stop # 暂停容器 docker-compose down # 删除容器 docker-compose pull # 更新镜像 docker-compose exec artalk bash # 进入容器
7.Docker Compose升级
拉取最新镜像,然后重新创建容器即可。
1 2 3 docker-compose pull docker-compose up -d docker image prune
8.使用 Watchtower 自动更新
Watchtower 可自动检测并更新 Docker 容器到最新镜像。
1 2 3 4 5 6 7 8 services: watchtower: image: containrrr/watchtower container_name: watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --interval 86400 --cleanup restart: always
开机自动启动应用容器 1.方法一、通过 Docker Restart Policy 方法
在 Docker 中,支持 –restart 选项,来控制容器自动启动。在 Docker Compose 中,应该使用 restart 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 version: '2' services: database: build: ./mysql/ command: mysqld --user=root --verbose + restart: always environment: MYSQL_DATABASE: "web_level3_sqli" MYSQL_USER: "web_level3_sqli" MYSQL_PASSWORD: "thisisasecurepassword123" MYSQL_ROOT_PASSWORD: "root" MYSQL_ALLOW_EMPTY_PASSWORD: "yes" web: build: ./www/ + restart: always ports: - "12000:80" volumes: - ./www/src:/var/www/html links: - database
注意事项: 1)Docker 并不知道这些服务的依赖关系及启动顺序,需要我们精心编排 docker-compose.yaml 文件; 2)Docker Compose 不支持 deploy:restart_policy 属性,该属性只能用于 a swarm with docker stack deploy 环境;
2.方法二、通过进程管理服务(推荐)
该方法本质上还是在执行 docker-compose 命令。
使用 systemd 管理 如下示例,可以根据需要进行设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [Unit] Description=Docker Compose Application Service Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/srv/docker/app/ ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target
7.卸载 Docker Compose
1 sudo rm /usr/local/bin/docker-compose
Docker Compose 部署tv 参考:Memos Docker-Compose部署
1.创建 tv 工作目录
1 2 3 mkdir -p /root/docker/tv cd /root/docker/tv vi docker-compose.yml
2.编写 docker-compose.yml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 services: decotv-core: image: ghcr.io/decohererk/decotv:latest container_name: decotv-core restart: always ports: - '3000:3000' environment: - USERNAME=admin - PASSWORD=190430five - NEXT_PUBLIC_STORAGE_TYPE=kvrocks - KVROCKS_URL=redis://decotv-kvrocks:6666 - NEXT_PUBLIC_DISABLE_YELLOW_FILTER=false networks: - decotv-network depends_on: - decotv-kvrocks decotv-kvrocks: image: apache/kvrocks container_name: decotv-kvrocks restart: always volumes: - kvrocks-data:/var/lib/kvrocks networks: - decotv-network watchtower: image: containrrr/watchtower container_name: watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --interval 86400 --cleanup restart: always networks: decotv-network: driver: bridge volumes: kvrocks-data:
3.执行命令,tv 后端程序将运行在 http://localhost:端口号
4.配置域名访问,参考:域名访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 server { listen 80 ; server_name tv.bore.vip; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name tv.bore.vip; root /data/wwwroot/tv.bore.vip; ssl_certificate /etc/letsencrypt/live/tv.bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tv.bore.vip/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000" ; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; add_header Cache-Control no -cache; expires 12h; } location ^~ /.well-known/acme-challenge/ { default_type "text/plain" ; allow all; root /data/wwwroot/tv.bore.vip/; } }
5.视频源配置:
精简版见:LunaTV-config
6.更新(更新前最好在后台先备份数据 )
1 2 3 4 cd /root/docker/tv docker-compose pull docker-compose up -d docker image prune
PS:是否需要 docker-compose down?(问chatgpt)
一般 不需要 ,除非:
改过网络、volume、端口等会冲突的配置
某些服务需要完全重建
想彻底清理旧容器
如果你只是更新镜像 → 重启服务,那么 不加 down 是正确的 。
常见问题 1.出错提示:error storing credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY
解决方法:
1 sudo apt install gnupg2 pass -y
参考链接