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 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。

相关推荐
sunz_dragon8 分钟前
Claude Code / Codex Git 版本管理完整使用指南
服务器·人工智能
领尚10 分钟前
openclaw 极简安装(Ubuntu 24.04 server)
linux·运维·ubuntu
Gofarlic_OMS24 分钟前
Windchill的license合规使用报告自动化生成与审计追踪系统
大数据·运维·人工智能·云原生·自动化·云计算
迷途之人不知返28 分钟前
shell相关知识与Linux权限
linux
SPC的存折32 分钟前
3、主从复制实现同步数据过滤
linux·运维·服务器
SPC的存折34 分钟前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
xcbrand36 分钟前
文旅行业品牌策划公司找哪家
大数据·运维·人工智能·python
SPC的存折1 小时前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
风吹迎面入袖凉1 小时前
【Redis】Redisson分布式锁原理
java·服务器·开发语言
cyber_两只龙宝1 小时前
【Oracle】Oracle之DQL中WHERE限制条件查询
linux·运维·数据库·云原生·oracle