Docker 学习笔记

Docker 安装

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

  1. 脚本安装(推荐)

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
  2. Centos 安装

    sudo yum install docker-ce docker-ce-cli containerd.io
  3. Ubuntu安装

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    #导入密钥
    sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    #添加源地址
    sudo apt-get update
    #更新
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    #安装Docker

    其他发行版就不写了,感觉用不到的啦

    输入命令 docker -v 查看版本号,出现版本号即安装成功image-20201019144729867

基本命令和用法

  1. docker search:从dockerhub上搜索镜像的名字 (docker search -s 30 ubuntu –no-trunc )

选项: -s 30 :筛选星标30 –no-trunc : 显示所有信息
2. docker pull 下载镜像
3. docker rmi删除镜像
4. docker rm 删除容器
5. docker images 查看下载的镜像
6. docker ps 查看运行中的容器

容器

  1. 新建并运行容器

    docker run -d --name 容器名 -v 宿主机文件路径:容器路径 -p 宿主机端口:容器端口 镜像名:版本号

    1. 本地镜像不存在则会执行docker pull 镜像

    2. -d为后台运行模式 可选-it 参数 为容器分配一个伪终端,输入exit后会关闭容器,也可以用Ctrl+P+Q:不关闭容器,退出,--restart=always运行容器时添加启动策略,加入-it参数后exit也不会退出容器

    3. 进入正在运行的容器

      docker attach 容器ID 进入容器,exit后会关闭容器
      docker exec 容器ID 进入容器 或 (不进去)执行一个任务 很重要!
      eg:
      docker exec -it 容器ID /bin/bash //进入主机
      docker exefc ID ls //不进入,执行ls命令

      容器ID也可用容器名替换

    4. 启动一个被关闭的容器: docker start +id (ps查id)

    5. 停止容器: docker stop 容器ID //温柔 docker kill 容器ID//拔掉电源

    6. 删除已停止的容器 docker rm 容器ID删除正在运行的镜像先docker stop 容器ID

    7. 查看容器日志 docker logs -f -t --tail 容器ID (-t加入时间戳 -f 刷新日志)
      查看容器内部进程 docker top 容器ID

    8. docker cp 容器ID:/tmp/a.log /root //把a.log 拷贝到主机/root下

镜像

  1. 特点:一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。包括代码,云从事,库,环境变量,配置文件。
    UnionsFS联合文件系统:一种分层,轻量级的文件系统。对文件系统的修改作为一次提交层层叠加。是docker分层继承的基础斜体样式。
  2. Docker加载原理:bootfs+rootfs。
  • bootfs :包括最基本命令,工具,程序库(内核来自宿主机) ;
  • rootfs :控制Centos,Ubntu等发行版本。

思考 :Centos与Ubntu的Linux版本中,bootfs是否相同?
——相同
UnionsFS联合文件系统的优点?
—— 复用,共享资源。

  1. 对镜像的操作
    1. docker commit 提交容器副本,保存修改过后的容器,成为一个新的镜像 .
      当我们run一个容器后,对容器内容进行了修改时,可以保存此容器,作为一个新的镜像。
      docker commit -m="描述" -a="作者" 容器ID 目标镜像名字:[标签名]

Dockerfile初识

先认识以下几个关键字:

From :基于**创建

ENV: 配置环境

EXPOSE :暴露端口

CMD :启动

再来了解一个概念——容器卷:

保存容器中数据,数据持久化。容器之间,主机与容器之间,共享数据。相当于挂载!可以使得主机与容器内同步更新!

容器卷的两种使用方式:
1.使用命令,在创建镜像时直接添加容器卷。直接举例说明:
docker run -it -v /主机绝对路径:/容器内目录 镜像名
docker run -it -v /主机绝对路径:/容器内目录:ro 镜像名 只读

2.在dockerfile中编写,使用VOLUME指令
VOLUME["/file1","/file2","/file3"]//只支持容器内的目录,不支持宿主机目录(为了可移植性)

docker inspect ID //查看挂载在主机的目录

容器间传递共享:
docekr run --volumes-from 容器名 镜像名

eg: docker run  -it --name dc02 --volumes-from dc01 zxd/centos              //dc02  与dc01 共享文件!!

//思考:当dc01被kill ,文件是否还存在?——存在,且共享均保持