"使应用环境的配置、发布、测试更为容易"
docker软件的基本概念
docker软件用来解决什么问题?
任务需求:我有一项web应用(本地调试无问题),想分享给别人,或部署到远程云服务器,需要模拟完全相同的本地开发环境
常规方法1:需要在别人电脑上配置相同的软件(如数据库、web服务器、必要的插件、库等等)
存在问题:不一定能保证软件一定能正常运行
原因分析:操作系统不同?(linux每种发行版有区别)、等等
常规方法2:用虚拟机模拟完全相同的开发环境
存在问题:需要模拟硬件来运行整个操作系统→体积臃肿内存占用高,影响程序的性能
引入docker
在概念上与虚拟机非常相似,但轻量很多,无需模拟底层硬件,只会为每个应用提供完全隔离的运行环境,可以在单独的环境中配置不同的工具软件,不同环境之间互不影响,这个“环境”在docker中也被成为容器container
三个重要概念
镜像image
可以理解成虚拟机的快照snapshot,里面包含了要部署应用程序以及它所关联的所有库、软件。
相当于模板,可以通过这个模板来创建容器(最终项目运行是在容器中的),
容器Container
通过镜像,可以创建多个不同的容器Container,每个容器就像是一台台运行起来的虚拟机,里面运行了我的应用程序,每个容器都是独立运行的,相互不影响
基本命令有:启动、停止、删除等等
Dockerfile
相当于一个自动化脚本,用于创建前面所说的镜像(相当于虚拟机中安装操作系统和软件的过程)
仓库repository
存放镜像的地方,分为公有和私有→Docker Hub,阿里云(配置镜像加速)
docker软件的安装
windows和mac适用应用Docker Desktop
win 10以上可以用WSL2(windows下的linux子系统)来运行Docker
linux下可以按照包管理工具安装
vscode可以安装Docker扩展(好用)
docker软件的使用
以window11下打包Python为例
安装Docker Desktop
附链接:
安装后绑定Github账号+vscode安装Docker扩展
测试是否安装成功
win+r打开cmd,输入docker version查看docker版本,
出现如下客户端和服务器信息即可视为安装成功
输入docker run hello-world,验证docker desktop中hello-world镜像是否拉取成功
第一次尝试时会出现hello world镜像拉取过程
也可以在docker desktop的images中看到
使用Dockerfile在本地创建镜像
这里以简单的Test为例,下图是文件结构
首先使用pip install pipreqs安装pipreqs库,可以使用以下命令在cmd中来生成requirements.txt文件,其中包含了所需库的版本信息
pipreqs .
之后创建Dockerfile文件,添加如下信息
FROM命令是pull公共的基础库,以图方便
LABEL authors是作者信息
ADD于WORKDIR分别是添加文件到指定目录,以及指定目录为工作目录
RUN命令是创建镜像是需要执行的命令,这里是为了从requirements.txt安装所需库
CMD是执行上述的test.py文件
# 拉取基础镜像
FROM python:3.9-slim-buster
# 可加可不加
LABEL authors="xylitol"
# 将当前目录的所有文件添加到指定文件夹下(也可用COPY命令)
ADD . /code
# 将code文件夹设为工作目录
WORKDIR /code
# 镜像构建时需要执行的命令
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 运行
CMD ["python","test.py"]
之后使用docker build -t test .来利用dockerfile创建镜像,这里-t之后的test为创建好的镜像名称,第一次创建镜像会比较慢,之后会比较快
如果报错error: error during connect: this error may indicate that the docker daemon is not running: head "http://%2f%2f.%2fpipe%2fdocker_engine/_ping": open //./pipe/docker_engine: the system cannot find the file specified,可以尝试打开docker desktop软件再次尝试
这里也可以在docker desktop软件的images中看到我们创建的库
再之后,我们利用创建好的镜像来创建容器,可以使用
docker run -d --name=demo test
命令,从test镜像中创建名为demo的容器,-d代表避免输出,这里得到的一串序列号是所创建容器的序号
这里我们的容器就创建好了,可以使用
docker save -o demo.tar test
命令来打包镜像文件,这里为默认保存路径,讲test镜像中保存出名为demo的tar包,这就是装好环境的docker镜像
可以把这个镜像的tar包发给甲方,其他人使用
docker load -i demo.tar
命令来导入镜像,这里还看不到容器
运行这个镜像,输入镜像对应的ID,可以进入对应的容器,然后就可以再相应目录下运行代码了
docker run -it +ID
docker compose同时管理多个容器
待更新