Docker快速入门(Windows+Python)

"使应用环境的配置、发布、测试更为容易"

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

附链接:

Docker官网

安装后绑定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同时管理多个容器

待更新

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。 Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。 一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。 环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。 云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。 虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速 LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。 VM技术和容器技术对比 VM技术和容器技术对比 面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。
以下是基于 Ubuntu 20.04 操作系统的 nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署步骤: 1. 首先安装必要的软件和依赖: ``` sudo apt-get update sudo apt-get install -y git python3-pip python3-dev python3-venv build-essential libssl-dev libffi-dev nginx docker.io docker-compose mysql-server ``` 2. 创建并激活 Python 虚拟环境: ``` python3 -m venv myprojectenv source myprojectenv/bin/activate ``` 3. 安装 Django 和 uWSGI: ``` pip install django==4.0 uwsgi ``` 4. 创建 Django 项目: ``` django-admin startproject myproject cd myproject ``` 5. 配置 Django 数据库设置: 打开 `myproject/settings.py` 文件,在 `DATABASES` 中添加以下内容: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myprojectdb', 'USER': 'myprojectuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 6. 创建 MySQL 数据库和用户: 登录 MySQL: ``` sudo mysql ``` 创建数据库: ``` CREATE DATABASE myprojectdb CHARACTER SET UTF8; ``` 创建用户: ``` CREATE USER 'myprojectuser'@'localhost' IDENTIFIED BY 'mypassword'; ``` 授权用户访问数据库: ``` GRANT ALL PRIVILEGES ON myprojectdb.* TO 'myprojectuser'@'localhost'; ``` 刷新权限: ``` FLUSH PRIVILEGES; ``` 退出 MySQL: ``` exit ``` 7. 测试 Django 项目是否能够正常运行: ``` python manage.py runserver ``` 在浏览器中访问 `http://localhost:8000`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功搭建。 8. 配置 uWSGI: 创建 `myproject/uwsgi.ini` 文件,添加以下内容: ``` [uwsgi] socket = :8001 chdir = /path/to/myproject module = myproject.wsgi:application master = true pidfile = /tmp/myproject-master.pid processes = 4 threads = 2 vacuum = true max-requests = 1000 harakiri = 60 ``` 9. 启动 uWSGI: ``` uwsgi --ini myproject/uwsgi.ini ``` 10. 配置 nginx: 创建 `/etc/nginx/sites-available/myproject` 文件,添加以下内容: ``` server { listen 80; server_name myproject.com; access_log /var/log/nginx/myproject.access.log; error_log /var/log/nginx/myproject.error.log; client_max_body_size 20M; location /static/ { alias /path/to/myproject/static/; } location /media/ { alias /path/to/myproject/media/; } location / { uwsgi_pass 127.0.0.1:8001; include /etc/nginx/uwsgi_params; } } ``` 11. 创建软链接: ``` sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ ``` 12. 测试 nginx 配置是否正确: ``` sudo nginx -t ``` 如果没有错误,重启 nginx: ``` sudo systemctl restart nginx ``` 13. 创建 Dockerfile: 在 Django 项目根目录下创建 `Dockerfile` 文件,添加以下内容: ``` FROM python:3.9 RUN apt-get update \ && apt-get install -y nginx \ && rm -rf /var/lib/apt/lists/* RUN pip install uwsgi COPY ./requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt COPY . /app WORKDIR /app RUN python manage.py collectstatic --noinput COPY ./myproject-nginx.conf /etc/nginx/sites-available/myproject RUN ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ RUN rm /etc/nginx/sites-enabled/default EXPOSE 80 CMD service nginx start && uwsgi --ini /app/uwsgi.ini ``` 14. 创建 docker-compose.yml 文件: 在 Django 项目根目录下创建 `docker-compose.yml` 文件,添加以下内容: ``` version: '3' services: web: build: . ports: - "80:80" depends_on: - db volumes: - ./static:/app/static - ./media:/app/media environment: - DB_HOST=db - DB_NAME=myprojectdb - DB_USER=myprojectuser - DB_PASSWORD=mypassword db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=myprojectdb - MYSQL_USER=myprojectuser - MYSQL_PASSWORD=mypassword volumes: db_data: ``` 15. 构建和运行 Docker 容器: ``` sudo docker-compose up --build ``` 16. 测试 Django 项目是否能够正常运行: 在浏览器中访问 `http://localhost`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功部署到 Docker 容器中。 至此,nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值