目录

Docker 笔记 - 01.基础

概念:

名称 解释 备注
镜像
(image)
可以理解为一个做餐具的模具,用不同的镜像可以加工出来不同的餐具(容器)
容器
(container)
可以理解为模具加工出来的餐具,一个模具可以加工出来很多个相同的餐具,而加工出来的餐具又可以重新雕琢,再以它为基础做出新的餐具模具(容器)
* 容器是一个镜像实例化(捏餐具)的产物,实例化以后的改动只影容器(餐具)而不影响镜像(模具)
* 容器通常是一套运行环境,可以是linux系统(不同版本),可以是数据库,可以是存储单元
* 程序代码通常需要不同的运行环境,比如php7和php5有不兼容的代码,那么他们需要各自运行在适合的环境里面,容器则为他们提供这个环境
* * 类似:炒不同的菜需要不同的容器(锅碗瓢盆)。
* 容器提供了运行环境的隔绝,比如两个php应用(即使版本一致)需要不同的系统参数和配置,那么放在容器里可以让他们各自得到自己需要的环境配置
Docker守护进程
(Docker daemon)
在宿主机上运行的后台服务,它管理docker容器的构建,运行和分发
Docker客户端
(Docker Client)
允许用户和Docker守护进程交互的命令行工具
Docker Hub Docker镜像的登记表。可以把它想象为一个存储着所有可用的docker镜像的目录

(Layers)
一个Docker镜像由多个层构成。每个层代表着这个镜像的Dockerfile中的一句指令。除了最后一层,每层都是只读的。
Dockerfile 一个包含着所有必要的用来构建镜像的命令的文本本间
Dockerfile reference页面可以查看所有可用于dockerfile的命令和它们的参数细节
Dockerfile reference

(volumes)
一个特殊的docker容器层允许数据持久化保存而且可以与容器本身分隔开。可以把卷想象为一个区分于应用本身的,抽象的持久化数据储存方式
Docker Compose 用来在一个单一系统里面控制多个容器
类似使用dockerfile来建立一个镜像,有一个文本文件定义了这个应用:使用哪个基础镜像,几个实例,网络连接等等
但是Compose只在一个单一系统里面运行,所以在多系统情况下需要使用Swarm模式
Docker Swarm Mode 告诉Docker会有多个引擎运行而且我们需要在他们之间进行协同.
Swarm模式不仅有能力像compose一样定义应用架构,也有能力定义和管理高可用级别,尺度缩放(scanling),负载均衡以及其他.
通过这些功能,Swarm模式在生产环境的使用要比它的简化版Compose更多.
名称 解释 备注
名称 解释 备注
名称 解释 备注
名称 解释 备注

用到的命令和用途:

命令 用途 备注
docker run hello-world 测试docker已经成功安装 helloworld镜像运行后会输出docker相关信息
docker container run 也有相同效果 [1]
docker run NAME 基于某个镜像,实例化出来一个容器,启动,执行,停止 如果本地没有这个镜像,会自动去registry取回
docker container run hello-world 测试docker已经成功安装 [备注1][1]
docker pull ubuntu 获取ubuntu镜像 docker pull ubuntu:
docker image pull alpine 获取ubuntu镜像 跟docker pull 一样,目测也是 [备注1][1]
docker image ls / ls -a 显示所有本地的镜像 备注
docker container run -it ubuntu bash 启动ubuntu镜像,并且提供命令行的终端交互 i:interactively, t:terminal
docker start ID 启动某个停止了的容器 如果不启动,容器会在执行完毕后自动停止
docker exec ID CMD 在某个已经启动了的指定id的container上执行命令CMD 备注
docker image inspect 用途 备注
docker image history 用途 备注
docker image build 用途 备注
docker container rm ID 用途 备注
docker container prune 用途 备注
命令 用途 备注
命令 用途 备注
命令 用途 备注

状态转换关系

命令 转换 备注
docker pull registry的镜像拉回到本地 类似git clone
docker run 启动,执行,停止 重要在于会执行容器内配置好的指令(dockerfile里面的命令或者容器内部的程序)
docker start ID 容器启动(container ls 可以看到) 容器没有启动的情况下需要(container ls -a 才可以看到)
docker exec ID CMD 某个已启动的容器接收并执行这个命令行里面的CMD 类似后台服务
docker stop ID 容器关机(container ls 看不到) container ls -a可以看到
docker container commit ID 确认一个容器的实时改动,并基于这一系列改动生成镜像 备注
docker image inspect tag 显示一个或多个镜像的细节信息 包含了所有层的信息,镜像基本信息和环境配置信息等等
docker image history tag 显示一个或多个镜像的修改历史:每个改动的hash,修改时间,作者,容量大小 类似git log
docker image build 基于一个dockerfile生成一个镜像 docker image build -t hello:v0.1 . 基于当前目录(.)里面的dockerfile生成一个镜像,并且命名为hello,版本号为0.1
docker container logs ID 显示一个容器的日志 有命令行的镜像会返回terminal日志,没有命令行的比如mysql会返回应用日志
docker log 也可以用
命令 用途 备注
命令 用途 备注
命令 用途 备注

总结

  1. 早期docker有很多不区分命令command和子命令subcommand的做法,比如docker run,docker pull,docker commit,在较新版本后做了统一,但是老的写法仍然被保留。
    • 更好的习惯是用完整的命令
  2. 在命令行里面引用各种image和containerid的时候,不需要输入完整id,只需要输入id最左边的三四个字符
  3. docker image build类似c的compile,基于dockerfile的内容,获取基础包(FROM),执行初始化命令(RUN),设定工作目录(WORKDIR),执行命令(CMD)
  4. docker run--mount参数可以绑定本地目录和镜像内目录,对于文件改动可以实时更新. 注意type=bind.
    • --mount type=bind,source="$(pwd)",target=/usr/share/nginx/html $DOCKERID/linux_tweet_app:1.0
  5. xx

引用细节(reference_dettails)

[1]: docker rundocker container run的差异: 他们是完全一样的,在docker 1.13版本之前仅有docker run命令可以使用。命令行命令会被重构成为docker COMMAND SUBCOMMAND的格式。在这里COMMAND是container而SUBCOMMAND 是run。这个改动是为了让命令分组得更加符合直觉,因为在这个版本更新的时候docker的命令有了实质的大量增长。 [引用来源]
[2].

666    ·   1

(点赞功能开发中)

评论列表
{{item.userName}}
{{item.lastUpdate}}
{{item.content}}
{{item.like}}    |   {{item.unlike}}
{{ sItem.userName }}
{{ sItem.lastUpdate }}
{{ sItem.content }}
{{ sItem.like }}    |   {{ sItem.unlike }}