Linux下的Docker安装教程

Linux下的Docker安装教程

零、目录

文章目录

一、简介

Docker 是一个开源的应用容器引擎,可以让开发者将应用及其依赖打包成一个标准化的容器,然后在任何地方运行。其最大特点是轻量级、快速和便捷,尤其适用于微服务架构和 DevOps 场景。本文将详细讲解如何在 Linux 上安装 Docker,并介绍一些常见的配置和调试技巧。

二、准备工作

在开始安装 Docker 之前,需要确保你的系统满足以下要求:

  • 需要有 root 或 sudo 权限的用户
  • 系统需要运行在支持 Docker 的 Linux 发行版上,如 Ubuntu、CentOS 或 Debian
  • 系统内核版本需要大于 3.10(可以通过 uname -r 命令查看当前内核版本)

1. 系统检查

首先,查看 Linux 内核版本:

bash 复制代码
uname -r

如果版本低于 3.10,需要升级内核,或者选择其他版本的 Docker。

root@node1 \~\]# uname -r 3.10.0-1160.el7.x86_64

三、Docker的安装步骤

Docker 在不同的 Linux 发行版上有不同的安装方式。下面将详细讲解在 CentOS安装 Docker 的步骤。

1. 通过YUM安装(博主亲测有效!!!)

在 CentOS、RHEL 或 Fedora 上,你可以使用 YUM 包管理器安装 Docker。

  1. 安装必要的依赖

    首先,确保系统已安装 yum-utils 工具:

    bash 复制代码
    sudo yum install -y yum-utils
  2. 添加 Docker 仓库

    执行以下命令将 Docker 的官方仓库添加到你的系统中:

    !老铁你切记,有的电脑显示下边这个是两行,实际上是一个命令!

    bash 复制代码
     sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    不是每次都会成功,一次不行就再来一次

  3. 安装 Docker CE

    安装 Docker CE:

    这个命令也是,一次执行不成功就多执行几次,我执行了5次才成功

    bash 复制代码
    sudo yum install docker-ce
  4. 启动 Docker 服务

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

    bash 复制代码
    sudo systemctl start docker
    sudo systemctl enable docker
  5. 验证 Docker 安装

    使用以下命令检查 Docker 是否安装成功:

    bash 复制代码
    docker --version

root@node1 \~\]# docker --version Docker version 26.1.4, build 5650f9b \[root@node1 \~\]#

四、验证Docker安装

安装完成后,确保 Docker 正常运行。可以通过以下几个命令来验证:

  1. 检查 Docker 服务状态

    使用以下命令检查 Docker 服务是否在运行:

    bash 复制代码
    sudo systemctl status docker

    如果 Docker 正常运行,输出应该显示为"active (running)"。

    酱婶的就成功了

  2. 运行测试容器

    运行一个简单的测试容器,确保 Docker 正常工作:

    root@node1 \~\]# docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 31.13.71.19:443: i/o timeout. See 'docker run --help'.

    执行这个代码有的时候会出现这个报错,那真是脑瓜子嗡嗡的,不过博主凭借着惊人的智慧也算是成功解决了,具体内容看下边的报错解决部分

    bash 复制代码
    sudo docker run hello-world

    这个命令会下载并运行一个名为 hello-world 的 Docker 镜像,输出一条欢迎消息。

五、Docker常用命令及操作

  1. 启动 Docker 容器

    bash 复制代码
    docker run -it ubuntu bash

    该命令会启动一个 Ubuntu 容器,并进入容器内的 bash 环境。

  2. 列出所有容器

    bash 复制代码
    docker ps -a

    列出所有的容器,包括运行中和已停止的容器。

  3. 停止 Docker 容器

    bash 复制代码
    docker stop <container_id>

    停止指定的容器。

  4. 删除容器

    bash 复制代码
    docker rm <container_id>

    删除指定的容器。

  5. 查看 Docker 镜像

    bash 复制代码
    docker images

    查看本地镜像列表。

  6. 删除镜像

    bash 复制代码
    docker rmi <image_id>

    删除指定的镜像。

六、高级技巧与调试

使用 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。在项目中使用 Docker Compose 可以轻松管理多个容器。创建一个 docker-compose.yml 文件,定义多个服务并使用 docker-compose 命令启动所有服务。

  1. 创建 docker-compose.yml 文件

    yaml 复制代码
    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "8080:80"
      db:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: example
  2. 启动服务

    bash 复制代码
    docker-compose up

调试技巧

  1. 查看容器日志

    bash 复制代码
    docker logs <container_id>

    查看容器的输出日志,帮助排查错误。

  2. 交互式运行容器

    使用 -it 参数可以进入容器的交互式终端:

    bash 复制代码
    docker run -it ubuntu bash

七、实际项目应用

示例项目:搭建一个 Flask + Redis 应用

  1. 创建项目文件夹

    plaintext 复制代码
    flask_redis/
    ├── app.py
    ├── Dockerfile
    ├── requirements.txt
    └── docker-compose.yml
  2. 编写 app.py

    python 复制代码
    from flask import Flask
    import redis
    
    app = Flask(__name__)
    r = redis.Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello_world():
        r.incr('counter')
        return f'Hello, World! Count: {r.get("counter").decode("utf-8")}'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
  3. 编写 Dockerfile

    dockerfile 复制代码
    FROM python:3.8-slim
    COPY requirements.txt /app/
    WORKDIR /app
    RUN pip install -r requirements.txt
    COPY . /app
    CMD ["python", "app.py"]
  4. 编写 docker-compose.yml

    yaml 复制代码
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: redis
  5. 启动项目

    bash 复制代码
    docker-compose up --build

访问 Flask 应用:在浏览器中访问 http://localhost:5000

八、Docker的工作原理

Docker 基于 Linux 的 cgroups 和 namespaces 技术,通过对资源的隔离和限制,能够使得不同的容器共享相同的操作系统内核而不会相互干扰。这使得 Docker 比虚拟机更加轻量、高效。每个 Docker 容器都有自己的网络、文件系统和进程空间。

cgroups 和 namespaces

  • cgroups:用来控制容器的资源分配,如 CPU、内存、磁盘 I/O 等。
  • namespaces:用来提供容器级别的资源隔离,包括进程、网络、用户等。

九、报错解决

root@node1 \~\]# docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 31.13.71.19:443: i/o timeout. See 'docker run --help'.

我试了好多个办法,具体是哪个起作用了我也不确定,反正都整上指定是好使

1.系统代理

我是用的虚拟机,所以先确定了一下windows的代理地址(127.0.0.1:18888)和windows的ip地址(192.168.10.1)

2.虚拟机代理地址

bash 复制代码
vim /etc/systemd/system/docker.service.d/http-proxy.conf
bash 复制代码
[Service]
Environment="HTTP_PROXY=http://192.168.10.1:10809"
Environment="HTTPS_PROXY=http://192.168.10.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1,.local"
bash 复制代码
vim /etc/profile
bash 复制代码
export http_proxy="http://192.168.10.1:10809"
export https_proxy="http://192.168.10.1:10809"
export ftp_proxy="http://192.168.10.1:10809"
export no_proxy="localhost,127.0.0.1,.local"

访问curl -I https://www.google.com说明代理对了

3. 添加镜像

bash 复制代码
sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
bash 复制代码
{
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.tuna.tsinghua.edu.cn",
        "https://mirror.ccs.tencentyun.com",
        "http://hub-mirror.c.163.com"
    ]
}

4.DNS配置

bash 复制代码
sudo vi /etc/resolv.conf
bash 复制代码
nameserver 192.168.10.2
nameserver 8.8.8.8
nameserver 4.4.4.4

5.重启docker服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

AI创作声明

本文部分内容由 AI 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。

相关推荐
Java陈序员2 小时前
一键部署!一款开源自托管的照片画廊神器!
vue.js·docker
Better Bench2 小时前
ubuntu 不同系统架构(aarch64\arm64\x86_64)安装miniconda以及配置pip镜像
linux·ubuntu·pip
Empty_7772 小时前
K8S-Pod驱逐
云原生·容器·kubernetes
代码游侠2 小时前
学习笔记——进程
linux·运维·笔记·学习·算法
北慕阳2 小时前
背诵-----------------------------
java·服务器·前端
Risk Actuary2 小时前
磁道优化分布的一道题
linux·运维·服务器
云计算小黄同学2 小时前
【最详细】Kubernetes探针介绍、应用与最佳实践
运维·云原生·容器·kubernetes
一周困⁸天.2 小时前
K8S-特殊容器
云原生·容器·kubernetes
亚控科技2 小时前
亚控KingWater+DeepSeek让湖南常德水厂“智”变升级
运维·智慧水务·kingscada·亚控科技