zoukankan      html  css  js  c++  java
  • Docker容器

    一:什么是容器

    如果容器理解为独立运行的一个或一组应用,以及它们的运行态环境。 而虚拟机则为可理解为跑在上面的应用。

    二:创建容器

    创建文件名为Dockerfile的空目录,将以下三个文件复制到其中。

     1.添加文件

        Dockerfile文件

    # Use an official Python runtime as a parent image
    FROM python:2.7-slim
    
    # Set the working directory to /app
    WORKDIR /app
    
    # Copy the current directory contents into the container at /app
    ADD . /app
    
    # Install any needed packages specified in requirements.txt
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
    
    # Make port 80 available to the world outside this container
    EXPOSE 80
    
    # Define environment variable
    ENV NAME World
    
    # Run app.py when the container launches
    CMD ["python", "app.py"]
    # Set proxy server, replace host:port with values for your servers ENV http_proxy host:port ENV https_proxy host:port

     requirements.txt

    Flask
    Redis

    app.py

    from flask import Flask
    from redis import Redis, RedisError
    import os
    import socket
    
    # Connect to Redis
    redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        try:
            visits = redis.incr("counter")
        except RedisError:
            visits = "<i>cannot connect to Redis, counter disabled</i>"
    
        html = "<h3>Hello {name}!</h3>" 
               "<b>Hostname:</b> {hostname}<br/>" 
               "<b>Visits:</b> {visits}"
        return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=80)
     

    2.创建镜像

    查看文件

    #ls
    Dockerfile        app.py            requirements.txt

    在“Dockerfile”文件夹下运行下面命令,创建了一个以“friendlyhello”命名的Docker镜像。

    #docker build -t friendlyhello .

    3.查看新建镜像

    新建的镜像在Docker 镜像registry中

    #docker images
    REPOSITORY            TAG                 IMAGE ID
    friendlyhello         latest              326387cea398

    4.运行应用程序

    运行该APP(应用程序),并将4000映射到80端口

    #docker run -p 4000:80 friendlyhello

     并在浏览器中输入http://localhost:4000,注意如果是win7则将localhost修改为IP

     5.后台运行应用程序

    #docker run -d -p 4000:80 friendlyhello

    6.查看容器

    # docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED
    1fa4ab2cf395        friendlyhello       "python app.py"     28 seconds ago

     7.停止容器

    #docker container stop 1fa4ab2cf395

     三:分享镜像

    1.登录Docker

      登录到本地计算机上公共的Docker注册表。如果没有账号,可以登录到https://cloud.docker.com/中注册

    #docker login

    2.标记镜像

    形如docker tag image username/repository:tag,意思是用户john将镜像“ friendlyhello”上传至“get-started”存储库,标记为“part2”。
    #docker tag friendlyhello john/get-started:part2

    3. 查看镜像

    # docker images

    4.发布镜像

    形如“docker push username/repository:tag”,镜像一旦上传将会被公开

    #docker push john/get-started:part2

    5.取出镜像

    输入形如“docker run -p 4000:80  username/repository:tag”如下命令

    #docker run -p 4000:80 john/get-started:part2

    返回如下:

    Unable to find image 'john/get-started:part2' locally
    part2: Pulling from john/get-started
    10a267c67f42: Already exists
    f68a39a6a5e4: Already exists
    9beaffc0cf19: Already exists
    3c1fe835fb6b: Already exists
    4c9f1fa8fcb8: Already exists
    ee7d8f576a14: Already exists
    fbccdcced46e: Already exists
    Digest: sha256:0601c866aab2adcc6498200efd0f754037e909e5fd42069adeff72d1e2439068
    Status: Downloaded newer image for john/get-started:part2
    * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

    四:附录:

    如果想知道更多容器相关命令可试着运行下列命令

    docker build -t friendlyname .              # Create image using this directory's Dockerfile
    docker run -p 4000:80 friendlyname          # Run "friendlyname" mapping port 4000 to 80
    docker run -d -p 4000:80 friendlyname       # Same thing, but in detached mode
    docker container ls                         # List all running containers
    docker container ls -a                      # List all containers, even those not running
    docker container stop <hash>                # Gracefully stop the specified container
    docker container kill <hash>                # Force shutdown of the specified container
    docker container rm <hash>                  # Remove specified container from this machine
    docker container rm $(docker container ls -a -q)         # Remove all containers
    docker image ls -a                          # List all images on this machine
    docker image rm <image id>                  # Remove specified image from this machine
    docker image rm $(docker image ls -a -q)    # Remove all images from this machine
    docker login             # Log in this CLI session using your Docker credentials
    docker tag <image> username/repository:tag  # Tag <image> for upload to registry
    docker push username/repository:tag         # Upload tagged image to registry
    docker run username/repository:tag          # Run image from a registry
  • 相关阅读:
    网络-路由交换-路由基础-华为-OSPF的工作原理
    网络-路由交换-路由基础-华为-OSPF报文
    常见协议端口号和IP地址
    以太网帧类型速查(协议字段)
    TCP/UDP端口列表
    利用python生成简单的爆破字典
    BUU的三道文件包含题
    Poc、Exp、Payload、Shellcode的区别
    JavaScript Dom操作-增删改节点1
    JavaScript 图片轮播
  • 原文地址:https://www.cnblogs.com/yaohong/p/7836701.html
Copyright © 2011-2022 走看看