Docker 安装部署

我是那种需要什么学什么的,更偏向应用,因此可能不够全面 见谅

一、Doker简介

我们在Github下载一个包并在本地部署运行时,往往会出现很多因为自身环境和作者环境不同因此不兼容的问题。

为了应对环境的配置和部署问题,doker引入了容器这一概念

Docker 概述

Docker 是一个开放源代码的平台,旨在简化应用程序的开发、交付和运行。它使用容器技术来解决软件部署过程中的环境依赖问题。容器将应用程序和所有依赖(包括代码、库、配置文件等)封装在一起,使其能够在任何环境中一致地运行。Docker 可以看作是容器化的代表,它帮助开发者解决了因环境差异(如操作系统、硬件架构)引起的兼容性问题。

Docker 的历史

Docker 的诞生可以追溯到 2013 年。当时,Docker 由 Solomon Hykes 和他在 dotCloud 的团队开发。最初,它并不是为了容器化而设计,而是为了解决开发人员和运维人员在跨平台部署过程中遇到的挑战。Docker 将操作系统虚拟化与应用容器技术结合,给开发者带来了轻量级、快速和可移植的解决方案。

在 Docker 发布后,它迅速吸引了开发者和 DevOps 社区的关注。通过简单的命令和高效的容器化方式,Docker 将“构建一次,运行到处”的理念带入了实践,推动了云计算和微服务架构的普及。Docker 的容器化技术大大降低了软件在不同环境间迁移的复杂性,促进了持续集成(CI)和持续交付(CD)等 DevOps 实践的应用。

Docker 底层原理

Docker 的底层原理依赖于 Linux 容器(LXC)和操作系统的虚拟化技术。Docker 本质上是一个轻量级的虚拟化工具,它与传统的虚拟机不同,虚拟机需要模拟整个操作系统,而 Docker 容器只模拟应用程序所需的环境,减少了资源的消耗。

  1. Linux 内核的支持:Docker 的容器化技术依赖于 Linux 内核的几个特性:

    • Namespace:通过使用命名空间,Docker 可以将容器中的进程与主机操作系统及其他容器隔离开来,使得每个容器看起来像是一个独立的系统。
    • Cgroups:控制组(Cgroups)用于限制和隔离容器的资源使用(如 CPU、内存、磁盘 IO),确保容器间互不干扰。
    • Union File System(UnionFS):Docker 使用 UnionFS(如 AUFS、OverlayFS)来创建镜像文件系统,它允许多个文件系统层叠叠加,提高存储效率。
  2. Docker 引擎:Docker 引擎是 Docker 的核心组件,它包含了客户端和服务器两部分。客户端负责与用户交互,而服务器则负责容器的创建、管理和运行。Docker 引擎通过 API 向用户提供服务,并在后台运行容器和镜像操作。

  3. 镜像和容器

    • 镜像:镜像是容器的“模板”,包含了容器运行所需的所有文件和依赖。镜像是只读的,容器从镜像启动时,会生成一个可写的层(Layer),并将容器的变更保存到该层。
    • 容器:容器是从镜像创建出来的实例,是一个轻量级的、隔离的运行环境。容器在一个独立的文件系统上运行,与其他容器和宿主机系统相互隔离,但它们共享宿主机的内核。

容器的概念

容器是 Docker 最核心的概念。它是一种轻量级的虚拟化技术,使得应用程序及其所有依赖能够在独立的环境中运行。容器是与操作系统内核共享资源的,但是容器内部有独立的文件系统、网络和进程空间,确保不同容器之间互不干扰。

  1. 隔离性:容器内的应用程序与宿主机和其他容器之间是隔离的。每个容器有独立的文件系统、网络配置、进程空间等,从而避免了应用之间的冲突。

  2. 轻量级:与虚拟机不同,容器不需要模拟整个操作系统,而是共享宿主机的操作系统内核,这使得容器启动非常快速,资源消耗也更低。

  3. 可移植性:容器中包含了应用程序及其所有依赖,确保应用可以在任何支持 Docker 的环境中运行,从开发环境到测试环境,再到生产环境都没有问题。

  4. 可扩展性:Docker 容器非常适合微服务架构,因为每个容器可以运行一个单独的服务,并且容器之间可以通过网络进行通信。Docker 提供了容器编排工具(如 Docker Compose 和 Kubernetes)来管理和扩展容器应用。

Docker 的应用场景

  1. 开发与测试:开发者可以在 Docker 容器中创建与生产环境一致的开发和测试环境,确保代码在不同的环境下运行一致。

  2. 微服务架构:容器非常适合微服务架构,因为它们提供了应用服务的独立性和灵活性。每个微服务可以作为一个容器运行,方便管理和扩展。

  3. 持续集成与持续交付(CI/CD):Docker 提供了一种自动化构建、测试、部署和运行容器化应用的方式。与 CI/CD 工具(如 Jenkins、GitLab)结合使用,Docker 能够加速软件的交付周期。

  4. 多云与跨平台部署:Docker 容器可以在不同的操作系统上运行,只要安装了 Docker 引擎,就可以保证应用的兼容性和移植性。

Docker 提供了一个轻量级的、隔离的、可移植的运行环境,通过容器技术大大简化了应用程序的部署、管理和扩展。它不仅解决了因环境差异导致的软件兼容性问题,还推动了 DevOps、微服务等现代软件开发和运维实践的普及。通过 Docker,开发者能够构建跨平台、快速部署的应用,提升开发效率和应用的可维护性。

 推荐相关内容

https://yeasy.gitbook.io/docker_practice

https://zhuanlan.zhihu.com/p/3993802905

Docker 10分钟快速入门_哔哩哔哩_bilibili

02.Docker简介_哔哩哔哩_bilibili

容器的通俗讲解,为什么它是现代软件开发的必备利器_容器技术-优快云博客

二、部署和应用

一、安装Docker

链接:Docker Docs

安装步骤省略

下载后进入Docker界面 其中:

Containers-容器、Images- 镜像、Build-构建

二、创建

1.创建一个python容器

使用Vscode下载(需要配置Vscode、Git)

Containerize your app | Docker Docs

可以使用Docker官方的示例项目

 git clone https://github.com/estebanx64/python-docker-example

2.下载Docker的python环境,配置Docker文件

Docker拥有非常多的容器环境,你也可以通过个人需求进行配置

3.配置Docker的python解释器 
# python:配置成需要的版本
docker pull python:3.11.10-slim-bullseye
4.创建Dockerfile文件

需要注意的是,官方的requirements文件并没有配置uvicron因此需要添加

requirements.txt

fastapi==0.111.0
uvicorn


# 使用官方 Python 镜像  
FROM python:3.11-slim-bullseye
# 设置工作目录  
WORKDIR /app  
# 复制 requirements.txt 并安装依赖  
COPY requirements.txt .  
# 安装依赖  
RUN pip install --no-cache-dir -r requirements.txt  
# 复制项目代码  
COPY . .  
# 端口号
EXPOSE 5000
# 启动 Uvicorn 服务器  
CMD python3 -m uvicorn app:app --host=0.0.0.0 --port=5000

5.配置Docker执行项
# -t tag 标签
# my-finance 项目名称
# . 当前目录下
docker build -t my-finance .
# 查看镜像
docker images

6.运行实例

 docker compose up --build -d

然后在网页输入localhost:5000就可以访问了

三、推送到 Docker Hub

https://hub.docker.com/

Quickstart | Docker Docs

Docker Hub 是一个云端的容器镜像仓库,提供了存储和共享镜像的功能。当你完成了 Docker 镜像的创建并希望将其共享或部署到其他机器时,可以将镜像推送到 Docker Hub。

以下是将镜像推送到 Docker Hub 的步骤:

1. 创建 Docker Hub 账户

如果你还没有 Docker Hub 账户,首先需要注册一个 Docker Hub 账户。创建账号后,你将获得一个用于推送镜像的用户名和密码。

2. 登录 Docker Hub

在推送镜像之前,你需要登录到 Docker Hub。打开终端(命令行界面),使用以下命令进行登录:

docker login

系统会提示你输入 Docker Hub 的用户名和密码。成功登录后,你就可以推送镜像了。

3. 为镜像打标签

推送镜像到 Docker Hub 之前,需要为镜像打上标签(Tag)。标签格式为 <用户名>/<镜像名>:<标签>,其中 <用户名> 是你在 Docker Hub 上的用户名,<镜像名> 是镜像的名称,<标签> 可以是版本号(如 latest 或具体版本号)。例如,假设你的 Docker Hub 用户名是 admin,镜像名称是 my-finance,你可以用以下命令为镜像打标签:

docker tag my-finance admin/my-finance:latest

这里,admin/my-finance:latest 是推送到 Docker Hub 后镜像的名称和标签。

4. 推送镜像到 Docker Hub

使用以下命令将镜像推送到 Docker Hub:

docker push admin/my-finance:latest

在执行这个命令时,Docker 会将本地的 my-finance 镜像上传到 Docker Hub。如果镜像较大,上传过程可能会需要一些时间。

5. 验证推送成功

推送完成后,你可以登录到 Docker Hub,在你的账户页面找到刚才推送的镜像。你可以在该页面查看镜像的详细信息、版本以及拉取命令等。

# 注:将admin改成自己的docker用户名

关于docker容器的拉取

如果希望获取某个docker容器,可以使用拉取命令+项目地址

docker pull toke648/my-finance

三、Docker常用命令

# 镜像管理(Images)
docker images  # 查看本地镜像
docker image ls  # 查看本地镜像(另一种方式)

docker pull <image-name>  # 拉取镜像
docker pull node:18.20-slim  # 示例:拉取 Node.js 18.20-slim 镜像

docker rmi <image-id>  # 删除指定镜像
docker rmi $(docker images -q)  # 删除所有未被使用的镜像

docker build -t <image-name> <path-to-dockerfile>  # 构建镜像
docker build -t hello-docker .  # 示例:构建镜像

docker inspect <image-id>  # 查看镜像详情

# 容器管理(Containers)
docker ps  # 查看当前运行的容器
docker ps -a  # 查看所有容器(包括停止的容器)

docker run <options> <image-name>  # 启动容器
docker run -d -p 3000:3000 hello-docker  # 示例:后台运行并映射端口

docker run -it <image-name> /bin/bash  # 运行交互式容器,进入容器内部

docker stop <container-id>  # 停止运行中的容器
docker start <container-id>  # 启动已停止的容器
docker restart <container-id>  # 重启容器

docker logs <container-id>  # 查看容器的日志

docker rm <container-id>  # 删除停止的容器
docker rm $(docker ps -a -q)  # 删除所有容器

docker exec -it <container-id> /bin/bash  # 进入容器

# 容器和镜像清理
docker system prune  # 清理所有未使用的容器、镜像和网络
docker container prune  # 删除所有停止的容器
docker image prune  # 删除所有未使用的镜像
docker network prune  # 删除所有未使用的网络
docker volume prune  # 删除所有未使用的卷

# 网络管理(Networks)
docker network ls  # 查看网络
docker network create <network-name>  # 创建网络
docker network connect <network-name> <container-id>  # 连接容器到指定网络
docker network disconnect <network-name> <container-id>  # 断开容器和网络的连接
docker inspect <container-id>  # 查看容器连接的网络

# 卷管理(Volumes)
docker volume ls  # 查看卷
docker volume create <volume-name>  # 创建卷
docker volume inspect <volume-name>  # 查看卷详情
docker volume rm <volume-name>  # 删除卷

# Docker Compose(多个容器管理)
docker-compose up  # 启动服务
docker-compose up -d  # 后台启动服务
docker-compose down  # 停止服务
docker-compose logs  # 查看服务日志
docker-compose up --build  # 重新构建服务
docker-compose ps  # 查看当前运行的服务

# Docker 镜像和容器管理常用命令
docker stats <container-id>  # 查看容器的资源使用情况(CPU、内存等)
docker cp <container-id>:/path/to/file /local/path  # 查看容器内的文件
docker inspect <image-id>  # 获取镜像信息
docker exec -it <container-id> ls /path/to/directory  # 查看容器内部文件

# 其他有用的命令
systemctl status docker  # 检查 Docker 服务的状态
docker --version  # 查看 Docker 版本
docker --help  # 获取 Docker 帮助信息

Acknowledgement

https://yeasy.gitbook.io/docker_practice

https://zhuanlan.zhihu.com/p/3993802905

Docker 10分钟快速入门_哔哩哔哩_bilibili

阿里云+frp内网穿透&工作站远程开机_阿里云 frp-优快云博客

02.Docker简介_哔哩哔哩_bilibili

容器的通俗讲解,为什么它是现代软件开发的必备利器_容器技术-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值