Docker 只言片语

以下是阅读 《每天5分钟玩转Docker容器技术》的笔记:

  • Dockerfile 中每一个指令都会创建一个镜像层,上层是依赖于下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效。
  • docker build -t target_image_name . 命令结尾的 . 指明 build context 为当前目录。 Docker 默认会从 build context 中查找 Docker 文件。 我们也可以通过 -f 参数指定 Dockerfile的位置
  • 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的改动 – 无论添加、删除、还是修改文件都只会发生在容器层中。
  • Docker 容器就是 Docker 镜像的运行实例。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

下面我们深入讨论容器层的细节。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。

  1. 添加文件
    在容器中创建文件时,新文件被添加到容器层中。
  2. 读取文件
    在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后打开并读入内存。
  3. 修改文件
    在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
  4. 删除文件
    在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。

只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

###############################################################

Docker 容器
Docker 容器就是 Docker 镜像的运行实例。

用户可以通过 CLI(docker)或是 API 启动、停止、移动或删除容器。可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。

  • docker run :创建一个新的容器并运行一个命令.
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    e.g. 实例:

    使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

    docker run --name mynginx -d nginx:latest
    docker run -it --name my_ubuntu -d ubuntu:latest

    注意: 没有 -it 的话,container刚开始就停掉了。

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。



    docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

    docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。


    $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

    runoob@runoob:~$ docker run -it nginx:latest /bin/bash
    root@b8573233d675:/# 

/######################################################

docker run vs docker exec vs docker start:

docker run:

Description
Run a command in a new container

Usage
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker exec:

Description
Run a command in a running container

Usage
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

e.g. docker exec -it <mycontainer> bash to get into a container

docker start:

Description
Start one or more stopped containers

Usage
docker start [OPTIONS] CONTAINER [CONTAINER...]
    原文作者:kid_learning
    原文地址: https://segmentfault.com/a/1190000019681268
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞