Docker 学习笔记

    科技2022-07-13  130

    安装

    deepin 安装 docker

    docker 常用命令

    # 帮助命令 docker version docker info docker --help # 重点掌握 # 镜像命令 # 列出本地主机上镜像 docker images OPTIONOS -a,列出本地所有镜像 -q,只显示镜像 ID --digests,显示镜像的摘要信息 --no-trunc,显示完整的镜像信息 # 搜索镜像 docker search 某个XXX镜像名字 # e.g. docker search nginx OPTIONOS --no-trunc,显示完整镜像描述 -s,列出收藏数不小于指定值的镜像 --automated:只列出 automated build 类型的镜像 # 下载镜像 docker pull 某个XXX镜像名字 # e.g. docker pull nginx docker rmi # 删除镜像 docker rmi -f 镜像ID # 删除单个镜像 docker rmi -f 镜像名1:TAG 镜像名2:TAG # 删除多个镜像 docker rmi -f $(docker images -qa) # 删除全部镜像

    鲸鱼背上有集装箱

    蓝色的大海里面---------------宿主机系统 deepin

    鲸鱼--------------docker

    集装箱--------------容器实例 from 镜像模板

    容器命令

    有镜像才能创建容器:docker pull centos新建并启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]启动交互式容器:docker run -it --name mycentos centos列出当前所有正在运行的容器:docker ps

    -a:列出正在运行容器+历史运行过容器

    -l:上一个运行的容器 docker ps -l

    -n:最近 n 个创建容器 docker ps -n 3

    -q:静默模式,只显示容器编号

    退出容器

    exit——容器停止退出

    ctrl+P+Q——容器停止不退出

    启动容器:docker start 容器ID或容器名

    重启容器:docker restart 容器ID或容器名

    停止容器:docker stop 容器ID或容器名

    强制停止容器:docker kill 容器ID或容器名

    删除已停止的容器: docker rm 容器ID或容器名 (-f 强制删)

    删除多个容器 docker rm -f $(docker ps -a -q);docker ps -a -q | xargs docker rm

    重要

    启动守护式容器:docker run -d --name name centos查看容器日志 :docker logs -f -t --tail 3 容器ID查看容器内进行的进程:docker top 容器ID查看容器内部细节(容器的所有信息):docker inspect 容器ID进入正在运行的容器并以命令行交互 ctrl+P+Q # 不退出的停止容器 docker exec -it container_id /bin/bash # 启动新的终端 docker attach container_id # 进入上次的终端 docker exec -t container_id ls -al /tmp # 执行命令并在本机终端返回结果 从容器内拷贝文件到主机上 docker cp 容器ID:容器内路径 目的主机路径

    Docker 镜像

    是什么

    UnionFS(联合文件系统)

    对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

    特点

    Docker镜像都是只读的当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

    commit 操作

    docker commit提交容器副本使之成为一个新的镜像

    docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名] # 完整流程 docker run -it -p 8888:8080 tomcat:8.5.32 docker exec -it container_id /bin/bash docker commit -m="description" -a="author" container_id solejay/tomcat:1.0

    容器数据卷

    作用

    容器的持久化容器间继承+共享数据

    卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性: 卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

    特点:

    1:数据卷可在容器之间共享或重用数据

    2:卷中的更改可以直接生效

    3:数据卷中的更改不会包含在镜像的更新中

    4:数据卷的生命周期一直持续到没有容器使用它为止

    容器内添加

    直接命令添加
    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 docker inspect 容器ID # 查看数据卷是否挂载成功 docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 # Read Only,主机可以修改镜像不能修改

    容器退出后不影响数据卷中数据的变更

    DockFile 添加
    # DockFile 编写 docker build -f /mydocker/Dockerfile -t zzyy/centos . # -f:DockFile 路径 # -t:镜像的名字及标签,通常 name:tag 或者 name 格式

    若创建容器数据卷,主机对应的文件路径可通过 docker inspect containerID 查看

    容器数据卷

    命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

    docker run -it --name dc01 solejay/centos # 创建容器 dc01 docker run -it --name dc02 --volumes-from dc01 solejay/centos # volumes-from dc01 docker run -it --name dc03 --volumes-from dc01 solejay/centos # 在上面任一容器内进行的数据修改都会同步到其他容器内 # 删除 dc01 后不影响 dc02 及 dc03 之间的数据同步 # 个人理解为源数据文件为主机上的文件,所有容器的同步都是与主机数据进行同步的

    结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

    Processed: 0.016, SQL: 8