docker打包项目

本博客主要记录下docker打包项目并生成image的流程。

1.docker介绍

docker我的理解有点类似于虚拟机,就是将程序运行的环境与物理机隔离开来,之后移植的时候将整个虚拟环境都移植过去,这样程序在不同的物理机上运行也就不会出错了。
docker最为关键的有image、container、docker hub等一些概念,image就是一个模板,这个模板是一些通用的,基础的,比如系统,又比如python编译器、java编译器等等。通过模板可以生产具体使用的环境,这个就是container了,而docker hub是去下载image的地方,也是官方发布的,当然也可以自己去建一个hub,吧自己的image模板传上去,有点类似于git。
具体的解释查看这个知乎大神写的,此外菜鸟教程关于docker的内容也值得一看,但是感觉更适合作为手册来看看,用来入门是有点难度。
关于docker具体使用,文章1文章2,这两篇文章可以一看,并可以模仿着吧自己的dockerfile写出来。

2.docker构件流程

2.1常用命令

在知道docker的具体构建流程之前需要知道几个常用命令:
docker images:查看目前本地存在的images
docker rmi [image ID]:删除image ID这个image
docker ps:查看正在运行container信息
docker ps -a:查看所有的container,没有运行的container也显示出来
docker rm [container ID]:删除container ID这个container,加上-f可以强制删除;
docker build -t imagename -f dockerfilename . 利用dockerfile文件创建一个image
docker run -d -v 宿主机挂载目录:容器内的目录 --name containername -it imagename 基于image创建并运行一个container。
docker exec -it id /bin/bash 进入后台的一个container
docker stop id 停止一个container
docker start id,开始一个container
docker command --help:可以查看任何一个command的使用方法

2.2 image构件步骤

  1. 打开cmd,并切换到指定的文件夹;
  2. 编写dockfile文件,dockfile文件首先需要FROM:在某个image镜像的基础上去构建;第二需要MAINTAINER:维护者信息;第三需要WORKDIR:在docker中的工作目录;第四需要ADD:将宿主机所在目录的所有文件拷贝到docker的环境里,当然不用ADD,使用COPY也可以;第五需要RUN:在docker环境里执行特定的命令,这里需要说明一下的是docker的环境实际上是一个linux,哪怕你没有pull一个linux环境,只是比如pull了一个python,这个环境仍是类似于linux的,可以执行bash命令;CMD:执行某个脚本,可以增加参数。
    这是一个我的dockfile实例:
# Use an official Python runtime as a parent image
FROM python:3.7-slim

# 维护者信息
MAINTAINER WenbinYao <wby@.cn>
 
# Set the working directory to /app
WORKDIR /MFDTest
 
# Copy the current directory contents into the container at /app
ADD . /MFDTest
 
# Install any needed packages specified in requirements.txt
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

RUN apt-get update -y

RUN apt-get install sudo

RUN sudo apt-get install tk -y

# Run py when the container launches
CMD ["python", "/MFDTest/态势研判/GetData2FitMFD.py"]
  1. 编写完dockfile文件后需要执行:
    docker build -t imagename .
  2. 第三步之后也就生成了一个image,因此第四步就可以run这个image,生成一个container。
    docker run -it -v /root/python/test_service:/app/volume --name docker_test_service imagename /bin/bash
    最后可以进入bin/bash,这样的话万一没执行起来,可以手工再调用一下程序尝试下,知道错误在哪,进行修复,当然具体已经打包好的image,可以选择在后台执行,或是执行完了之后直接退出,就不需要/bin/bash了。说明下其中的-v是把docker环境里的文件夹挂载到宿主机中,这样执行完,我们可以在宿主机对应的文件夹下去看运行的结果。
  3. 在执行完之后,我们可能对container做了一些修改,或是原来的image没能成功跑起来,我们做了一些bug修复,此时可以将这个动态的container重新变成image。
    docker commit -m=“has update” -a=“runoob” containerID imagename:version
  4. 生成image之后,可以导出成tar文件,这样可以发送给别人,在别人的机器上运行。也可以上传到docker hub,直接让别人下载。

以上便是一个简单的将一个程序打包成docker image的过程了。

如果要想进入一个stop了的container,需要首先启动它,命令为:docker start container ID,然后这个container会被启动,启动后是在后台运行的,可以使用下面的命令进入:docker exec -it 85c477524b6c /bin/bash,就会进入bash命令模式。想要退出直接exit即可,但是exec命令进入的话用exit,container还在后台运行的,需要在使用docker stop container ID才可以完全退出。

3.遇到的问题

我在跑的过程中遇到的问题包括:

  1. 我pull了python3.7的环境,但是无法代码无法跑起来,报错说tk这个包有bug,所以后来再dockerfile中增加了下面这个代码块,也就是首先安装sudo(之前我们提到的,即使只是pull了python环境,其实也是类似于一个linux bash的)。然后安装tk包。
RUN apt-get update -y

RUN apt-get install sudo

RUN sudo apt-get install tk -y
  1. dockerfile挂载了文件夹之后,我更新container之后,在打包成image,运行新的image时便不再挂载这个文件夹了。
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值