• 4.【Linux虚拟机】创建自己的docker image并提供后端服务


    1、下载nodejs(这个暂时没用到,先记下来)

    curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -
    sudo apt-get update
    sudo apt-get install nodejs
    
    • 1
    • 2
    • 3

    重装nodejs@14

    sudo apt-get remove nodejs
    curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
    sudo apt-get update
    sudo apt-get install nodejs
    
    • 1
    • 2
    • 3
    • 4

    2、手动创建一个docker image
    创建名为Dockerfile的文件(无任何后缀),添加如下代码

    FROM python:3.8 # 拉取python3.8的镜像,以其为基准构建自己的image
    
    RUN mkdir -p /usr/src/app  # 在image里创建directory
    
    WORKDIR /usr/src/app  # 改变image当前路径到新建的路径
    
    ADD server.py .  # 添加Linux当前路径下的server.py到image里的当前路径,即/usr/src/app
    
    CMD ["python3", "server.py"] # 实例化image为container时运行该命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    构建docker image

    docker build -t tag .
    
    • 1

    server.py文件

    # server.py 
    from http.server import HTTPServer, BaseHTTPRequestHandler 
    class MyHTTPRequestHandler(BaseHTTPRequestHandler): 
    	def do_GET(self): 
    	self.send_response(200) 
    	self.end_headers() 
    	self.wfile.write(b'Hello world! Sincerely, Python.') 
    # note: localhost only accessible within vm/container 
    # use '' to bind to all interfaces 
    httpd = HTTPServer(('', 8000), MyHTTPRequestHandler) 
    httpd.serve_forever()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、运行docker

    docker run --name my-container -p 8088:8000 -v /home/user/my-html:/usr/share/nginx/html:ro --restart always -d -e NGINX_PORT=3000 tag:latest
    
    • 1

    上面参数解释
    –name my-container
    实例化image为container,其名字为my-container

    -p 8088:8000
    映射container的8000端口为Linux的8088端口

    -v /home/user/my-html:/usr/share/nginx/html:ro
    把Linux的/home/user/my-html目录挂载到container的/usr/share/nginx/html目录,ro表示read only

    –restart always
    设置container重启规则,always表示总是会重启而不管exit的状态,除非是手动docker stop

    -d
    表示detach,这样docker run启动后不会停留在这个命令,而是让container后台运行,因此你可以用terminal继续用其他命令

    -e NGINX_PORT=3000
    设置container的环境变量

    tag:latest
    表示要实例化的image的名字

    当然大部分命令都不需要,我们可以只用几个argument来启动

    docker run --name my-container -p 8088:8000 -d tag:latest
    
    • 1

    仅仅映射端口,这样可以从Linux访问container里的server.py提供的后端服务
    -d用来detach,这样我们能继续使用terminal

    4、访问server.py提供的接口

    curl http://localhost:8088/
    
    • 1

    这样我们就能在命令行看到Hello world! Sincerely, Python.

    5、添加更多文件到docker image

    FROM python:3.8 
    
    RUN mkdir -p /usr/src/app 
    
    WORKDIR /usr/src/app 
    
    ADD ./hw1p2/* ./  # 可以看到,直接把一个目录下所有文件添加到/usr/src/app目录下
    
    CMD ["python3", "hw1p2.py"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    C#中烦人的Null值判断竟然这样就被消灭了
    12.1排序
    【Docker】——入门&安装
    QT day4
    HTML5期末大作业:简单的学生网页作业源码 基于html企业官网项目的设计与实现【艺术官网】
    k8s 资源外部版本和内部版本
    11.12 - 每日一题 - 408
    我们这边结关了,客户要求改清关资料?
    2022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)
    webpack面试题
  • 原文地址:https://blog.csdn.net/weixin_42815846/article/details/126654441