Linux开发之巧用虚拟环境:Conda与Docker的巧妙使用

[复制链接]
查看736 | 回复8 | 2023-9-22 15:25:31 | 显示全部楼层 |阅读模式
一、引言

在Linux开发中,虚拟环境可以提供一种隔离、安全、高效的开发环境,使得不同项目之间的环境干扰最小化。本文将探讨两种流行的虚拟环境管理工具:Conda和Docker,包括它们的优点、使用场景、以及如何解决可能出现的问题。


二、 Conda的使用
2.1 Conda的安装

在安装Conda之前,我们需要确认Python已经安装。因为Conda是以Python为基础的,如果没有安装Python,就无法安装Conda。安装Conda的最简单方法是使用Anaconda的安装脚本。

  1. 在以下网址下载安装文件:
  2. https://www.anaconda.com/
复制代码
然后在保存的路径中进行操作
  1. bash Anaconda3-2023.0.0-Linux-x86_64.sh
复制代码
分别会遇到几个确认和一个阅读说明,遇到确认输入y或者回车即可,遇到阅读说明输入q即可跳过。

安装完成后,就可以使用Conda命令来创建和管理虚拟环境。

2.2 Conda创建、切换、查找和删除虚拟环境
Conda可以创建新的虚拟环境,切换不同的虚拟环境,查找已安装的包,以及删除不再需要的虚拟环境。以下是如何使用这些命令的详细步骤:
    2.2.1 创建新的虚拟环境:
使用以下命令创建一个名为myenv的新虚拟环境,并安装Python和pip:
  1. conda create --name myenv python pip
复制代码
2.2.2 切换到已存在的虚拟环境
使用以下命令可以切换到已经存在的虚拟环境myenv:
  1. conda activate myenv
复制代码
2.2.3 查找已安装的包
如果你想查看已安装的包及其版本,可以使用以下命令:
  1. conda list
复制代码
2.2.4 删除不再需要的虚拟环境
如果你想删除不再需要的虚拟环境,可以使用以下命令:
  1. conda deactivate myenv
复制代码
2.2.5 遇到错误如何处理
如果在创建或使用虚拟环境时遇到错误,可以尝试以下方法:
    确认网络连接:因为Conda需要从远程服务器下载包和环境,所以需要保证网络连接的稳定性。
    更新conda:如果使用的是旧版本的conda,可能会出现一些问题。尝试更新conda到最新版可以解决问题:
  1. conda update conda
复制代码
查看conda的日志:Conda在安装或更新过程中出现错误时,通常会在日志中记录详细的错误信息。你可以查找这些信息来诊断问题。默认的日志文件通常位于~/.condarc目录下。
三、Docker的使用
3.1 Docker的安装与基本概念
Docker是一种开源的应用容器引擎,允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何流行的Linux机器上。Docker使用了Linux内核的一些特性,如cgroups和namespaces,来提供一种轻量级的隔离机制。它也支持使用容器来运行应用。一个Docker容器包含了运行应用所需的所有资源和环境,这使得在不同机器上运行同一份容器具有一致性。以下是如何安装Docker以及一些基本概念:
3.1.1 Docker的安装
Docker的安装可以通过以下命令完成: 以下命令来安装Docker:

安装Docker
    配置apt仓库
  1. sudo apt-get update
  2. sudo apt-get install ca-certificates curl gnupg lsb-release
  3. sudo mkdir -p /etc/apt/keyrings
  4. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  5. echo \
  6.   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  7.   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制代码
   安装最新版本Docker
  1. sudo apt-get update
  2. sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
复制代码

完成后,可以用以下命令来启动并设置为开机启动:
  1. sudo systemctl start docker sudo systemctl enable docker
复制代码

3.1.2 基本概念 Docker有几个基本概念需要理解:
  • - 镜像(Image):它是一个只读模板,用来创建Docker容器。
  • - 容器(Container):它是基于镜像运行的一个实例。
  • - Dockerfile:它是一个文本文件,用来定义如何构建Docker镜像。
3.1.3 容器与镜像的关系:
  • 容器是从镜像创建的实例。
  • 一个镜像可以创建多个容器实例。
  • 每个容器实例都是相互隔离的运行环境,包含了运行特定应用所需的所有资源和配置。
3.1.4 Dockerfile:
  • Dockerfile是一个文本文件,包含了定义如何构建Docker镜像的指令。
  • 每一条指令都会在构建过程中执行,最终生成一个Docker镜像。
3.1.5 Docker镜像的构建与运行
构建Docker镜像首先需要一个Dockerfile。
通过在Dockerfile所在的目录运行以下命令来构建镜像:
  1. shell docker build -t <image-name> .
复制代码
然后可以用以下命令来运行一个容器实例:
  1. shell docker run -it <image-name> /bin/bash
复制代码
这将运行一个交互式的bash shell在容器中。

3.2 Docker与Conda的比较
Docker和Conda是两种不同的虚拟环境管理工具,各具有优点和适用场景。Docker主要用于容器化应用,提供了一种轻量级、可移植的部署方式,而Conda则主要用于包管理和环境管理,提供了方便的包安装、切换和删除等功能。
3.3 Docker的优点
  •     轻量级:Docker容器比虚拟机更轻量,启动更快,资源占用更少。
  •     可移植性:Docker容器可以在任何支持Docker的机器上运行,无需考虑底层操作系统和硬件环境。
  •     自动化部署:通过Dockerfile,可以自动化构建、部署应用,减少人工操作和出错的可能性。
3.4 Docker的使用场景
  •     应用部署:Docker可以简化应用的部署过程,通过容器化应用,可以快速部署到任何支持Docker的机器上。
  •     多环境一致性:对于需要在不同环境(开发、测试、生产)中运行的应用,Docker可以提供一致的运行环境。
  •     集成和定制:通过Dockerfile,可以灵活地定制和集成应用及其依赖项。
3.5 Docker国内源的推荐与添加
对于在中国大陆地区的用户,如果需要使用Docker镜像,可以考虑使用国内的源。以下是两个常用的国内源:
    3.5.1 阿里云:
阿里云提供了Docker镜像的国内源,需要前往阿里云的docker加速或者自己的api码,添加到本地配置文件中 /etc/docker/daemon.json:
  1. {
  2.     "registry-mirrors": ["<your accelerate address>"]
  3. }
复制代码
然后重启docker即可。这将把阿里的pause镜像作为基础镜像。之后可以运行Docker容器来使用这个镜像。
3.5.2 DaoCloud:
DaoCloud也提供了Docker镜像的服务,可以通过以下命令添加:
  1. docker pull daocloud.io/library/pause  
  2. docker tag daocloud.io/library/pause pause:latest
复制代码
之后同样可以运行Docker容器来使用这个镜像。
安装完毕可以使用以下代码进行测试:
  1. sudo docker run hello-world
复制代码
如果显示以下信息,则表示安装成功:

  1. Unable to find image 'hello-world:latest' locally
  2. latest: Pulling from library/hello-world
  3. 2db29710123e: Pull complete
  4. Digest: sha256:94ebc7edf3401f299cd3376a1669bc0a49aef92d6d2669005f9bc5ef028dc333
  5. Status: Downloaded newer image for hello-world:latest

  6. Hello from Docker!
  7. This message shows that your installation appears to be working correctly.

  8. To generate this message, Docker took the following steps:
  9. 1. The Docker client contacted the Docker daemon.
  10. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  11.     (amd64)
  12. 3. The Docker daemon created a new container from that image which runs the
  13.     executable that produces the output you are currently reading.
  14. 4. The Docker daemon streamed that output to the Docker client, which sent it
  15.     to your terminal.

  16. To try something more ambitious, you can run an Ubuntu container with:
  17. $ docker run -it ubuntu bash

  18. Share images, automate workflows, and more with a free Docker ID:
  19. https://hub.docker.com/

  20. For more examples and ideas, visit:
  21. https://docs.docker.com/get-started/
复制代码
3.6 Docker遇到问题如何解决?
如果在使用Docker时遇到问题,可以尝试以下方法:
  •     查看Docker日志:Docker的日志通常会记录错误的详细信息,通过查看日志可以找到问题的原因。默认情况下,Docker日志位于/var/log/docker.log或/var/log/docker/daemon.log。
  •     检查Docker网络设置:如果Docker容器无法访问网络,可能需要进行网络设置检查。可以尝试在宿主机上ping一下容器内的IP地址,看是否可以访问。
  •     重新构建或重启Docker:有时候重新构建或重启Docker服务可以解决一些问题。可以使用以下命令来重新构建所有Docker镜像:
  • shell sudo docker-compose build 或者重启Docker服务: shell sudo systemctl restart docker 4. 查找和阅读文档和社区资源:Docker有非常丰富的文档和活跃的社区资源,如果遇到问题,可以在官方文档或者社区中查找解决方案。 ### 总结 本文探讨了在Linux开发中巧用虚拟环境的重要性以及如何使用Conda和Docker这两个工具管理虚拟环境。通过使用Conda和Docker,我们可以创建隔离的开发环境,避免不同项目之间的环境干扰,提高开发效率。同时,这两个工具也可以解决包依赖、版本控制等问题。在使用过程中,如果遇到问题,可以通过查看日志、重新构建或重启服务、查找文档和社区资源等方式来解决。总之,通过合理地使用Conda和Docker,可以帮助我们更高效地进行Linux开发。


回复

使用道具 举报

CHENQIGUANG1998 | 2023-9-22 15:27:55 | 显示全部楼层
sofa
回复

使用道具 举报

CHENQIGUANG1998 | 2023-9-22 15:44:03 | 显示全部楼层
sofa
回复

使用道具 举报

496199544 | 2023-9-22 17:56:37 | 显示全部楼层
学习
回复

使用道具 举报

1351055318 | 2023-9-22 17:59:23 | 显示全部楼层
之前做区块链的时候用过
回复 支持 反对

使用道具 举报

jkernet | 2023-9-22 19:40:07 来自手机 | 显示全部楼层
学习
回复

使用道具 举报

WangChong | 2023-9-22 22:31:31 | 显示全部楼层
这个东西也类似py的虚拟环境
回复 支持 反对

使用道具 举报

LV36 | 2023-9-23 15:39:11 | 显示全部楼层
mark
回复

使用道具 举报

san | 2024-1-11 14:38:25 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则