docker学习笔记

docker生命周期

  1. 仓库

    目前Docker官方维护了一个公共仓库Docker Hub,大部分需求可以在Docker Hub中下载镜像来实现。

    可以通过命令进行搜索
    docker search [OPTIONS] TERM

    下载官方镜像到到本地可以通过
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

    修改镜像的tag
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

    将镜像上传到仓库
    docker push [OPTIONS] NAME[:TAG]

  2. 镜像

    Docker镜像和Docker容器的概念理解,可以通过编程语言中类和对象的关系进行理解。 一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系最多可以127层。

    我们称第一层叫基础镜像,例如我们可以从docker hub上下载基础镜像,然后在基础镜像的基础上添加我们的需求,形成新一层镜像。

    镜像通过ID进行识别,可以通过docker images列举出本地所有有效镜像。
    可以通过docker history Image查看镜像的层级信息。

  3. 容器

    容器可以使用命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...]进行创建。
    容器是一个在所有镜像层之上增加了一个可写层。

    容器有两种状态:运行态和退出态。当我们使用docker run 启动一个容器的时候,容器进入运行态,当使用docker stop或其他方式停止docker容器时,容器进入退出态。 我们对容器的变更都会写到**容器的文件系统中**,**而不是写到镜像中**。

docker概念介绍

  1. namespace(命名空间)

    每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样,容器和容器之间互不影响。

  2. cgroup(控制组)

    对共享资源进行隔离、限制、审计等,控制分配到容器的资源,避免过多的容器同时运行对系统资源的竞争。

  3. UnionFS(联合文件系统)

    Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对 文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

docker优势

  • 作为云主机使用
  • 环境标准化和版本控制
  • 隔离性

docker劣势

  • 系统服务docker化的障碍
  • 并非所有的应用程序都适合docker化
  • 公用Linux内核,存在安全隐患

docker应用场景

  • Web 应用的自动化打包和发布
  • 持续集成和持续部署
  • 微服务架构使用

docker与虚拟机对比

Docker容器VM
操作系统与宿主主机共享OS
存储大小镜像小,便于存储和传输
运行性能几乎没有额外的性能损失
移植性轻便、灵活适用于Linux
硬件亲和性面向软件开发者
部署速度快速、秒级

docker命令

docker image ls
docker image ls -a
docker system df #查看容器、镜像、数据卷所占用的控件

docker image ls -f dangling=true
docker image prune

docker image ls -f since=[镜像名]
docker image ls -f before=[镜像名]
docker image ls -f label=[label]

docker image rm [镜像] #删除本地镜像
docker rmi [镜像] #删除本地镜像

docker image rm $(docker iamge ls -q redis)
docker image rm $(docker image ls -q -f before=mongo:3.2)

docker commit (供学习和其他特殊应用场合使用,不要使用该命令定制镜像,应使用Dockerfile)

docker run
docker exec

docker history

Dockerfile

Dockerfile是一个文本文件,其内包含一条一条指令,每条指令构建一层,因此一条指令的内容就是描述该层应该如何构建。Dockerfile功能很强大,提供了大概十多个指令供我们使用

指令介绍
  1. FROM 指定基础镜像,docker hub上有很多镜像,可以直接拿来使用作为基础镜像
  2. RUN 执行命令,因为一个命令会创建一层,所以可以使用RUN指令,并使用&&将各个需求指令串联起来,支持在行位添加\的命令换行方式,以及行首使用#进行注释
  3. COPY 将上下文中的某个文件复制到docker镜像里 COPY ./compose.json /usr/var 上下文在docker build -t 镜像名 . 最后的.代表的就是上下文目录,注意源文件的各种元数据都会保留,比如读写执行权限,文件变更时间等信息。
  4. ADD 更高级的复制文件,可以是一个url,这时Docker引擎会去试图下载这个文件,如果是个tar压缩文件,ADD指令会去试图解压这个文件到目标路径
  5. CMD 和RUN指令相似 CMD <命令>或者CMD ['可执行文件','参数1','参数2']
  6. ENTRYPOINT 入口点
  7. ENV 设置环境变量
  8. EXPOSE 声明端口

Docker-compose使用

我们可以使用Dockerfile方便的定义一个单独的容器,但是,在日常工作中,经常会碰到多个容器相互配合来完成某个任务的情况,这个时候我们就需要一种可以对docker容器集群进行快速编排的工具,docker-compose就是一种定义和运行多个Docker容器的应用。我们可以通过定义一个docker-compose.yml文件来定义一组相互关联的应用容器

一个简单的docker-compose示例
version: '3'
services:
    web:
        build: .
        ports:
            - "5000:5000"
    redis:
        image: "redis:alpine"

分析上述的docker-compose.yml该项目含有两个service一个叫web 一个叫redis,其中web使用的是当前目录下的Dockerfile构建而来,redis使用redis:alpine镜像构建。
运行docker-compose项目使用docker-compose up

Docker-compose指令
  1. image指令
  2. labels为容器添加Docker元数据信息
  3. build
  4. container_name
  5. depends_on 解决容器的依赖、启动先后的问题
  6. dns
  7. env_file
  8. environment
  9. expose
  10. extra_hosts 类似--add-host参数,会在启动后的服务容器中/etc/hosts文件添加
  11. logging配置日志选项,其下有两个参数driveroptions
  12. ports暴露端口信息,类似-p
  13. sysctls设置容器内核参数
  14. ulimits设置容器ulimits限制值
  15. volumes 设置数据卷挂载路径(HOST:CONTAINER:ro)类似-v
  16. links 不推荐使用,类似--link
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值