docker制作python项目镜像
本文内容:讲述如何将自己开发的一个python项目,打包成docker镜像。

制作docker镜像主要有两种方法:
1、先用docker pull 命令拉取一个基础镜像,然后通过docker commit 命令在此镜像基础上制作新镜像。
2、通过dockerfile制作

第一种方法:

准备工作:已安装docker的linux系统。docker安装请参考:Ubuntu 16.04安装Docker

1、拉取基础镜像:
(1)用docker search 命令先查找有哪些镜像:

(2)用docker pull 拉取其中一个:

然后就可以用docker images命令查看到这个拉取的镜像了。

2、运行该基础镜像:
docker run -idt 镜像名:tag号

用docker ps 查看镜像运行状态:

可以看到该镜像已经运行起来了,名字叫”lucid_lalande“。容器ID是d2cc36fbcb1a。

3、进入该镜像运行起来的容器环境:

docker exec -it 容器ID  /bin/bash


可以看到已经以交互式方式进入了容器中。

4、在容器内部进行相关修改
创建一个文件夹,用来存放python项目代码

5、退出容器终端,将宿主机文件拷贝到刚刚新建的容器目录中
退出容器终端:


将宿主机文件拷贝到容器中:

 docker cp 宿主机项目文件存放目录  容器ID:容器中存放项目文件的目录

注意文件名中不要带空格,否则会报错。

6、将容器保存为新镜像

先用docker ps 查看容器运行状态:

该容器ID和容器名都可以看到。

然后用docker commit命令将容器保存为新镜像。

docker commit 容器名 新镜像名:版本号


这时用docker images命令,可以看到新创建的镜像了。

至此,我们自己python项目的镜像就创建好了。

下面看看怎么将镜像打包成tar包,以及如何使用镜像tar包。

1、将新镜像打包成tar包
用docker save命令:

docker save -o ***.tar   镜像名:TAG

docker save保存的镜像,默认保存在当前路径。用ll命令可以看到打包好的tar包。

2、使用镜像tar包
拿到tar包后,我们应该怎么使用呢?
用docker load命令:

docker load -i tar包名

加载tar包后,用docker images命令可以看到,名为feature_selection.tar的tar包,已经被加载成镜像了。然后我们就可以像使用普通镜像一样来使用它了。

参考:docker commit命令创建新的镜像https://www.cnblogs.com/Dev0ps/p/9969783.html

总结一下:

docker常用命令:

***************************制作镜像常用命令:***************************1、运行镜像    docker run -idt 镜像名:tag号  或  docker run -it  镜像名:tag号  /bin/bash
-i: 交互式操作
-d :指定容器的运行模式,让容器在后台运行。默认不会进入容器,想要进入容器需要使用docker exec
-t: 终端
/bin/bash:命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash** 加端口映射: docker run -p 16800:5000 -idt 镜像名:tag号
(容器中的5000端口映射成宿主机的16800端口)
端口映射后,外部访问容器中服务地址:宿主机IP:16800** 将宿主机文件挂载到容器中:
docker run -it -v /test:/soft 镜像名:tag号 /bin/bash
-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录** 设置容器编码格式
docker run -it -e PYTHONIOENCODING=UTF-8  -v /test:/soft 镜像名:tag号 /bin/bash
-e参数设置shell的默认编码方式为 utf-8,在编译python代码的时候才不会报如下错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12** 以特权模式运行容器:docker run -d --name pb --privileged=true 镜像名:id /usr/sbin/init进入容器:docker exec -it pb /bin/bash以特权模式运行容器后,可以在容器内使用service等后台服务。2、进入容器     docker exec -it 容器ID  /bin/bash3、宿主机文件拷贝到容器     docker cp 宿主机项目文件存放目录  容器ID:容器中存放项目文件的目录
可直接在运行镜像时通过-v参数将宿主机文件挂载到容器。容器文件拷贝到宿主机: docker cp 容器ID:容器中存放项目文件的目录 宿主机项目文件存放目录4、将容器保存为新镜像   docker commit 容器名 新镜像名:版本号5、将新镜像打包成tar包(默认保存到当前路径)   docker save -o ***.tar   镜像名:TAG6、加载tar包   docker load -i xxx.tar*************************其他常用命令:*************************
1、查看容器的资源使用情况 docker top container_id
docker inspect2、删除镜像    docker rmi   IMAGE ID
(如果镜像正在被某个容器使用,则会报错,这时只需先删除容器就好了)3、删除容器   docker rm 容器ID4、启动容器   docker start 容器ID停止容器   docker stop 容器ID5、更名   docker tag  dl-4a:1.7.1  dl-4a:1.5.76、查看容器中进程信息:
在宿主机直接运行:docker exec 容器ID ps -ef
或者在容器中运行:jobs -l
停掉容器中进程:进入该容器,kill pid 7、查看容器中端口映射信息:docker container port 容器ID
结果:15500/tcp -> 0.0.0.0:15400,容器内port 15500映射成了宿主机port 15400

第二种方法:
dockerfile示例:

FROM python:2.7
MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]

这个例子是启动一个 python flask app 的 Dockerfile ( flask 是 python 的一个轻量的 web 框架)我们可以分析一下上面这个过程:

1、从 Docker Hub 上 pull 下 python 2.7 的基础镜像
2、显示维护者的信息
3、copy 当前目录到容器中的 /app 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>
4、指定工作路径为 /app
5、安装依赖包
6、暴露 5000 端口
7、启动 app

Dockerfile 是由一行行命令语句组成,并且支持已 # 开头的注释行。
一般来说,我们可以将 Dockerfile 分为四个部分:
基础镜像(父镜像)信息指令 FROM
维护者信息指令 MAINTAINER
镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等
容器启动指令 CMD 、 ENTRYPOINT 和 USER 等

docker build -t feature_selection:1.0.0 .
docker run -p 4000:80 feature_selection

参考:docker python 提示错误UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

docker制作python项目镜像相关推荐

  1. 2021-01-22 使用 Docker 打包 Python 项目

    使用 Docker 打包 Python 项目 1. 获取 Python 的镜像文件 项目的封装可以建立在已有镜像的基础上,在 Ubuntu 中可通过 docker pull python:3.6.8- ...

  2. docker 部署Python项目 以及dockerfile文件的编写

    Dockerfile文件详解:https://www.cnblogs.com/panwenbin-logs/p/8007348.html Docker的基本使用(部署python项目): https: ...

  3. 【Python】使用Docker部署Python项目

    用Docker部署Python项目 0.源码目录 1.编写Dockerfile文件 2.Docker根据Dockerfile文件生成Docker镜像 3.将镜像运行在Docker容器中 众所周知,同一 ...

  4. docker打包Python项目

    docker打包Python项目 Step1: 配置运行环境文档 项目结构如下 docker_test ├── Dockerfile ├── (myapps) │ └── BPNN.py └── re ...

  5. docker制作深度学习镜像(以windows环境下为例)

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx 用 Docker 安装深度学习环境,轻量.方便!整个系统大小仅需2~3G,用完还能带着走!一 ...

  6. python项目部署到docker_使用docker 部署python 项目

    使用python 开发了一个restfu api程序,使用docker镜像部署.主要有如下步骤,简单记录以供以后参考. 1. 创建DockerFile文件 创建一个DockerFile文件,文件名为D ...

  7. docker制作mysql5.7镜像详解

    docker制作mysql5.7的镜像难点在于,当mysql安装完成后需要手工初始化.我在其他博客查了下做法大多是用脚本初始化配置启动,但这种模式做出来的父进程不是mysql,是以/bin/bash启 ...

  8. Docker制作Python运行环境基础镜像

    一.准备工作 1.1 Python安装包的下载 (说明:python版本可根据自己需求更换) 官网下载:https://www.python.org/downloads/source/ 百度网盘: – ...

  9. docker部署python项目_docker部署项目实践

    项目介绍 此项目是一个基于ubuntu16.4+python3的flask web项目,使用gunicorn启动,项目运行时需要加载一些动态链接库,并且项目在运行时需要多个后缀为.vpo的授权文件,项 ...

  10. Ubuntu18.04下使用docker制作ubuntu20.04镜像

    一.Docker创建镜像等操作 1.下载ubuntu20.04 # sudo docker pull ubuntu:20.042.查看刚刚下载ubuntu20.04 # sudo docker ima ...

最新文章

  1. 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 下载 DB Browser 安装包 | 安装 DB Browser 工具 )
  2. 电脑开机密码忘记了怎么办?
  3. iPhone X适配小结
  4. Android-Multidex安装流程解析
  5. UTF-8字符集成为Java 18默认字符集?发布周期将至,Java 18现身
  6. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
  7. Python中如何获得数组或者列表按大小排序后元素的索引列表
  8. GitHub 40000星!收下这份宇宙最强「程序员装备指南」
  9. 数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》
  10. 上位机和下位机的区别是什么
  11. SPSS作业-检验两组数据有无显著
  12. 一文彻底理解卡诺图化简算法
  13. [Android Studio] 添加Override/Implement methods
  14. LFS详细搭建指南——适合初学者使用
  15. 正斜杠 ,又称左斜杠,符号是/;反斜杠,也称右斜杠,符号是\。
  16. PAT2021年冬(满分题解)
  17. 4.2.4 Kafka高级特性解析(物理存储、稳定性:事物,控制器,可靠性,一致性,_consumer_offsets、延时队列、自定义重试队列)
  18. 《论文阅读》Knowledge-Enriched Transformer for Emotion Detection in Textual Conversations
  19. 计算机控制不恒定性,计算机控制-习题答题.doc
  20. windows 配置域名

热门文章

  1. SQLServer如何在批量插入后,获取批量插入的自增列的值
  2. Exchange企业实战技巧(25)将日历发布到Internet
  3. Masonry 布局 cell 高度适应的一种方案(实现类似朋友圈简单布局)
  4. Linux Mint开发环境安装整理
  5. HDU 3732 Ahui Writes Word
  6. C++day02 学习笔记
  7. spring读取XML配置文件的三种方式
  8. SpringBoot SSM 心理咨询论坛社区
  9. 清理数据_Python数据清理终极指南(2020版)
  10. Deepin在matlab的安装