Docker 入门终极指南:边学边用

目录

    • 讲个故事
    • 虚拟机与容器
    • 认识 Docker
    • 核心概念
    • 安装 Docker
    • 快速开始
    • 常规操作
    • 最佳实践
    • 总结
    • 推荐阅读

讲个故事

为了更好的理解 Docker 是什么,我们先来讲个故事:

我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。

与虚拟机相比,容器更轻量且速度更快,因为它利用了 Linux 底层操作系统在隔离的环境中运行。

虚拟机的 Hypervisor 创建了一个非常牢固的边界,以防止应用程序突破它,而容器的边界不那么强大。

认识 Docker

  • clone:克隆一个项目。

  • build:打包镜像。

  • run:运行实例。

  • share:共享镜像。

好了,准备工作就绪,下面可以大展身手了!

快速开始

安装完 Docker 之后,我们先打个实际项目的镜像,边学边用。

①首先需要大致了解一下我们将会用到的 11 个命令

如下图:

因为我们映射了本机 3000 端口,所以执行:

或者打开浏览器,访问:localhost:3000。

⑨发布镜像

如果你想为 区贡献力量,那么需要将镜像发布,方便其他开发者使用。

发布镜像需要如下步骤:

  • 登陆 dockerhub[2],注册账 。

  • 命令行执行 docker login,之后输入我们的账 密码,进行登录。

  • 推送镜像之前,需要打一个 Tag,执行 docker tag /:。

全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。

常规操作

到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。群:785128166,一起交流学习

①参数使用

FROM:

  • 指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令

  • FROM [AS ] 指定从一个镜像构建起一个新的镜像名字

  • FROM [:] [AS ] 指定镜像的版本 Tag

  • 示例:FROM mysql:5.0 AS database

MAINTAINER:

  • 镜像维护人的信息

  • MAINTAINER

  • 示例:MAINTAINER Jartto Jartto@qq.com

RUN:

  • 构建镜像时要执行的命令

  • RUN

  • 示例:RUN [executable, param1, param2]

ADD:

  • 将本地的文件添加复制到容器中去,压缩包会解压,可以访问 络上的文件,会自动下载

  • ADD

  • 示例:ADD *.js /app 添加 js 文件到容器中的 app 目录下

COPY:

  • 功能和 ADD 一样,只是复制,不会解压或者下载文件

CMD:

  • 启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像要运行的命令

  • 当使用 docker run 运行容器的时候,这个可以在命令行被覆盖

  • 示例:CMD [executable, param1, param2]

ENTRYPOINT:

  • 也是执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖

  • ENTRYPOINT [executable, param1, param2]

  • 示例:ENTRYPOINT [donnet, myapp.dll]

LABEL:为镜像添加元数据,key-value 形式

  • LABEL = = …

  • 示例:LABEL version=1.0 description=这是一个web应用

ENV:设置环境变量,有些容器运行时会需要某些环境变量

  • ENV 一次设置一个环境变量

  • ENV = = = 设置多个环境变量

  • 示例:ENV JAVA_HOME /usr/java1.8/

EXPOSE:暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)

  • EXPOSE

  • 示例:EXPOSE 80

  • 容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口

VOLUME:指定数据持久化的目录,官方语言叫做挂载

  • VOLUME /var/log 指定容器中需要被挂载的目录,会把这个目录映射到宿主机的一个随机目录上,实现数据的持久化和同步

  • VOLUME [/var/log,/var/test…] 指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步

  • VOLUME /var/data var/log 指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录

WORKDIR:设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更

  • WORKDIR

  • 示例:WORKDIR /app/test

USER:指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户

  • USER :[]

  • 示例:USER test

ARG:设置构建镜像要传递的参数

  • ARG [=]

  • ARG name=sss

更多操作,请移步官方使用文档:

https://docs.docker.com/

最佳实践

在掌握 Docker 常规操作之后,我们很容易就可以打出自己想要的项目镜像。

然而不同的操作打出的镜像也是千差万别。究竟是什么原因导致镜像差异,我们不妨继续探索。

以下是在应用 Docker 过程中整理的最佳实践,请尽量遵循如下准则:

  • Require 明确:需要什么镜像。

  • 步骤精简:变化较少的 Step 优先。

  • 版本明确:镜像命名明确。

  • 说明文档:整个镜像打包步骤可以重现。

总结

  • 容器化技术必将是云时代不可或缺的技能之一,而 Docker 只是沧海一粟。随之而来的还有集群容器管理 Kubernetes、Service Mesh 、Istio 等技术。

  • 打开 Docker 的大门,不断抽丝剥茧,逐层深入,你将感受到容器化的无穷魅力。

最后,下面是我整理出来的一份软件测试工程师发展方向知识架构体系图。

最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救p>

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8934 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月4日
下一篇 2021年7月4日

相关推荐