zoukankan      html  css  js  c++  java
  • 【Docker】从零开始将自己的应用打包到docker镜像

    背景是这样:

    有一个python写的web服务,希望打包到容器中,通过容器去启动。

    参考了网上各种文档,都感到说的不清不楚,实际操作过程中,又遇到了不少的坑,这里摸索OK后记录一下。

    docker的安装和部署此处不再赘述。以下从docker安装完成后开始讲。 

    首先,我们写一个demo,使用了python的flask框架,文件名为  app.py  。

    我们的目的是,将这个代码以服务的形式,打包到docker镜像中。

    from flask import Flask
    
    app=Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'hello world'
    
    if __name__=='__main__':
        app.run(host='0.0.0.0',debug=True,port='7777')

    本地路径如下图

    可以看到,最外层目录是  mydocker ,内部是bdtools,app.py就放置在最内层。

    首先,requirements.txt的内容如下图,这为了安装python依赖包:

    然后我们开始编写Dockerfile

    FROM python:3.8     
    # 拉取一个基础镜像,基于python3.8
    MAINTAINER BH8ANK    
    # 维护者信息
    ADD ./bdtools/ /code/bdtools/  
    # 将你的项目文件放到docker容器中的/code/bdtools文件夹,这里code是在根目录的,与/root /opt等在一个目录
    # 这里的路径,可以自定义设置,主要是为了方便对项目进行管理
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    # 设置容器时间,有的容器时区与我们的时区不同,可能会带来麻烦
    ENV LANG C.UTF-8    
    # 设置语言为utf-8
    WORKDIR /code/bdtools      
    # 设置工作目录,也就是下面执行 ENTRYPOINT 后面命令的路径
    RUN /usr/local/bin/pip3 install -r requirements.txt  
    # 根据requirement.txt下载好依赖包
    EXPOSE 7777      
    # EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
    # 此处填写7777,是因为我们上面的app.py提供的web服务就需要使用7777端口
    ENTRYPOINT ["python3","app.py"]  

    Dockerfile编写完成后,我们就可以构建镜像了。

    使用命令

    docker build -t new Dockerfile

    意思是,使用当前路径下的DockerFile进行构建,镜像名称为new

    如上图,看到最后一行Successfully就表示构建成功了。图中红色部分报错是pip包版本不是最新的告警,不影响构建过程,可以忽略。

    现在,我们可以查看一下镜像情况

    使用命令

    docker images

    如上图,镜像已经构建出来了。

    那么,开始启动容器。

    执行命令

    docker run -p 3333:7777 -dit d7d7df1b3dd5

    这里需要说明一下:

    1,-p参数,注意是小写,3333,表示宿主机的端口,7777表示容器内部的端口。

    整条参数的意思是:将容器内的端口7777,映射到宿主机的3333端口。

    如果我们需要从宿主机外部访问这个容器服务,只需要访问3333端口即可。

    2,-dit ,这个参数我们只说-d,就是后台运行的意思。整行命令最后的那一串字符串,其实是上面构建出的镜像ID.

    执行效果如下:

    此刻,容器即已启动了。

    我们可以通过命令查看容器的运行情况

    docker ps -a

    此处,我们一般关注的是容器ID、STATUS和PORTS,可以看到,容器的端口7777已经映射到宿主机的3333端口。

    那么,我们如何进入到容器内部呢?

    可以使用命令

    docker exec -it 容器ID  /bin/bash

    需要注意,是容器ID,不是镜像ID

      

    执行效果如上图,可以看到,命令行提示符已经到了容器内部。

    那么,我们还需要确认一下,这个python服务到底启动了没有。

    我们首先可以在宿主机查看端口占用情况

    此外,也可以在本地PC浏览器,去访问宿主机的3333端口即可。如下图

    综上,我们已经完成了从镜像制作到服务部署的全部流程。

    此外,还有个别常用的docker相关的管理命令也一并贴上来

    # 删除镜像
    docker rmi  镜像ID
    
    # 删除容器
    docker rm 容器ID
    
    # 杀容器,会将运行中的容器停下来
    docker kill 容器ID
    
    # 启动容器,并将进入容器中的bash命令行
    docker run -it 镜像ID  /bin/bash  


     

     【完】

  • 相关阅读:
    SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)
    SQL Server调优系列基础篇
    《SQL Server企业级平台管理实践》读书笔记——SQL Server中关于系统库Tempdb总结
    你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
    你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
    《SQL Server企业级平台管理实践》读书笔记——几个系统库的备份与恢复
    Struts2
    Struts2
    Struts2
    Struts2
  • 原文地址:https://www.cnblogs.com/BH8ANK/p/15439152.html
Copyright © 2011-2022 走看看