Docker Linux快速安装及Nginx部署

在这里插入图片描述

前言

最近正在部署一套新的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:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Docker启动

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

# 设置开机启动
systemctl enable docker
# 启动Docker
systemctl start docker

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

docker run hello-world

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

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:ac69084025c660510933cca701f615283cdbb3aa0963188770b54c31c8962493
Status: 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/conf
docker 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_certificatessl_certificate_key两项涉及到的证书文件,通常会放在/etc/nginx/conf.d下,这样即可在宿主机对应的目录下替换证书文件以及修改Nginx的配置文件了。

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

小结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/293232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】Nessus部署自动更新和端口权限开放

文章目录 Nessus 自动更新配置Nessus服务端口开放Nessus profession 版本需要开放端口Sensor ProxyTenable Security Center (TSC)Tenable OT Security (TOT)Tenable OT Security Enterprise Manager (IEM)Tenable OT Security Industrial Core Platform (ICP)Tenable OT Secur…

基于卷积神经网络的回归分析

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络的回归分析 完整代码:卷积神经网络的回归分析(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/…

基于深度学习大模型实现离线翻译模型私有化部署使用,通过docker打包开源翻译模型,可到内网或者无网络环境下运行使用,可以使用一千多个翻译模型语言模型进行翻译

基于深度学习大模型实现离线翻译模型私有化部署使用,通过docker打包开源翻译模型,可到内网或者无网络环境下运行使用,可以使用一千多个翻译模型语言模型进行翻译,想要什么语种直接进行指定和修改就行。 环境要求,电脑内存低于8G建议不要尝试了,有无GPU都可以运行,但是有…

秋招复习之栈与队列

前言 1 栈 「栈 stack」是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果想取出底部的盘子,则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素(如整数、字符、对象等)&#xff0c…

释放创造力:可视化页面渲染引擎在低代码开发平台的应用

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 什么是页面渲染引擎? 页面渲染引擎是低代码开发平台的核心组件之一,它负责将开发者设计的页面布局和用户…

Docker 存储卷管理

一、存储卷简介 存储卷是一种方便、灵活、高效的Docker容器内数据存储方式。存储卷可以在容器内的不同进程间共享数据,并且可以在容器之间共享和重用。 二、存储卷的优点 可以在容器之间共享和重用,避免了在不同容器之间复制数据的繁琐。对数据卷的修…

Flume基础知识(七):Flume 事务与 Flume Agent 内部原理

1. Flume 事务详解 2. Flume Agent 内部原理 重要组件: 1)ChannelSelector ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型, 分别是 Replicating(复制)和 Multiplexing(多…

linux 的直接direct io

目录 什么是 Direct IO java 支持 使用场景 数据库 反思 在之前的文章零拷贝基础上,有一个针对那些不需要在操作系统的 page cache 里保存的情况,即绕过 page cache,对于 linux 提供了 direct io 的功能。 https://blog.csdn.net/zlpzl…

芯课堂 | LVG免费开源GUI图形库

概述 本文介绍目前LVGL的应用小知识,希望对采用MCU设计UI界面的用户有所启发,开发出界面更友好的消费品或者工业产品,造福大众。 01.LVGL系统架构 LVGL系统框架 应用程序创建GUI并处理特定任务的应用程序。 LVGL本身是一个图形库。我们的…

RFID技术在3C家电中的全方位应用

RFID技术在3C家电中的全方位应用 一、RFID技术简述 射频识别(RFID)技术是一种无线通信技术,已经在各行各业得到广泛应用。在3C家电领域,RFID技术的应用正在逐渐增加,为产品追溯、库存管理、防伪验证等方面提供了许多…

运维:电脑技巧:Win10常见的网络端口大全

目录 一、什么是网络端口? 二、网络传输协议 三、常见的 TCP 和 UDP 默认端口 一、什么是网络端口? 在计算机网络中,端口是通信端点。通常,端口标识分配给它们的特定网络服务。在操作系统中,端口号的主要用途协助是…

Python从入门到网络爬虫(内置函数详解)

前言 Python 内置了许多的函数和类型,比如print(),input()等,我们可以直接在程序中使用它们,非常方便,并且它们是Python解释器的底层实现的,所以效率是比一般的自定义函数更有效率。目前共有71个内置函数&…

Python爬取解放号外包需求案例,利用post参数多页爬取

代码展示: import requests import csv f open(外包数据.csv,modea,encodingutf-8,newline) csv_writer csv.writer(f) csv_writer.writerow([标题,编号,开始时间,结束时间,价格,状态,类型,投标人数,详情页]) def down_load(page): for page in range(1,page…

​电脑技巧:​笔记本电脑电流声的原因和解决方案

目录 一、音频设备接口接触不良 二、笔记本电源问题 三、笔记本电脑驱动程序问题 四、音频硬件问题 五、操作系统内部电磁干扰 六、最后总结 大家在日常生活当中,笔记本电脑已经成为我们工作、学习和娱乐的重要工具。但有时我们在使用过程中可能会遇到一个令人…

React组件之间的8种通讯方式

在 React 社区,遇到最多的其中一个问题是“不同组件之间如何相互通讯”。 在网上搜索了一些答案之后,早晚会有人提到 Flux,随后问题来了:“怎么用Flux解决通讯问题?Flux是必须的吗?”。 有时候 Flux 能解…

C++完成Query执行sql语句的接口封装和测试

1、在LXMysql.h 创建Query执行函数 //封装 执行sql语句 if sqllen 0 strlen获取字符长度bool Query(const char*sql,unsigned long sqllen0); 2、在LXMysql.cpp编写函数 bool LXMysql::Query(const char* sql, unsigned long sqllen){if (!mysql)//如果mysql没有初始化好{c…

C/C++ BM4 合并两个排序的链表

文章目录 前言题目1. 解决方案一1.1 思路概述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这道题采用两种方式,一种是直接插入法,还有一种就是递归调用。 题目 输入两个递增的链表,单个链表的长度为n,合并这两个链表…

imgaug库指南(四):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

AntDB内存管理之内存上下文

1. 主题说明 AntDB的内存管理在开发时,使用了内存上下文机制来实现内存管理。本文就从AntDB的内存上下文机制出发,解析内存上下文的实现原理。AntDB的代码中,涉及到内存的处理时,经常会看到下面这样的代码。 图1:切换…

SpringBean的生命周期

SpringBean Bean的生命周期 1、首先需要明确bean对象与普通对象的区别: 对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。 而 Spring 中的对象是 bean,…
最新文章