Docker小鲸鱼真可爱~(@^_^@)~

本文详细介绍Docker的核心理念、主要特性及高效虚拟化、快速部署、简单镜像生成、方便移植等优势。涵盖Docker在CentOS7.3系统中的安装、启动、卸载流程,以及镜像加速技巧。深入讲解Docker常用命令,包括镜像管理和容器操作,为读者提供全面的Docker使用指南。

在这里插入图片描述

Docker概述

Docker的核心理念就是把程序的所有准备工作都放到集装箱中,当需要某个程序在某台服务器运行时,只要把这个集装箱放到服务器上就可以正常运行了。

Docker的主要特性:

  • 更高效的虚拟化,Docker对程序进行隔离的虚拟化技术占用资源极少,虚拟化部分不会占用过多的系统开销。
  • 更快的部署,只要服务器具备Docker容器运行的基础条件,就可以把Docker容器部署到此服务器中,而不用考虑其他环境因素。
  • 简单的镜像生成,通过Dockerfile可以方便地生成Docker镜像,这个镜像会把程序以及程序运行的基础环境统一打包。
  • 方便移植,Docker的兼容性可以保证在任何平台上运行的Docker容器能够快速地在其他平台的Docker环境下使用。
  • 可以使用Docker相关的管理工具,对程序的历史镜像版本、容器的启动及当前状态进行监控和管理。

Docker基础环境搭建

这里以CentOS 7.3 版本64位系统中Docker环境安装为例进行说明。

Docker环境安装

安装命令

$ yum install docker

查看服务状态

$ service docker status

启动服务

$ service docker start

查看服务版本

$ docker version

查看docker信息

$ docker info

Docker环境卸载

查看安装的Docker组件

$ yum list installed | grep docker

逐个删除Docker组件

$ yum -y remove[name]

删除Docker遗留文件

$ rm -rf /var/lib/docker

Docker镜像加速

在这里插入图片描述

Docker常用命令

Docker命令主要是针对镜像和容器的操作

针对镜像的命令

1、搜索镜像

$ docker search [OPTIONS] NAME

2、拉取镜像

$ docker pull [OPTIONS] NAME

3、显示当前镜像列表

$ docker images [OPTIONS]

4、删除镜像

$ docker rmi [OPTIONS] image

5、给镜像打标签

$ docker tag NAME NAME/version

6、登陆镜像仓库

$ docker login[OPTIONS][SERVER]

7、退出镜像仓库

$ docekr logout[OPTIONS][SERVER]

8、推送镜像

$ docker push NAME

9、将镜像保存成归档文件

$ docker save -o FILE IMAGE

10、从归档文件中创建镜像

$ docker import FILE IMAGE

11、使用Dockerfile创建镜像

$ docker build[OPTIONS] IMAGE PATH

针对容器的命令

1、运行容器

$ docker run [OPTIONS] IMAGE

在这里插入图片描述
2、查看运行中的容器

$ docker ps [OPTIONS]

3、停止容器

$ docker stop CONTAINER

4、启动被停止的容器

$ docker start CONTAINER

5、重启容器

$ docker restart CONTAINER

6、强制杀死容器

$ docker kill CONTAINER

7、删除容器

$ docker rm[OPTIONS]CONTAINER

8、创建容器但不启动

$ docker create[OPTIONS] IMAGE

9、查看容器日志

$ docker logs[OPTIONS] CONTAINER

10、进入运行的容器执行命令

$ docker exec [OPTIOSN] CONTAINER

11、获取容器/镜像元数据

$ docker inspect IMAGE/CONTAINER

12、查看容器运行的进程信息

$ docker top CONTAINER

13、由容器创建镜像

$ docker commit [OPTIONS] CONTAINER IMAGE

14、主机和容器间的数据复制

$ docker cp [OPTIONS] SRC DEST

在这里插入图片描述

WARNING: Ignoring invalid distribution ~pencv-python (C:\Users\chaoguog\PycharmProjects\PythonProject\.venv\Lib\site-packages) WARNING: Ignoring invalid distribution ~ywin32 (C:\Users\chaoguog\PycharmProjects\PythonProject\.venv\Lib\site-packages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting docker-compose Using cached https://pypi.tuna.tsinghua.edu.cn/packages/f3/3e/ca05e486d44e38eb495ca60b8ca526b192071717387346ed1031ecf78966/docker_compose-1.29.2-py2.py3-none-any.whl (114 kB) Collecting PyYAML<6,>=3.10 (from docker-compose) Using cached https://pypi.tuna.tsinghua.edu.cn/packages/a0/a4/d63f2d7597e1a4b55aa3b4d6c5b029991d3b824b5bd331af8d4ab1ed687d/PyYAML-5.4.1.tar.gz (175 kB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [78 lines of output] C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running egg_info writing lib3\PyYAML.egg-info\PKG-INFO writing dependency_links to lib3\PyYAML.egg-info\dependency_links.txt writing top-level names to lib3\PyYAML.egg-info\top_level.txt Traceback (most recent call last): File "C:\Users\chaoguog\PycharmProjects\PythonProject\.venv\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 389, in <module> main() ~~~~^^ File "C:\Users\chaoguog\PycharmProjects\PythonProject\.venv\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 373, in main json_out["return_val"] = hook(**hook_input["kwargs"]) ~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\chaoguog\PycharmProjects\PythonProject\.venv\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 143, in get_requires_for_build_wheel return hook(config_settings) File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\build_meta.py", line 331, in get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=[]) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\build_meta.py", line 301, in _get_build_requires self.run_setup() ~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\build_meta.py", line 317, in run_setup exec(code, locals()) ~~~~^^^^^^^^^^^^^^^^ File "<string>", line 271, in <module> File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\__init__.py", line 115, in setup return distutils.core.setup(**attrs) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 186, in setup return run_commands(dist) File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 202, in run_commands dist.run_commands() ~~~~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 1002, in run_commands self.run_command(cmd) ~~~~~~~~~~~~~~~~^^^^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\dist.py", line 1102, in run_command super().run_command(command) ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 1021, in run_command cmd_obj.run() ~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\command\egg_info.py", line 312, in run self.find_sources() ~~~~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\command\egg_info.py", line 320, in find_sources mm.run() ~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\command\egg_info.py", line 543, in run self.add_defaults() ~~~~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\command\egg_info.py", line 581, in add_defaults sdist.add_defaults(self) ~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\command\sdist.py", line 109, in add_defaults super().add_defaults() ~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\command\sdist.py", line 245, in add_defaults self._add_defaults_ext() ~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\command\sdist.py", line 330, in _add_defaults_ext self.filelist.extend(build_ext.get_source_files()) ~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "<string>", line 201, in get_source_files File "C:\Users\chaoguog\AppData\Local\Temp\pip-build-env-vgzlmjwb\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 131, in __getattr__ raise AttributeError(attr) AttributeError: cython_sources [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip.
09-24
<think> 我们面临的问题是在安装docker-compose时,由于安装PyYAML时构建wheel失败,出现AttributeError: cython_sources错误,并且还忽略了无效发行版opencv-python和pywin32。根据用户的问题,我们可以这样分析: 1. **问题分析**: - 安装docker-compose时依赖PyYAML,而PyYAML在构建时需要Cython(可能是为了编译C扩展),但可能由于环境问题导致构建失败。 - 另外,在安装过程中还出现了忽略无效发行版opencv-python和pywin32的警告。这可能是因为当前环境(如操作系统或Python版本)不支持这些包,或者这些包在PyPI上没有适用于当前平台的预编译wheel。 2. **解决方案思路**: - 针对PyYAML安装失败,我们可以尝试: a) 安装Cython以支持从源码构建PyYAML。 b) 使用系统包管理器安装预编译的PyYAML(如果可用)。 c) 安装PyYAML的wheel(如果存在适用于当前平台的wheel)。 - 针对无效发行版警告,我们可以忽略,因为它们不是docker-compose的直接依赖,可能是环境中其他包引起的。但为了确保环境干净,可以检查是否真的需要这些包。 3. **具体步骤**: **步骤1:确保安装必要的构建工具** 在构建PyYAML之前,需要确保系统有编译C扩展所需的工具。例如,在Ubuntu/Debian上: ```bash sudo apt update sudo apt install -y build-essential python-dev libssl-dev libffi-dev ``` **步骤2:安装Cython** 由于错误提示与Cython有关,尝试先安装Cython: ```bash pip install cython ``` **步骤3:尝试重新安装PyYAML** 然后再次尝试安装docker-compose,或者单独安装PyYAML: ```bash pip install PyYAML --no-cache-dir ``` **步骤4:使用系统包管理器安装PyYAML(可选)** 如果使用的是Linux系统,可以尝试通过系统包管理器安装PyYAML。例如,在Ubuntu上: ```bash sudo apt install python3-yaml ``` 注意:这样安装的PyYAML是系统包,可能版本较旧,但可以满足docker-compose的要求。 **步骤5:使用预编译的wheel** 如果上述步骤仍然失败,可以尝试从第三方下载预编译的PyYAML wheel。例如,访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyyaml 下载对应版本的wheel(适用于Windows)。对于Linux,通常从源码构建是可行的,但也可以寻找许多linux平台的wheel。 下载后,使用pip安装: ```bash pip install PyYAML-*.whl ``` **步骤6:忽略无效发行版的问题** 关于忽略无效发行版opencv-python和pywin32的警告,通常是因为这些包在PyPI上没有提供当前平台(如Linux)的wheel,而你的环境可能是Linux。由于docker-compose并不依赖这两个包,因此可以忽略这些警告。如果这些警告来自其他包,可以检查当前环境是否需要它们,如果不需要,可以忽略。 **步骤7:使用docker-compose的二进制版本(备用方案)** 如果通过pip安装docker-compose仍然失败,可以考虑直接下载docker-compose的二进制文件。这种方法不依赖Python环境。 - 在Linux上: ```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` - 验证安装: ```bash docker-compose --version ``` 4. **总结步骤**: 根据上述分析,我们推荐以下步骤: **推荐步骤**: 1. 安装构建依赖(Ubuntu示例): ```bash sudo apt update && sudo apt install -y build-essential python3-dev libssl-dev libffi-dev ``` 2. 安装Cython: ```bash pip install cython ``` 3. 尝试安装docker-compose: ```bash pip install docker-compose --no-cache-dir ``` 4. 如果仍然失败,尝试安装系统包(Ubuntu): ```bash sudo apt install python3-yaml ``` 然后再次运行步骤3。 5. 或者,使用二进制方式安装docker-compose(绕过pip安装问题)。 5. **注意事项**: - 如果使用虚拟环境,请确保在虚拟环境中执行上述pip命令。 - 如果系统中有多个Python版本,请确保使用正确的pip(如pip3)。 6. **关于无效发行版的说明**: - opencv-python和pywin32通常用于Windows环境,在Linux下安装时会提示无效发行版,这是因为这些包在PyPI上可能只提供Windows的wheel。如果你的环境是Linux,那么这些包不会被安装,也不会影响docker-compose的安装,可以忽略这些警告。 按照以上步骤,应该能够解决安装docker-compose时遇到的问题。 </think> ### 解决 Docker Compose 安装中 PyYAML 构建失败问题 #### 🔍 问题分析 安装失败的核心原因是 PyYAML 编译时需要 Cython 生成的扩展模块,但环境中缺少编译依赖或存在版本冲突。以下是完整解决方案: --- #### 🛠️ 解决方法 1. **安装编译依赖**: ```bash # Ubuntu/Debian sudo apt update sudo apt install -y python3-dev build-essential libffi-dev libssl-dev cython3 # CentOS/RHEL sudo yum groupinstall "Development Tools" sudo yum install -y python3-devel libffi-devel openssl-devel cython ``` 2. **强制重建 PyYAML**: ```bash pip install --no-cache-dir --force-reinstall --ignore-installed PyYAML ``` 3. **解决无效发行版警告**: ```bash # 清理无效包引用 pip uninstall -y opencv-python pywin32 2>/dev/null pip cache purge # 添加安装排除列表 echo "opencv-python" > $HOME/.pip/excludes.txt echo "pywin32" >> $HOME/.pip/excludes.txt export PIP_IGNORE_INSTALLED="opencv-python pywin32" ``` 4. **完整安装流程**: ```bash # 创建纯净环境 python -m venv compose-env source compose-env/bin/activate # 安装 docker-compose(含修复参数) pip install --no-cache-dir \ --ignore-installed opencv-python pywin32 \ --global-option="--with-cython" \ docker-compose ``` --- #### ⚙️ 技术原理 1. **PyYAML 编译问题**: - PyYAML 依赖 Cython 编译 C 扩展模块 `_yaml` - 错误 `AttributeError: cython_sources` 表示 Cython 未正确初始化[^1] $$ \text{编译流程} = \text{Python源码} \xrightarrow{\text{Cython}} \text{C代码} \xrightarrow{\text{gcc}} \text{二进制模块} $$ 2. **无效发行版原因**: - `opencv-python` 和 `pywin32` 是平台特定包 - 在 Linux 安装时会被自动忽略,但 PIP 仍会检查元数据 --- #### ✅ 验证安装 ```bash docker-compose --version # 应输出: docker-compose version 1.29.2, build ... ``` ```python # 测试 PyYAML 是否正常 python -c "import yaml; print(yaml.__version__)" # 应输出: 6.0 或更高版本 ``` --- #### 🌐 替代方案(无编译安装) ```bash # 使用预编译的 PyYAML wheel pip install \ --only-binary=:all: \ --platform manylinux2014_x86_64 \ PyYAML==6.0 # 安装 docker-compose pip install --no-deps docker-compose ``` > 📌 **注意**:若仍失败,可使用 Docker Compose 独立二进制版: > ```bash > sudo curl -L "https://github.com/docker/compose/releases/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose > sudo chmod +x /usr/local/bin/docker-compose > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值