模型部署 --- Docker 安装和使用教程
文章目录Docker安装参考资料docker的优点和为什么要用,在这就不说了,或多或少都了解一些,直接进入正题。Docker安装参考资料Docker教程:使用docker配置python开发环境
docker的优点和为什么要用,在这就不说了,或多或少都了解一些,直接进入正题。
0、基础概念
0.1 虚拟机 Virtual Machine
- 定义:
- 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
- 在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。
- 每个虚拟机都有独立的 CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
0.2 容器
- 定义:
- 将操作系统层虚拟化,是一个标准的软件单元
- 优点:
- 随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。
- 高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。
- 快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。
0.3 虚拟机、容器的区别与联系
- 虚拟机虽然可以隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如VMWare;
- 容器技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,类似「沙箱」;
- 运行空间,虚拟机一般要几 GB 到 几十 GB 的空间,而容器只需要 MB 级甚至 KB 级;
虚拟机 | 容器 | |
---|---|---|
运行速度 | . | 更加快 |
运行空间 | . | 更加轻量 |
稳定性 | 有牢固的边界 以防止应用程序突破它 |
一、Docker安装
D o c k e r 三 大 核 心 概 念 { 镜 像 I m a g e 镜 像 是 一 个 可 执 行 包 , 其 包 含 运 行 应 用 程 序 所 需 的 代 码 、 运 行 时 、 库 、 环 境 变 量 和 配 置 文 件 容 器 C o n t a i n e r 容 器 是 镜 像 的 运 行 时 实 例 仓 库 R e p o s i t o r y Docker 三大核心概念 \begin{cases} 镜像 \ Image \\ \qquad 镜像是一个可执行包,其包含运行应用程序所需的代码、运行时、库、环境变量和配置文件 \\ 容器 \ Container \\ \qquad 容器是镜像的运行时实例 \\ 仓库 \ Repository \end{cases} Docker三大核心概念⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧镜像 Image镜像是一个可执行包,其包含运行应用程序所需的代码、运行时、库、环境变量和配置文件容器 Container容器是镜像的运行时实例仓库 Repository
- Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎
- 为什么 Docker 启动快?
- 当我们请求 Docker 运行容器时,Docker 会在计算机上设置一个资源隔离的环境。
- 然后将打包的应用程序和关联的文件复制到 Namespace 内的文件系统中,此时环境的配置就完成了。
- 之后 Docker 会执行我们预先指定的命令,运行应用程序。
- 为什么 Docker 各个进程相互独立?
- Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。
1.1 在Ubuntu系统下安装
在Linux系统下安装需要确保Ubuntu的版本是64位,而且内核版本(uname -r )需大于3.10版
1. sudo apt-get update # 更新一些包
''' Ubuntu的软件仓库里,Docker叫docker.io,原因是已经有别的软件先占据了Docker这个名字'''
2. sudo apt-get install docker.io
''' 校验Docker服务的状态,确保Docker服务是启动的'''
3. service docker start
- ( 1 ) 安 装 d o c k e r 时 , 默 认 的 安 装 位 置 是 / v a r / l i b / d o c k e r (1) 安装docker时,默认的安装位置是/var/lib/docker (1)安装docker时,默认的安装位置是/var/lib/docker
查看文件的指令是:sudo ls /var/lib/docker/
- ( 2 ) 查 看 D o c k e r 是 否 安 装 成 功 (2) 查看Docker是否安装成功 (2)查看Docker是否安装成功
docker info
出现下面内容,表示安装成功。
Debug Mode: false
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 0
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-117-generic
Operating System: Ubuntu 16.04.6 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 7.648GiB
可能遇到的错误
报错提示1:
启动Docker的过程中提出如下错误
‘Failed to start docker.service: Interactive authentication required.
See system logs and ‘systemctl status docker.service’ for details.’
错误原因:权限不足
解决方案: sudo service docker start
1.2 在Centos系统下安装
前提:内核版本需要不小于3.10,不然docker起不来
uname -r 查看当前内核版本
- 方法一
yum install docker -y # 安装Docker服务,-y代表默认安装
service docker start
service docker stop
service docker restart
- 方法二
1.安装docker的依赖包
yum install -y yum-utils lvm2 device-mapper-persistent-data
2.配置docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
4.安装
yum -y install docker-ce-18.03.0.ce
5.重启docker
chkconfig docker on ### 开机启动
service docker start ###启动docker
1.2.1 Docker 加速器可以使安装Docker的镜像的速度更快
# 配置Docker加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
修改 /etc/docker/daemon.json文件,去掉结尾的逗号。
二、Docker 卸载
sudo apt-get remove docker
sudo apt-get remove --auto-remove docker
sudo apt-get autoremove --purge
三、Docker配置
操 作 流 程 : { ( 1 ) 先 下 载 镜 像 ( 2 ) 为 镜 像 创 建 容 器 ( 3 ) 在 容 器 里 面 部 署 程 序 操作流程: \begin{cases} (1)先下载镜像\\ (2)为镜像创建容器 \\ (3)在容器里面部署程序 \\ \end{cases} 操作流程:⎩⎪⎨⎪⎧(1)先下载镜像(2)为镜像创建容器(3)在容器里面部署程序
3.1 创建容器
这里直接说如何创建一个容器,下面是关于这部分的具体介绍
service docker start # 启动Docker服务
docker pull python # 下载镜像
# 创建容器,-p 9500:5000 端口映射,(可选)
# -v /home/jankin/project:/home/project 地址映射, (可选)
# --net mynet --ip 172.18.0.2 固定Ip设置(可选)
# Python 镜像的名字
# bash 进入容器后,命令行显示
docker run -it --name=p1 -p 9500:5000 -v /home/jankin/project:/home/project --net mynet --ip 172.18.0.2 python bash
四、Docker内容的具体解析
4.1、镜像
镜像是一个配置好的只读层软件环境。
有两种方式可以得到Docker镜像:
(1)通过dockerfile文件创建出镜像。
(2)从Docker仓库中下载镜像。
4.1.1 通过dockerfile文件创建
创建dockerfile文件
创建镜像
cd /home/jankin/DockerEnv
docker build -t python_ubuntu .
- 错误1:“invalid argument “face” for “-t, --tag” flag: invalid reference format: repository name must be lowercase
See ‘docker build --help’.”
报错原因:名字中存在大写字母
解决方法:改成小写字母就好。- 错误2:“ “docker build” requires exactly 1 argument.”
报错原因:名称后边少了一个.
# USAGE docker build [OPTIONS] PATH | URL | - # e.g. docker build .
这里的
PATH
指明了是.
4.1.2 从仓库中下载镜像
docker pull python:3.5
4.2 容器
- 容器是在镜像基础上创建出的虚拟实例,内容可读可写。
一个Docker镜像可以创建出多个容器,而且容器之间相互隔离,部署的程序不会相互干扰。 - Docker速度非常快。
因为所有的容器直接使用宿主机的Linux内核、内存和硬盘,所以容器的性能非常接近于宿主机。
# 创建容器
docker run -it --name=p1 python:3.8 bash
4.3 Docker 网络管理
给docker分配 固定的网络ip
每一个服务给一个固定的网段,比如python分配在172.18.0.0,MySQL分配在172.19.0.0
docker network create --subnet=172.18.0.0/16 mynet # 创建Docker内部的网段
docker network ls # 查看都存在哪些网段
docker network rm mynet # 删除
docker run -it --name=p1--net mynet --ip 172.18.0.2 python:3.8 bash
# 查看ip是否为我们命名的ip
ip addr
4.4 Docker端口映射
为什么要做端口映射?
默认情况下,除了宿主机之外,任何主机无法访问远程访问Docker容器。
通过端口映射,可以把容器端口映射到宿主机的端口,这样其他主机就能访问容器了。
docker run -it --name p1 -p 9500:5000 python:3.8 bash
# 将容器的 5000 端口映射到宿主机的 9500 端口
docker run -it --name p1 -p 9500:5000 -p 9600:3306 python:3.8 bash
# 多个端口映射
docker ps -a # 查看状态
4.5 目录挂载技术
docker容器中的文件是与外界隔离的,所以为了能把一部分业务数据保存在Docker环境之外,或者把宿主机的文件传入容器,所以需要给容器挂载宿主机的目录。
- Docker环境只支持目录挂载,不支持文件挂载
- 一个容器可以挂载多个目标
docker run -it --name=p1 -v /home/jankin/test:/test python:3.8 bash
# 冒号前面是宿主机文件路径,冒号后面是docker容器文件路径
4.6 Docker常用命令
4.6.1 镜像的常用命令
命令 | 含义 | |
---|---|---|
创建镜像 | pull | 下载镜像 |
push | 上传镜像 | |
search | 查找相关镜像镜像 | |
查看相关信息 | images | 列出本地Docker环境下的所有镜像 |
inspect | 查看某个镜像的信息 | |
删除镜像 | rmi | 删除某个镜像 |
上传与加载 | save | 镜像中的内容导出成压缩文件 |
load | 加载安装 |
1. 创建镜像
(1)写好Dockerfile 文件之后,通过build
命令创建镜像。
(2)从Docker Hub仓库中下载镜像
search
— 查找相关镜像
pull
— 下载镜像
push
— 上传镜像
2. 查看信息
(1)images
列出本地Docker环境下的所有镜像
(2)inspect
查看某个镜像的信息
3. 删除
rmi
删除某个镜像
注意:要删除的镜像没有关联容器,否则只能先删除容器再删除镜像。
4. 分享到其他主机
(1)上传到Docker仓库,然后下载安装。
(2)通过save
导出成压缩文件,-- 通过U盘导入到其他机器上, – 然后通过load
指令加载安装。
举个例子
下面举一个列子简单介绍一下
service docker start # 启动docker
docker pull python:3.8 # 下载python3.8的镜像
docker images # 查看都有哪些镜像
docker inspect python:3.8 # 查看具体的镜像信息
docker save python:3.8 > /home/jankin/python.tar # 将python3.8的镜像导出为压缩文件
docker rmi python:3.8 # 删除镜像
docker load < /home/jankin/python.tar # 从压缩文件中导入镜像
4.6.2 容器的常用命令
命令 | 含义 | |
---|---|---|
运行 | run | 创建并运行容器 |
exec; attach | 进入正在运行的容器 | |
exit | 退出容器 | |
start | 退出之后的启动容器 | |
暂停 | pause | 暂停容器 |
unpause | 取消暂停 | |
查看 | ps | 查看状态 |
inspect | 查看详细信息 | |
删除 | rm | 删除“已停止”容器 |
容器转为镜像 | commit | 将容器转为镜像 |
1. 运行
(1)run
创建并运行容器
(2)exec
;attach 都可以进入已运行的容器中,【推荐使用exec】
2. 暂停
(1)pause
暂停容器
(2)unpause
取消暂停
3. 查看状态
(1) ps
查看状态
(2)inspect
查看详细信息
4. 删除
rm
删除“已停止”容器
5. 容器转为镜像
commit
将容器转为镜像
# 查询容器id
docker ps -a
# 容器转换成镜像,只用复制id前几位就可以了
# 注意:镜像名要小写
docker commit 容器id 设置打包为镜像的名字:版本号
#容器转为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
# 加载压缩文件
docker load -i 压缩文件名称
举个例子
下面举一个列子简单介绍一下上述指令:
# "-it" 交互命令,创建容器之后可以和容器交互
# --name 容器的名字
# python3.8 调用哪个镜像
# bash 调用哪个程序,“bash”指的是命令行运行
docker run -it --name=p1 python:3.8 bash
docker run -it -d --name=p1 python:3.8 bash # “-d”的作用是:执行exit命令时,不会停止容器
exit # 退出容器
docker ps -a # 查看docker容器的信息
docker start p1 # 启动docker 容器
docker pause p1 # 暂停docker容器
docker unpause p1 # 暂停之后的启动docker容器
docker exec -it p1 bash # 进入“p1”容器
docker inspect p1 # 查看容器“p1”的具体信息
docker stop p1 # 停止容器
docker rm p1 # 删除容器
docker commit
服务发布
不能将源代码发布上去,编译之后发布.pyc
文件。
参考资料
Docker教程:使用docker配置python开发环境
Docker构建Python web环境-NEXT学院×腾讯云大学
Docker 入门终极指南,别再说不会用Docker了!
更多推荐
所有评论(0)