一文读懂 Linux 下 Docker 搭建及简单应用

一、引言

在 Linux 系统的运维与开发场景中,Docker 凭借其高效的容器化技术,极大地简化了应用部署与管理流程。它打破了传统环境配置的复杂性,实现应用及其依赖的封装,确保在不同环境中稳定运行。本文将详细介绍在 Linux 系统下搭建 Docker 的步骤,并通过几个简单应用示例,带你快速上手 Docker。

二、Linux 下 Docker 搭建

(一)准备工作

  1. 系统要求:建议使用主流的 Linux 发行版,如 Ubuntu、CentOS 等。本文以 Ubuntu 20.04 为例进行演示。确保系统内核版本在 3.10 及以上,可通过uname -r命令查看。若版本过低,部分 Docker 功能可能无法正常使用。
  2. 硬件资源:为保证 Docker 正常运行,系统至少需 1GB 内存和 20GB 磁盘空间。若运行多个大型容器,应根据实际需求增加资源配置。

(二)安装步骤

  1. 更新软件包列表:打开终端,输入以下命令更新系统软件包列表,获取最新的软件包信息:

bash

sudo apt update

这一步能确保后续安装的软件包是最新版本,避免因旧版本导致的兼容性问题。
2. 安装依赖包:执行以下命令安装 Docker 所需的依赖包:

bash

sudo apt install apt-transport-https ca-certificates curl software-properties-common

这些依赖包为 Docker 的安装和运行提供必要支持,如apt-transport-https用于通过 HTTPS 协议获取软件包,ca-certificates用于验证软件包来源的合法性。
3. 添加 Docker 官方 GPG 密钥:使用curl命令下载并添加 Docker 官方的 GPG 密钥,以确保下载的软件包来源可靠:

bash

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

该密钥用于验证从 Docker 官方源下载的软件包的完整性和真实性,防止软件包被篡改。
4. 添加 Docker 软件源:将 Docker 的官方软件源添加到系统中,使系统能够获取 Docker 的安装包:

bash

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

其中,arch=amd64指定软件包的架构,$(lsb_release -cs)会根据系统版本自动获取对应的 Ubuntu 版本代号。
5. 安装 Docker Engine:再次更新软件包列表,然后安装 Docker Engine:

bash

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

docker-ce是社区版的 Docker 引擎,docker-ce-cli是命令行工具,containerd.io是容器运行时,它们协同工作,为用户提供完整的 Docker 功能。
6. 验证安装:安装完成后,使用以下命令验证 Docker 是否安装成功:

bash

sudo docker run hello-world

若看到类似 “Hello from Docker!” 的输出,说明 Docker 已成功安装。此时,系统会从 Docker Hub 下载一个测试镜像并运行,展示 Docker 的基本功能。

(三)配置 Docker 开机自启

为方便使用,可设置 Docker 开机自动启动,执行以下命令:

bash

sudo systemctl enable docker

之后,每次系统启动时,Docker 服务都会自动运行。

(四)非 root 用户使用 Docker

默认情况下,只有 root 用户能执行 Docker 命令。若想让普通用户也能使用 Docker,可将用户添加到docker用户组:

bash

sudo usermod -aG docker $USER

添加完成后,重新登录用户或执行newgrp docker命令,使设置生效。这样,普通用户无需使用sudo即可运行 Docker 命令,提升操作便利性。

三、Docker 简单应用示例

(一)运行 Web 服务器容器

以 Nginx 为例,展示如何使用 Docker 运行 Web 服务器。

  1. 拉取 Nginx 镜像:在终端输入以下命令,从 Docker Hub 拉取 Nginx 镜像:

bash

docker pull nginx

docker pull命令用于从镜像仓库下载指定镜像。Nginx 是一款高性能的 Web 服务器,在 Docker Hub 上有官方镜像可供使用。
2. 运行 Nginx 容器:使用以下命令运行 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口:

bash

docker run -d -p 8080:80 nginx

-d参数表示以守护进程模式在后台运行容器;-p 8080:80表示将主机的 8080 端口映射到容器的 80 端口。这样,通过浏览器访问主机的 8080 端口,就能看到 Nginx 的默认欢迎页面。
3. 停止和删除容器:若想停止正在运行的 Nginx 容器,可使用以下命令:

bash

docker stop <容器ID或容器名>

通过docker ps命令可查看容器 ID 或容器名。停止容器后,若要删除该容器,执行:

bash

docker rm <容器ID或容器名>

(二)构建自定义镜像

假设你有一个简单的 Python Flask 应用,目录结构如下:

plaintext

myapp/
│
├── app.py
└── requirements.txt

其中,app.py代码如下:

python

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

requirements.txt内容为:

plaintext

Flask
  1. 创建 Dockerfile:在myapp目录下创建Dockerfile,内容如下:

Dockerfile

# 使用Python官方镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将当前目录下的所有文件复制到容器的/app目录下
COPY. /app

# 安装应用所需的依赖
RUN pip install -r requirements.txt

# 暴露5000端口
EXPOSE 5000

# 定义容器启动时要执行的命令
CMD ["python", "app.py"]

Dockerfile是构建 Docker 镜像的脚本,通过一系列指令定义镜像的基础环境、安装依赖、设置工作目录等。
2. 构建镜像:在myapp目录的终端中执行以下命令构建镜像,myapp:v1是自定义的镜像名称和标签:

bash

docker build -t myapp:v1.

-t参数用于指定镜像的标签,最后的.表示构建上下文为当前目录。构建过程中,Docker 会根据Dockerfile的指令逐步创建镜像。
3. 运行自定义镜像容器:构建完成后,使用以下命令运行容器,并将容器的 5000 端口映射到主机的 5000 端口:

bash

docker run -d -p 5000:5000 myapp:v1

此时,通过浏览器访问主机的 5000 端口,就能看到 “Hello, Docker!” 的页面,说明自定义的 Flask 应用已在容器中成功运行。

(三)使用 Docker Compose 管理多容器应用

以一个 Flask 应用搭配 MySQL 数据库为例,展示 Docker Compose 的使用。假设项目目录结构如下:

plaintext

myproject/
│
├── app/
│   ├── app.py
│   └── requirements.txt
├── docker-compose.yml
└── mysql/
    └── init.sql

app.py代码如下:

python

from flask import Flask
import mysql.connector

app = Flask(__name__)

@app.route('/')
def hello_world():
    try:
        mydb = mysql.connector.connect(
            host="db",
            user="root",
            password="password",
            database="mydb"
        )
        mycursor = mydb.cursor()
        mycursor.execute("SELECT VERSION()")
        data = mycursor.fetchone()
        mydb.close()
        return f"Database version: {data[0]}"
    except Exception as e:
        return f"Error: {str(e)}"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

requirements.txt内容为:

plaintext

Flask
mysql-connector-python

init.sql内容为:

sql

CREATE DATABASE mydb;
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'%';
FLUSH PRIVILEGES;
  1. 安装 Docker Compose:在终端执行以下命令安装 Docker Compose:

bash

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装完成后,可通过docker-compose --version命令查看版本,验证是否安装成功。
2. 编写 docker-compose.yml:在myproject目录下创建docker-compose.yml,内容如下:

yaml

version: '3'
services:
  app:
    build:
      context:.
      dockerfile: app/Dockerfile
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    image: mysql:8.0
    volumes:
      -./mysql:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=mydb

docker-compose.yml用于定义多容器应用的服务、网络和卷等配置。在此示例中,定义了appdb两个服务,app服务构建自指定的Dockerfile,并依赖db服务;db服务使用 MySQL 官方镜像,并通过卷挂载初始化数据库脚本。
3. 启动多容器应用:在myproject目录的终端中执行以下命令启动应用:

bash

docker-compose up -d

-d参数使容器在后台运行。启动后,通过浏览器访问主机的 5000 端口,若看到数据库版本信息,说明多容器应用已成功运行。
4. 停止和清理多容器应用:若要停止并删除多容器应用,在项目目录下执行:

bash

docker-compose down

该命令会停止所有相关容器,并删除由docker-compose up创建的网络。

四、总结

通过上述步骤,你已掌握在 Linux 系统下搭建 Docker 及进行简单应用的方法。从基础的安装配置,到运行 Web 服务器、构建自定义镜像,再到使用 Docker Compose 管理多容器应用,Docker 为 Linux 环境下的开发与运维带来诸多便利。在实际工作中,你可根据具体需求深入探索 Docker 的更多功能,如容器网络配置、数据持久化等,提升工作效率,优化应用部署与管理流程。

你可能感兴趣的:(linux,docker,运维,服务器)