• Docker 学习笔记


    Docker 学习笔记

    Docker 能处理的事情包括:

    • 隔离应用依赖
    • 创建应用镜像并进行复制
    • 创建容易分发的即启即用的应用
    • 允许实例简单、快速的扩展
    • 测试应用并随后销毁它们

    Docker 背后的想法是创建软件程序可移植的轻量容器,让其可以在任何安装了 Docker 的机器上运行,而不用关心底层操作系统。

    Docker 两个最重要的概念,镜像和容器。

    • 镜像
      Docker 的镜像类似虚拟机的快照,但更轻量。创建 Docker 的镜像有几种方式,多数是在一个现有镜像基础上创建新镜像。从头创建一个镜像,可以考虑在一个镜像的基础上创建它的子镜像。有两种方式这样做,一是在一个文件中指定一个基础镜像及需要完成的修改,另一种是通过运行一个镜像,对其进行修改并提交。
    • 容器
      容器与虚拟机一样,是隔离的,它们拥有一个唯一的 ID 和唯一的供人阅读的名字。容器对外公开服务是必要的,因此 Docker 允许公开容器的特定端口。与虚拟机相比,容器有一个很大的差异,它们被设计用来运行单进程,无法很好地模拟一个完整的环境。
    • 数据卷
      数据卷让你可以不受容器生命周期影响进行数据持久化。它们表现为容器内的空间,但实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器。Docker 允许你定义应用部分和数据部分,并提供工具让你可以将它们分开。卷是针对容器的,你可以使用同一个镜像创建多个容器并定义不同的卷。卷保存在运行 Docker 的宿主文件系统上。
    • 链接
      容器启动时,会被分配一个随机的私有IP,其容器可以使用这个IP地址与其进行通讯。要开启容器间通讯,Docker允许在创建一个新容器时引用其它现存容器。在刚创建的容器里,被引用的容器将获得一个别名。我们就说,这两个容器链接在了一起。

    命令

    # 从公共 registry 下载一个镜像
    docker pull ubuntu:latest
    # 列出镜像
    docker images
    # 新列出镜像命令
    docker image ls
    # 从镜像上创建一个容器
    # --rm: 告诉 Docker 一旦运行的进程退出就删除容器,这在运行测试时非常有用,可免除杂乱
    # -ti: 告诉 Docker 分配一个伪终端并进入交互模式,不要在生产容器中打开这个标志
    # ubuntu 指定镜像
    # /bin/bash 要运行的命令
    # 运行 run 命令时,可指定链接、卷、端口、窗口名称,如果没有提供,Docker 会分配一个默认名称
    docker run --rm -ti ubuntu /bin/bash
    # 在后台运行一个容器
    # 输出分配的 ID
    docker run -d ubuntu ping 8.8.8.8
    docker ps
    # 进入正在运行的容器的交互界面
    docker exec -ti 容器名称 /bin/bash
    
    # 测试 docker 安装情况
    docker version
    docker ps
    docker run hello-world
    
    # create image
    docker build -t name .
    # create and start nginx container
    # -p map machine's port 4000 to container's port 80
    # access the service through port 4000
    docker run -d -p 4000:80 --name webserver nginx
    # run docker
    docker run -p 4000:80 name
    docker run -d -p 4000:80 name
    # stop container
    docker stop name
    docker container stop <hash>
    # force shutdown
    docker container kill <hash>
    # start nginx container
    docker start webserver
    # list all running containers
    docker ps
    docker container ls
    # list all containers including stopped
    docker ps -a
    docker container ls -a
    # stop and remove running container
    docker rm -f webserver
    # remove container
    docker container rm <hash>
    # remove all containers
    docker container rm $(docker container ls -a -q)
    # remove an image
    docker rmi imageId/imageName
    docker image rm imageId
    #remove all images
    docker image rm $(docker image ls -a -q)
    

    镜像仓库相关

    docker login
    # tag image for upload to registry
    docker tag <image> username/repository:tag
    # upload
    docker push username/repository:tag
    # run image from a registry
    docker run username/repository:tag
    

    Dockfile

    Dockerfile will define what goes on in the environment inside your container. Access to resources like networking interfaces and disk drives is virtualized inside this environment, which is isolated from the rest of your system, so you have to map ports to the outside world, and be specific about what files you want to “copy in” to that environment. However, after doing that, you can expect that the build of your app defined in this Dockerfile will behave exactly the same wherever it runs.

    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"]
    

    如果服务器前面有代理,可能会阻塞网络连接,使用 ENV 指定代理。

    # Set proxy server, replace host:port with values for your servers
    ENV http_proxy host:port
    ENV https_proxy host:port
    
  • 相关阅读:
    mysql5.7.22安装步骤
    idea 配置http代理
    大话设计模式之类与类之间的关系读后感
    大话设计模式之工厂方法模式读后感
    rabbitmq+java入门(五)Topic
    rabbitmq+java入门(四)routing
    rabbitmq+java入门(二) 工作队列
    rabbitmq+java入门(三)exchange的使用
    rabbitmq+java入门(一)hello world
    idea+jrebel+springboot热部署
  • 原文地址:https://www.cnblogs.com/xianzhedeyu/p/8047936.html
Copyright © 2020-2023  润新知