Dockers容器化部署服务器
安装配置
- 卸载旧版本的 dockers 容器、配置、缓存。(第一次安装的时候也可以运行指令)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- 在 linux 操作系统上终端一键部署
curl -sSL https://get.docker.com/ | sh
- 查看是否安装成功
docker -v
docker compose version
systemctl enable docker # 设置开机自动启动
- 安装成功后的 docker 一般位于
/var/lib/docker
路径,自行打开改路径,查看其文件夹的作用。
在/var/lib/docker目录下出现的文件夹及其作用如下:
1. **buildkit**: Docker 使用的用于创建和管理容器镜像的构建工具。它提供了更快速和高效的镜像构建功能。
2. **containers**: 存放正在运行或已经停止的容器的相关数据和元数据。
3. **image**: 存放已下载或构建的Docker镜像文件。
4. **network**: 存放Docker网络的相关配置信息。
5. **overlay2**: Docker使用的存储驱动之一,用于管理容器的分层文件系统。
6. **plugins**: 存放Docker插件的相关文件。
7. **runtimes**: 存放Docker使用的容器运行时相关的文件。
8. **swarm**: 如果您使用了Docker Swarm模式,这个目录存放Swarm集群的相关数据。
9. **tmp**: 存放Docker引擎使用的临时文件。
10. **volumes**: 存放Docker数据卷的相关数据。
11. **engine-id**: 存放Docker引擎的唯一标识符。
部署
-
工具 :
- window(在真机上编写我的项目)
- wsl
- Linux (在 wsl 层上安装且已经安装配置了 docker)
-
操作过程
-
在我的项目跟目录中编写 Dockerfile, Dockerfile 中定义的内容用于创建一个包含所有必要依赖和配置的 Docker 镜像。
-
打开终端 wsl,输入
pwd
指令查看当前的路径,wsl 终端上访问/mnt
目录来导航到 Windows 的 C 盘和 D 盘,至此可以导航到我的项目所在路径 -
构建镜像并且进行打包镜像为 tar 文件
docker build -t your-image-name . #创建镜像 docker save -o your-image-name.tar your-image-name #打包镜像为tar,并且位于项目跟目录下
- 将打包后的 tar 文件拖至 Linux 的文件资源里,并且终端导航到存放 tar 文件的路径(这里建议自己 mkdir 一个文件夹专门用来存放文件)
docker load -i your-image-name. Tar #加载镜像 docker images #查看镜像是否导入成功
-
构建 docker-compose.yml, 在里面配置我的容器端口映射问题、容器的数据库连接、容器的卷等配置
-
在我的.yml 路径上,一键部署配置我的容器。
docker compose up #用于启动和运行定义在 `docker-compose.yml` 中的所有服务 docker compose down #用于停止和删除这些服务 ,清理资源
-
-
常用脚本指令
-
运行容器:使用命令
docker run -d -p host-port:container-port your-image-name
启动容器。 -
管理容器:使用
docker ps
查看运行中的容器、docker stop
停止容器等、docker images
查看镜像、docker start containerIP
-
进入容器内部:使用
docker exec -it 《容器名或者id(全或者前4位))》 /bash
,进入容器内部可查看容器内部的配置;使用exit
离开当前的容器
-
-
Dockers-compose 介绍
-
内部的卷的设置相当于端口之间的映射关系,将当前的宿主机的文件路径与容器内部的路径进行映射
-
通过提前设置一些指令,直接部署容器
-
容器推荐
! 每一个容器里面相当于一个操作系统,故对应的每一个容器的 local host 是相互隔离的,因此如果容器之间要进行通信,得实现设置共同的网关(默认的 bridge 也可以,但是有一些局限,如多主机通信、dns 容器名称解析等),这样容器之间才可以进行通信
Note
- Minimalist Github
- 分享我使用两年的极简 网页记事本 - 承飞之咎
Install
- Make a dir to store configs and data.
mkdir -p /root/data/docker_data/
cd /root/data/docker_data/
wget https://github.com/pereorga/minimalist-web-notepad/archive/refs/heads/docker.zip
unzip docker.zip && rm docker.zip
mv minimalist-web-notepad-docker note
cd note
- Pull and build by docker compose.
nano docker-cpmpose.yml
mkdir data
version: "2.4"
services:
minimalist-web-notepad:
build: .
container_name: note
restart: always
ports:
- "nginx网关ip:8088:80" #如果要实现反向代理的话,先获取nginx的网关ip
volumes:
- ./data:/var/www/html/_tmp
Uninstall
cd /root/data/docker_data/note
docker stop note
Warning⚠️:If want to delete all your local data and configs
rm /root/data/docker_data/note
Nginx 反向代理工具
容器通信
-
导入 nginx 的镜像,输入
docker pull jc21/nginx-proxy-manager
,等待生成镜像 -
查看生成的镜像情况,输入
docker images
. -
生成一个特定的文件夹专门存放 nginx 的一些缓存信息等,
mkdir -p /root/data/docker_data/
cd /root/data/docker_data/
mkdir nginx
cd /nginx/
- 设置 docker-compose.yml 配置文件,输入 `nano docker-compose.yml
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager # 使用加载的镜像名称
container_name: nginx-proxy-manager
ports:
- "80:80" # 映射 HTTP 端口
- "443:443" # 映射 HTTPS 端
- "127.0.0.1:81:81"
volumes:
- ./data: /data # 映射服务器文件夹与容器文件夹,进行持久化数据
- /etc/letsencrypt: /etc/letsencrypt # 挂载 Let's Encrypt 证书路径
- ./html: /src/html
5. 配置成功后,输入
docker compose up一键配置容器,之后访问 127.0.0.1:81。 - 如果是本地使用的话,可以正常打开 nginx 的可视化面板 - 如果是服务器的话,显示打不开是应该对应的 localhost 是在本地打开,需要本地连接通过 ssh 与我的服务器访问进行修改,输入
ssh -L 8088:127.0.0.1:81 user@your_server_ip 然后后续的话就打开网页进行配置,将我的子域名与我的 localhost 进行配置就可以通过域名直接访问 - Tips: - **容器的
localhost** 是容器内部的网络环境,仅对容器有效。 - **
ssh -`** 端口转发通过 SSH 隧道将本地端口映射到远程机器上的指定端口,从而使本地访问的请求能够通过网络隧道转发到远程服务器上的服务,即使该服务是只对容器内部开放的
Nginx 引用静态文件及 404 界面自定义
-
注:在使用静态文件 html 时,可视化面板的 cache assets 不勾选,因为在静态文件变更的时候,对于的缓存不会实时改变
-
将准备好的静态文件存放在服务器确定的位置,之后通过打开 nginx 可视化面板进行域名配对已经进入 Advance 配置,添加以下的配置:
location / { root /src/html/blog; index index.html; # 对 HTML 文件不缓存 location ~* .html$ { add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; exires -1; } # 对静态资源缓存 30 天 location ~* .(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|otf)$ { add_header Cache-Control "public, max-age=2592000, immutable"; expires 30d; } } location /blog { alias /src/html/blog; index index.html; # 对 HTML 文件不缓存 location ~* .html$ { add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; expires -1; } # 对静态资源缓存 30 天 location ~* .(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|otf)$ { add_header Cache-Control "public, max-age=2592000, immutable"; expires 30d; } } error_page 404 505/error.html; #自定义界面错误 location = /error.html { root /src/html/error; internal; #只能内部调用 } #多个 location 实现同一个二级域名下实现路径切换不同的界面 #root 指引的是跟目录,默认要有一个根目录指引 # alias 指向的是域名后端不同路径切换不同的静态界面 # index 指向文件夹中的主文件
Portainer
-
Portainer 是一个简化 Docker 和 Kubernetes 容器管理的可视化工具。它提供图形界面,让用户可以轻松创建、启动、停止容器,管理镜像、网络和卷,还支持日志监控和多用户权限管理。Portainer 适合开发、测试、生产等场景,可以高效管理 Docker Swarm 和 Kubernetes 集群。默认运行在
9000
端口,通过浏览器访问即可使用,非常适合想要简化容器管理的用户 -
配置其他容器配置一样所示