49持续集成实战:Docker原理

Docke r原理与应用

Docker改变了软件世界

  • 在Docker出现之前……
    • 软件在操作系统上是如何工作的?
    • 如何交付软件?
    • 如何部署软件?
  • Docker出现之后……

Docker能做什么?

  • 保证开发、测试、交付、部署的环境完全一致
  • 保证资源的隔离
  • 启动临时的、用完即弃的环境,例如测试
  • 迅速(秒级)超大规模部署和扩容

Docker的基本概念

  • 镜像 image
    • 一个预先定义好的模板文件,Docker引擎可以按照这个模板 文件启动无数个一模一样,互不干扰的容器
  • 容器 container
    • 一台虚拟的计算机,拥有独立的:
    • 网络
    • 文件系统
    • 进程
  • 默认和宿主机不发生任何交互
    • 意味着数据是没有持久化的!

docker pull/images

  • 下载一个指定的镜像,方便随时启动
  • docker pull mysql:5.7.28 下载指定镜像
  • docker images查看本地已有的镜像
    registry.cn-beijing.aliyuncs.com/dr1/hcsp:0.0.16
    镜像仓库 镜像名 tag

docker run/ps

  • docker run装载镜像成为一个容器
    • 就好像从蛋糕模子做出来一个蛋糕
    • 在这个容器看来,自己就是一台独立的计算机
    • 每个容器有一个ID,支持缩写
  • docker run -it <镜像名> <镜像中要运行的命令和参数>
    • 交互式命令行,当前shelI中运行,Ctrl-C退出
  • docker run -d <镜像名> <镜像中要运行的命令和参数>
    • daemon模式,在后台运行

docker run

  • --name为容器指定一个「名字」
  • --restart=always遇到错误自动重启
  • -v <本地文件>:<容器文件>
  • -p <本地端口>:<容器端口>
  • -e NAME=VALUE

docker start/stop

  • 启动/停止一个容器
    • 可以想象为开关机

docker rm

  • 删除一个容器
    • 想象成将电脑丢掉

docker exec

  • 指定目标容器,进入容器执行命令
    • docker run -it <目标容器ID> <目标命令(通常为bash)>
    • 可以「想象」成ssh
  • 调试、解决问题必备命令

docker logs

  • docker logs <容器ID或容器名>
    • 查看目标容器的输出
  • docker logs -f <容器ID或容器名>

docker inspect

  • 高级命令,可以无视
    • 查看容器的详细状态

分层的镜像

ubuntu:15.04 Image

Dockerfile

  • 指定镜像如何生成
  • 编写第一个Dockerfile
  • docker build .
  • 每个镜像会有一个唯一的ID

Docker的镜像仓库与tag

  • 可以任意对镜像进行tag操作
    • 决定了未来这个镜像会被push到哪里
    • 决定了未来从哪里下载镜像
  • 可以方便的创建镜像仓库的私服
    • --registry-mirror
    • --insecure-registry

Docker 与Kubernetes(K8s)

Kubernetes Architecture

练习

  • docker pull blindpirate/hcsp-quiz
  • 尝试自己编写一个docker run命令,完成以下要求:
    • 使用交互式命令行模式(-it)启动Docker容器。
    • 向启动的Docker容器内挂载一个文件(卷),使得容器内能够读取到/app/config.txt文件,其内容为字符串"ABC"。
    • 向启动的Docker容器内传递一个环境变量HCSP_ENV=DEF
    • 为启动的Docker容器设置要执行的命令:java Main
  • 如果一切正确,命令行会输出:

答案是: XXXXX
The answer is: XXXXXXX

成功:

winpty docker run -e HCSP_ENV=DEF -itv //e/config.txt:/app/config.txt blindpirate/hcsp-quiz 

环境:win10 1909,git bash

git bash 运行

docker run -it -v /e/config.txt:/app/config.txt blindpirate/hcsp-quiz 

报:

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

运行

winpty docker run -it -v /e/config.txt:/app/config.txt blindpirate/hcsp-quiz 

没有错误提示,但是没有成功挂载文件

「资料来源:饥人谷」

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注