写点什么

Docker Linux 快速安装及 Nginx 部署

作者:这我可不懂
  • 2024-01-04
    福建
  • 本文字数:3192 字

    阅读完需:约 10 分钟

前言

最近正在部署一套新的 Linux 服务器环境,基于 Docker 来部署所有的应用,顺便整理了一套经过验证的操作手册,以便大家遇到类似需求时,可以直接拿来用。


本文会涉及以下知识点:Docker 的 Linux 安装和卸载、Docker 用户组的创建、基于 Docker 的 Nginx 部署及简单配置。

Docker 的 Linux 安装

笔者这里采用的是 TencentOS Server 的云服务器,完全兼容 CentOS 8 版本。在安装时,大家可进行版本对照。

卸载旧版本

如果服务器是新购买的,可跳过该步骤。如果服务器上已经安装过 Docker,则可使用如下命令进行卸载:


yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
复制代码

当然,如果安装的过程中出现错误希望重新安装,也可采用上面的命令进行卸载。

添加 Docker 镜像源

直接访问 Docker 官方的镜像源进行安装、下载时往往会出现网络问题,在使用时可先修改 Docker 的镜像源。


通常可用使用阿里云地址、腾讯云地址等,这里因为使用的是腾讯云服务器,则使用腾讯云的镜像源。

执行以下命令,添加镜像源:


dnf config-manager --add-repo=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo
复制代码


其中,dnf 命令是 "Dandified Yum" 的简称,它是一种软件包管理器,用于自动安装、更新和删除包,同时也处理依赖关系。它是 Fedora、CentOS 和 RHEL 等基于 RPM 的 Linux 发行版的默认包管理器。


在 CentOS 8 之前,yum 是默认的包管理器。从 CentOS 8 开始,dnf 成为默认的包管理器,但是 yum 仍然可以使用。如果你的操作系统暂不支持 dnf 命令,可采用传统的 yum 命令。


可执行以下命令,查看已添加的 Docker 镜像源:


dnf list docker-ce
# 如果是yum命令,yum list docker-ce
复制代码

上述命令会列出所有可用的 docker-ce 软件包。


为了兼容性,后续命令我们统一采用 yum 命令来进行安装和操作。

Docker 安装及启动

在 Docker 安装之前,往往需要进行一些基础依赖的安装,同时也会设置随机启动的操作。

Docker 安装

安装所需依赖包:


yum install yum-utils device-mapper-persistent-data lvm2
复制代码


在安装之前,查询可安装的版本(可省略):


yum list docker-ce --showduplicates | sort -r
复制代码


下面是安装 Docker 的重点,只有一步:


yum install docker-ce docker-ce-cli containerd.io
复制代码


验证是否安装成功:


docker version
#显示信息Client: Docker Engine - Community Version: 24.0.6 API version: 1.43 Go version: go1.20.7 Git commit: ed223bc Built: Mon Sep 4 12:33:07 2023 OS/Arch: linux/amd64 Context: defaultCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
复制代码

Docker 启动

启动 Docker 服务和设置开机启动:


# 设置开机启动systemctl enable docker# 启动Dockersystemctl start docker
复制代码


启动完成之后,可执行如下命令进行验证是否安装成功:


docker run hello-world
复制代码


如果控制台打印类似如下信息,则表示安装启动成功:


Unable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-worldc1ec31eb5944: Pull completeDigest: sha256:ac69084025c660510933cca701f615283cdbb3aa0963188770b54c31c8962493Status: Downloaded newer image for hello-world:latest
Hello from Docker!This message shows that your installation appears to be working correctly.
复制代码

Docker 用户组管理

默认情况下,Docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。


出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。


在 Centos8 下建立 docker 用户组并使用 docker 用户来操作 docker,可以按照以下步骤进行。


以 root 用户身份登录 CentOS 8 系统,创建一个名为 docker 的新用户组:


sudo groupadd docker
复制代码


接下来,添加用户到 docker 组。将 username 替换为你的用户名:


sudo usermod -aG docker username
复制代码


这个命令将把你的用户添加到 docker 组。

验证你的用户是否已经被添加到 docker 组中,运行以下命令:


groups username
复制代码


如果一切顺利,你应该能看到 docker 出现在列出的组中。

让上述改动生效需要重新登录或者使用以下命令:


newgrp docker
复制代码


最后,验证是否可以无需 sudo 权限就能运行 Docker。运行以下命令:


docker run hello-world
复制代码


如果一切顺利,你应该能看到 hello-world 程序的输出。

基于 Docker 的 Nginx 部署

这里讲解一下 Nginx 的安装步骤以及 nginx.conf 的简单配置。

NGINX 镜像安装

在安装 Nginx 的 Docker 镜像之前,可先进行镜像搜索:


docker search nginx
复制代码


从搜索到镜像中选择符合条件的镜像,然后进行拉取:


docker pull nginx:latest
复制代码


拉取镜像之后,就可以进行对应镜像的配置和启动容器了。

这里为了获取 Nginx 的基础配置文件,先简单启动一个 Nginx 容器,当获得对应的配置文件之后,删除该容器,再重新启动一个正式的容器。


#启动一个容器docker run -d --name nginx nginx# 查看 容器 获取容器ID 或直接使用名字docker container ls# 在当前目录下创建目录:conf mkdir conf# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD当前全路径)docker cp nginx:/etc/nginx/nginx.conf $PWD/confdocker cp nginx:/etc/nginx/conf.d $PWD/conf
# 停止容器docker container stop nginx# 删除容器docker container rm nginx
# 在当前目录下创建目录:html放静态文件mkdir html
复制代码


通过上述操作,可获得宿主机上一些关于 Nginx 的基础配置和目录文件。

下面可以进行 Nginx 容器的正式部署了:


docker run -d -p 80:80  \              -p 443:443  \ --name nginx \ -v /home/worker/nginx/html:/usr/share/nginx/html \ -v /home/worker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /home/worker/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /home/worker/nginx/logs:/var/log/nginx \ nginx
复制代码


上述命令的基本解释:

  • -d:表示在一直在后台运行容器。

  • -p 80:80:对端口进行映射,将本地 80 端口映射到容器内部的 80 端口。443 端口的映射同理。

  • --name:设置创建的容器名称。

  • -v:将本地目录(文件)挂载到容器指定目录。


需要注意的事,一般启动 Nginx 容器时,需要同时把容器的 80 端口和 443 端口同时与宿主机进行映射,以免从 HTTP 请求向 HTTPS 请求切换时出现容器端口未映射的情况。

NGINX 配置

这里展示一个简单的 Nginx 配置:


server {    listen 443 ssl;    server_name www.xxx.com; # 申请过证书的域名    ssl_certificate     /etc/nginx/conf.d/certs/xxxx.pem;    ssl_certificate_key /etc/nginx/conf.d/certs/xxxx.key;    ssl_session_timeout 5m;    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;    ssl_prefer_server_ciphers on;    location / {        root  /usr/share/nginx/html/admin;        index  index.html index.htm;    }    location /admin {        alias   /usr/share/nginx/html/admin;        index  index.html index.htm;    }    location /s {   proxy_pass http://127.0.0.1:8080/;    }}
复制代码


在上述配置中,重点关注一下 HTTPS 的配置,其中 ssl_certificate 和 ssl_certificate_key 两项涉及到的证书文件,通常会放在/etc/nginx/conf.d 下,这样即可在宿主机对应的目录下替换证书文件以及修改 Nginx 的配置文件了。


当然,Nginx 的日志输出,通常也存储在容器挂载的宿主机对应文件内。

小结

至此,关于 Linux(CentOS 8)中如何修改镜像源,如何安装 Docker,如何启动 Docker,如何配置独立的 Docker 用户组,如何部署 Nginx 容器及 Nginx 的简单配置等已经讲解完毕。希望能够对大家有所帮助。

发布于: 刚刚阅读数: 5
用户头像

低代码技术追随者,为全民开发而努力 2023-02-15 加入

大家好,我是老王,专注于分享低代码图文知识,感兴趣的伙伴就请关注我吧!

评论

发布
暂无评论
Docker Linux快速安装及Nginx部署_Docker_这我可不懂_InfoQ写作社区