在 Linux 系统的运维与开发场景中,Docker 凭借其高效的容器化技术,极大地简化了应用部署与管理流程。它打破了传统环境配置的复杂性,实现应用及其依赖的封装,确保在不同环境中稳定运行。本文将详细介绍在 Linux 系统下搭建 Docker 的步骤,并通过几个简单应用示例,带你快速上手 Docker。
uname -r
命令查看。若版本过低,部分 Docker 功能可能无法正常使用。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 开机自动启动,执行以下命令:
bash
sudo systemctl enable docker
之后,每次系统启动时,Docker 服务都会自动运行。
默认情况下,只有 root 用户能执行 Docker 命令。若想让普通用户也能使用 Docker,可将用户添加到docker
用户组:
bash
sudo usermod -aG docker $USER
添加完成后,重新登录用户或执行newgrp docker
命令,使设置生效。这样,普通用户无需使用sudo
即可运行 Docker 命令,提升操作便利性。
以 Nginx 为例,展示如何使用 Docker 运行 Web 服务器。
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
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 应用已在容器中成功运行。
以一个 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;
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
用于定义多容器应用的服务、网络和卷等配置。在此示例中,定义了app
和db
两个服务,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 的更多功能,如容器网络配置、数据持久化等,提升工作效率,优化应用部署与管理流程。