docker使用和部署深化学习

1.什么是docker

Docker 容器是一个轻量级、可移植、自给自足的软件环境,用于运行应用程序。

Docker 容器将应用程序及其所有依赖项(包括库、配置文件、系统工具等)封装在一个标准化的包中,使得应用能够在任何地方一致地运行。

容器是操作系统级别的虚拟化,不需要运行完整的操作系统,启动和运行更为高效。

镜像和容器的关系

镜像(Image):容器的静态模板,包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。

容器(Container):镜像的一个运行实例,具有自己的文件系统、进程、网络等,且是动态的。容器从镜像启动,并在运行时保持可变。

2.拉取镜像

2.1 列出当前镜像列表
docker images

可以看到已下载的镜像列表 ,其中 REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

2.2 拉取最新镜像

此处我们以拉取mysql 版本5.7 为例

docker pull mysql:5.7

但是因为墙的关系,上面这个命令是不行的,要加上国内镜像地址:

docker pull docker.1ms.run/mysql:5.7

拉取过程大概这样:

5.7: Pulling from mysql

20e4dcae4c69: Pulling fs layer

1c56c3d4ce74: Pulling fs layer

e9f03a1c24ce: Pull complete

68c3898c2015: Pull complete

6b95a940e7b6: Pull complete

90986bb8de6e: Pull complete

ae71319cb779: Pull complete

ffc89e9dfd88: Pull complete

43d05e938198: Pull complete

064b2d298fba: Pull complete

df9a4d85569b: Pull complete

Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb

Status: Downloaded newer image for docker.1ms.run/mysql:5.7

docker.1ms.run/mysql:5.7

3.容器使用以及常用命令

镜像下好了,我们现在来使用他

3.1 此处我们使用mysql镜像来创建一个容器
docker run -d -p 3309:3306 --name mysql_test docker.1ms.run/mysql:5.7 
  • -p 3309:3306 ,宿主机的3309端口 映射到容器里的3306接口,注意位置不能调乱
  • --name  指定容器的名字
  • docker.1ms.run/mysql:5.7 此处是镜像名和版本号
  • -d 后台以守护进程运行 

3.2 使用ubutu 创建一个容器
docker run -it ubuntu:22.04 /bin/bash

-it:通常组合使用,-i (--interactive) 保持 STDIN 打开,-t (--tty) 分配一个伪终端。

用于启动交互式容器(如进入容器内的 shell)

4 dockerfile 和 容器化部署

使用流程通常分为三步:

  • 编写 Dockerfile
  • 执行 docker build 命令构建镜像
  • 使用构建好的镜像运行容器
4.1 例如我们创建非常简单的python应用

1 根目录下 app.py

# app.py

from flask import Flask

app = Flask(__name__)


@app.route('/')

def hello_world():

   return 'Hello, Docker World!'


if __name__ == '__main__':

    app.run(host='0.0.0.0', port=5000)

2 在同一目录下,创建一个名为 Dockerfile 的文件(没有扩展名)

# 使用官方 Python 运行时作为父镜像(基础层)

FROM python:3.9-slim

# 设置工作目录在容器内

WORKDIR /app



# 将当前目录下的所有文件复制到容器的 /app 目录下

COPY . /app



# 安装 requirements.txt 中指定的任何需要的包

# 假设你有一个 requirements.txt 文件,里面写着 `flask==2.0.1`

RUN pip install --no-cache-dir -r requirements.txt



# 让容器监听 5000 端口

EXPOSE 5000



# 定义环境变量

ENV NAME World



# 在容器启动时运行 app.py

CMD ["python", "app.py"]

3 运行构建命令:

docker build -t my-python-app .

  • docker build: 构建命令。
  • -t my-python-app: -t  选项用于给新镜像指定一个名称和标签,格式是 name:tag。这里只给了名字 my-python-app,标签默认为 latest。
  • 不要忘了最后的这个点(.)非常重要!它指定了 “构建上下文”(build context) 的路径。Docker 守护进程会将这个目录下的所有文件(包括 Dockerfile)打包发送给 Docker 引擎来构建镜像。COPY . /app 命令中的 . 就是指这个上下文路径。

4 构建过程大概是这样子:

Sending build context to Docker daemon  4.096kB

Step 1/7 : FROM python:3.9-slim

3.9-slim: Pulling from library/python

...

Step 2/7 : WORKDIR /app

...

Step 3/7 : COPY . /app

...

Step 4/7 : RUN pip install --no-cache-dir -r requirements.txt

...

Step 5/7 : EXPOSE 5000

...

Step 6/7 : ENV NAME World

...

Step 7/7 : CMD ["python", "app.py"]

...

Successfully built 123abc456def # 构建成功的镜像ID

Successfully tagged my-python-app:latest # 成功打上标签

5 然后就是运行容器:

docker run -p 4000:5000 my-python-app

5 docker部署源码 和 普通部署有什么不一样的地方

特性

Docker部署 (容器化部署)

普通部署 (传统部署)

环境

与应用一起打包,高度一致性

与宿主机强耦合,易出现环境差异

隔离性

进程级别隔离,资源可控,互不影响

进程共享,可能争抢资源,互相冲突

部署单元

**镜像 (Image)**,包含应用及其所有依赖

应用代码 + 配置手册,依赖在目标服务器解决

部署过程

拉取镜像 -> 运行容器,秒级启动

安装依赖 -> 配置环境 -> 部署代码,流程漫长

一致性

极高(开发、测试、生产环境完全一致)

较低(“在我这儿是好的”经典问题)

资源占用

轻量(共享主机内核,仅包含应用所需)

厚重(完整的操作系统,资源开销大)

扩展与迁移

极简且标准(镜像随处运行)

复杂且易出错(需重新配置环境)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿John

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值