Docker安全

 Docker介绍

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖打包到一个独立的容器中,从而实现快速部署、可移植性和环境一致性。

1. Docker 的核心组件

Docker 主要由以下三个核心组件组成:

2. Docker 的工作原理

Docker 的实现原理主要基于以下 Linux 内核特性:

  • 命名空间(Namespace)

    • 用于隔离进程间的资源,包括进程、网络、用户等,使得容器内的进程看起来就像在一个独立的环境中运行一样。

  • 控制组(Cgroups)

    • 用于限制和隔离进程组的资源,如 CPU、内存、磁盘 I/O 等,以确保容器在宿主机上的有限资源中运行。

  • 联合文件系统(Union File System)

    • 将多个文件系统挂载到同一个目录下,形成一个统一的文件系统。这使得容器可以共享基础镜像的文件系统层,并在其之上添加自己的可写层。

3. Docker 的基本操作
  • 拉取镜像

    bash复制

    docker pull ubuntu
  • 推送镜像

    bash复制

    docker push your-registry/your-image:tag
  • 搜索镜像

    bash复制

    docker search nginx
  • 启动容器

    bash复制

    docker start [容器名/ID]
  • 查看容器

    bash复制

    docker ps
  • 进入容器

    bash复制

    docker exec -it [容器名/ID] /bin/bash
  • 停止容器

    bash复制

    docker stop [容器名/ID]
  • 删除容器

    bash复制

    docker rm [容器名/ID]
4. Docker 的架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 主要有以下几部分组成:

  • Docker Client(客户端)

  • Docker Daemon(守护进程)

  • Docker Image(镜像)

  • Docker Container(容器)

  • Docker Registry(仓库)

 Docker基本命令

Docker 是一个开源的应用容器引擎,允许开发者将应用程序及其依赖打包到一个独立的容器中,从而实现快速部署、可移植性和环境一致性。以下是 Docker 的一些基本命令,帮助你快速上手 Docker。

1. 安装 Docker

(1)安装 Docker Engine

  • Windows 和 macOS

    • 下载并安装 Docker Desktop

    • 安装完成后,启动 Docker Desktop。

  • Linux

    • 更新包索引:

    bash复制

    sudo apt-get update
    • 安装必要的包:

    bash复制

    sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    • 添加 Docker 的官方 GPG 密钥:

    bash复制

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    • 将 Docker 的 APT 仓库添加到系统中:

    bash复制

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    • 安装最新版本的 Docker Engine 和 containerd

    bash复制

    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    • 验证 Docker 是否安装成功:

    bash复制

    sudo docker run hello-world
2. Docker 基本命令

(1)管理镜像

  • 拉取镜像

    bash复制

    docker pull [镜像名]
    • 示例:

    bash复制

    docker pull ubuntu
  • 列出本地镜像

    bash复制

    docker images
  • 删除镜像

    bash复制

    docker rmi [镜像ID或镜像名]
    • 示例:

    bash复制

    docker rmi ubuntu
  • 搜索镜像

    bash复制

    docker search [关键词]
    • 示例:

    bash复制

    docker search nginx

(2)管理容器

  • 运行容器

    bash复制

    docker run [选项] [镜像名] [命令]
    • 示例:

    bash复制

    docker run -d -p 80:80 nginx
    • -d:后台运行容器。

    • -p:端口映射,格式为 宿主机端口:容器端口

  • 列出正在运行的容器

    bash复制

    docker ps
  • 列出所有容器

    bash复制

    docker ps -a
  • 进入容器

    bash复制

    docker exec -it [容器ID或容器名] /bin/bash
    • 示例:

    bash复制

    docker exec -it my_container /bin/bash
  • 停止容器

    bash复制

    docker stop [容器ID或容器名]
    • 示例:

    bash复制

    docker stop my_container
  • 启动容器

    bash复制

    docker start [容器ID或容器名]
    • 示例:

    bash复制

    docker start my_container
  • 删除容器

    bash复制

    docker rm [容器ID或容器名]
    • 示例:

    bash复制

    docker rm my_container
  • 删除所有已停止的容器

    bash复制

    docker container prune

(3)管理数据卷

  • 创建数据卷

    bash复制

    docker volume create [数据卷名]
    • 示例:

    bash复制

    docker volume create my_volume
  • 列出数据卷

    bash复制

    docker volume ls
  • 删除数据卷

    bash复制

    docker volume rm [数据卷名]
    • 示例:

    bash复制

    docker volume rm my_volume
  • 删除所有未使用的数据卷

    bash复制

    docker volume prune

(4)管理网络

  • 创建网络

    bash复制

    docker network create [网络名]
    • 示例:

    bash复制

    docker network create my_network
  • 列出网络

    bash复制

    docker network ls
  • 删除网络

    bash复制

    docker network rm [网络名]
    • 示例:

    bash复制

    docker network rm my_network
  • 连接容器到网络

    bash复制

    docker network connect [网络名] [容器名或容器ID]
    • 示例:

    bash复制

    docker network connect my_network my_container
  • 断开容器与网络的连接

    bash复制

    docker network disconnect [网络名] [容器名或容器ID]
    • 示例:

    bash复制

    docker network disconnect my_network my_container
3. Docker Compose

Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件,你可以配置应用程序的服务、网络和卷。

  • 安装 Docker Compose

  • 创建 docker-compose.yml 文件

    yaml复制

    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "80:80"
      db:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: example
  • 启动服务

    bash复制

    docker-compose up
  • 停止服务

    bash复制

    docker-compose down
4. 常见问题解决
  • 权限问题

    • 如果在运行 Docker 命令时遇到权限问题,可以将当前用户添加到 docker 组:

    bash复制

    sudo usermod -aG docker ${USER}
    • 重新登录或重启系统以使更改生效。

  • 清理未使用的资源

    • 清理未使用的镜像、容器、数据卷和网络:

    bash复制

    docker system prune

使用Docker搭建实验环境 

Docker 是一个强大的工具,可以快速搭建各种实验环境,无论是开发、测试还是学习新的技术栈,Docker 都能提供一致性和隔离性。以下将通过几个具体的实验环境搭建示例,展示如何使用 Docker 快速搭建实验环境。

1. 搭建一个简单的 Web 应用环境

假设你想搭建一个简单的 Web 应用环境,使用 Nginx 作为 Web 服务器,MySQL 作为数据库。

(1)创建 docker-compose.yml 文件

yaml复制

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - ./mysql_data:/var/lib/mysql

(2)创建 Web 应用内容

在项目目录下创建一个 html 文件夹,并在其中创建一个简单的 HTML 文件 index.html

HTML复制

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Web App</title>
</head>
<body>
    <h1>Welcome to My Web App</h1>
</body>
</html>

预览

(3)启动服务

在项目目录下运行以下命令:

bash复制

docker-compose up -d
  • -d 参数表示在后台运行服务。

(4)访问 Web 应用

打开浏览器,访问 http://localhost,你应该能看到你的 Web 应用。

(5)停止服务

当你完成实验后,可以运行以下命令停止服务:

bash复制

docker-compose down
2. 搭建一个 Python Flask 应用环境

假设你想搭建一个基于 Python Flask 的 Web 应用环境。

(1)创建项目结构

复制

my_flask_app/
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml

(2)创建 app.py 文件

Python复制

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

(3)创建 requirements.txt 文件

Flask==2.0.1

(4)创建 Dockerfile 文件

dockerfile复制

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

(5)创建 docker-compose.yml 文件

yaml复制

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"

(6)启动服务

在项目目录下运行以下命令:

bash复制

docker-compose up -d

(7)访问 Flask 应用

打开浏览器,访问 http://localhost:5000,你应该能看到 "Hello, Docker!" 的消息。

(8)停止服务

当你完成实验后,可以运行以下命令停止服务:

bash复制

docker-compose down
3. 搭建一个 Node.js 应用环境

假设你想搭建一个基于 Node.js 的 Web 应用环境。

(1)创建项目结构

复制

my_node_app/
├── app.js
├── package.json
├── Dockerfile
└── docker-compose.yml

(2)创建 app.js 文件

JavaScript复制

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello, Docker!');
});

app.listen(3000, () => {
    console.log('App is running on port 3000');
});

(3)创建 package.json 文件

JSON复制

{
    "name": "my_node_app",
    "version": "1.0.0",
    "description": "",
    "main": "app.js",
    "scripts": {
        "start": "node app.js"
    },
    "dependencies": {
        "express": "^4.17.1"
    }
}

(4)创建 Dockerfile 文件

dockerfile复制

FROM node:14-slim

WORKDIR /app

COPY package.json package.json
RUN npm install

COPY . .

CMD ["npm", "start"]

(5)创建 docker-compose.yml 文件

yaml复制

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"

(6)启动服务

在项目目录下运行以下命令:

bash复制

docker-compose up -d

(7)访问 Node.js 应用

打开浏览器,访问 http://localhost:3000,你应该能看到 "Hello, Docker!" 的消息。

(8)停止服务

当你完成实验后,可以运行以下命令停止服务:

bash复制

docker-compose down

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值