Docker Linux快速安裝及Nginx部署

張哥說技術發表於2024-01-04

來源:程式新視界

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=

其中,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 申請過證書的域名
    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 
    }
}

在上述配置中,重點關注一下HTTPS的配置,其中ssl_certificatessl_certificate_key兩項涉及到的證書檔案,通常會放在/etc/nginx/conf.d下,這樣即可在宿主機對應的目錄下替換證書檔案以及修改Nginx的配置檔案了。

當然,Nginx的日誌輸出,通常也儲存在容器掛載的宿主機對應檔案內。

小結

至此,關於Linux(CentOS 8)中如何修改映象源,如何安裝Docker,如何啟動Docker,如何配置獨立的Docker使用者組,如何部署Nginx容器及Nginx的簡單配置等已經講解完畢。希望能夠對大家有所幫助。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024923/viewspace-3002589/,如需轉載,請註明出處,否則將追究法律責任。

相關文章