基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境

发布于:2025-06-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。该服务有CE社区版和EE企业版。

一、部署Docker

1.1 安装Docker Engine

要卸载的非官方软件包有:

  • docker.io
  • docker-compose
  • docker-compose-v2
  • docker-doc
  • podman-docker

此外,Docker引擎依赖于containard和runc。Docker引擎将这些依赖捆绑成一个bundle:如果您之前已经安装或运行过containerd,请卸载它们,以避免与Docker Engine绑定的版本冲突。

# Docker旧版本检测及卸载
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# 配置国内镜像源
## GPG源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## APT源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 更新源
sudo apt update && sudo apt upgrade

# 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.2 验证Docker引擎

sudo docker run hello-world

该命令下载一个测试映像并在容器中运行它。当容器运行时,它打印一条确认消息并退出。
现在您已经成功安装并启动了Docker引擎。
在这里插入图片描述

1.3 Docker Hub镜像加速

由于Docker Hub镜像服务运营商(默认是国外)网络原因,会导致您拉取Docker Hub镜像变慢,甚至下载失败。
下面直接改用国内的Hub镜像加速服:

# 修改守护json配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://mirrors.tuna.tsinghua.edu.cn",
        "http://mirrors.sohu.com",
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "https://ccr.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.awsl9527.cn"
    ]
}
EOF

# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 如果hello-world拉取失败,可再重试一下
sudo docker run hello-world

二、安装portainer-ce中文版

2.1 安装及配置容器

# 拉取镜像
docker pull 6053537/portainer-ce

# 创建数据卷
docker volume create portainer_data

# 创建运行portainer容器
docker run -d --name portainer -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data  6053537/portainer-ce

在这里插入图片描述
提示:通过docker ps -a 获取portainer容器ID,记住这串字符后面会用到。

现在就可以通过wsl虚拟机IP,访问Portainner Web管理器了。如果不知道虚拟机IP的话,可以这样获取:
在这里插入图片描述
第一次登录需要设置Admin密码,登录效果如下
在这里插入图片描述

2.2、密码遗忘的处理

# 通过容器ID查看配置文件
docker inspect 7d9e3a47f329
 
# 查看[Mounts]块复制Source的值(也就是密码存放的位置)
# 比如:/var/lib/docker/volumes/portainer_data/_data
 
# 停止Portainer服务
stop 7d9e3a47f329
 
# 执行密码重置
~$ docker run --rm -v  /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password

当执行完成后,获取系统重新初始化的密码,选取复制它。
在这里插入图片描述
记得重新启动Portainer服务,再次访问Web管理器,密码粘入复制的内容,登录即可。当然,仍可以点击[我的账户]修改方便记得住的密码。
在这里插入图片描述

三、安装Nginx反向代理服务

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为大家选择了 epoll and kqueue作为开发模型。

3.1 安装包

# 检查并更新系统软件包
sudo apt update && sudo apt upgrade

# 安装
sudo apt-get install nginx
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V

# 启动服务
sudo systemctl start nginx
# 检查服务状态
sudo systemctl status nginx

# 快速关闭 Nginx,可能不保存相关信息,并迅速终止 web 服务
nginx -s stop
# 平稳关闭 Nginx,保存相关信息,有安排的结束 web 服务
nginx -s quit
# 因改变了 Nginx 相关配置,需要重新加载配置而重载(不需要重启Nginx,只需要重新加载,就能让配置生效)
nginx -s reload

3.2 服务配置

服务配置分为两个部分

  • nginx.conf主要负责全局服务,比如全局http、ssl,日志记录以及Gzip资源压缩、虚拟主机应用服务、电子邮件服务;
  • default.conf(虚拟主机)负责主http/https及代理服务,比如server的监听端口、root根资源路径(www)位置等;

温馨提示
虚拟主机(Virtual Host)是指在一台服务器上托管多个域名或网站,通过配置不同的虚拟主机来实现多个网站共享同一台服务器资源的功能。使用虚拟主机可以让不同的网站在同一台服务器上运行,每个网站都拥有自己独立的配置和内容,就好像它们在不同的服务器上一样。

/etc/nginx/
├── nginx.conf          # 主配置文件
├── sites-available/    # 可用站点配置
├── sites-enabled/      # 已启用站点(符号链接)
├── conf.d/             # 附加配置
└── snippets/           # 可复用配置片段
(1) 主配置文件

主要是看【Virtual Host Configs】虚拟主机这节配置,引用路径是http server主机可配置路径。内容如下

user www-data;
# 工作进程的数量
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
		# 每个worker允许的客端最大连接数
        worker_connections 1024;
        # multi_accept on;
}

http {
        # ......(省略)

        ##
        # Logging Settings
		# nginx的日志级别:debug info notice warn error crit 等级逐渐升高。
		# 比如: error_log logs/error.log info;
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        # ......(省略)

        ##
        # Virtual Host Configs
        # 引用虚拟主机配置路径(可手工增加指定include 虚拟主机配置路径),支持通配符。
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

# ......(省略)
(2) 可用站点配置

Nginx在安装实例中,官方给出了一个默认的Virtual Host实例配置。你会发现default在sites-available和sites-enabled子目录中都存在,他们的区别和作用如下:

  • 【sites-available】:用于存放网站的配置目录,意为可用的网站列表,用于在需要时链接到 sites-enabled 中作为需要启用的网站。
  • 【sites-enabled】:意为已开启的网站,用于存放 sites-available 中配置文件的软链接

也就是讲,只需要在sites-available中做配置就行,Nginx是 自动链接到sites-enabled进行启用。内容如下

server {
        listen 8080 default_server;
        listen [::]:8080 default_server;

        # ......(省略)
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }
        # ......(省略)
}

其中最主要的部分如下

  • 【listen】虚拟主机服务端口,带[::]是指开放的tcp6协议端口;
  • 【root】根页面路径,也就是网站首页入口的位置;
  • 【index】首页入口文件,可以设定多个。其中index.nginx-debian.html就是Nginx官方内置的页面
  • 【try_files】大意就是请求访问时,首次进行按文件资源检查是否存在,然后按目录来检查。都不存在则调取一个404错误
附加配置实例

我们可以直接使用conf.d子目录来配置应用主机实例(文件命名为conf扩展类型),内容如下

server {
    listen       9990;  #监听端口号,如果没有域名不要用80
    server_name  192.168.1.50; #域名(多个用空格分隔)
    charset utf-8;

    #静态文件处理
    location / {
        root   /var/www/dist; #网站根目录(前端代码打包app存放位置)
        try_files $uri $uri/ /index.html;
        index  index.html index.htm;
        client_max_body_size 2048m;
    }

    #反向代理配置(指向本地应用)
    location /dev-api/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 2048m;
        proxy_pass http://localhost:9991/; #转发到后端服务器地址:端口号
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

保存成功后,执行

# 原应用实例配置修改时
sudo nginx -s reload

# 新增应用实例时
sudo systemctl restart nginx

OK,可以测试一下新的请求地址。感谢阅读

参考文档

ubuntu上安装、卸载、配置nginx
Nginx使用总结
Nginx—nginx.conf 配置结构详解


网站公告

今日签到

点亮在社区的每一天
去签到