Docker基础

Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker的应用场景:

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

docker架构
Docker 使用C/S 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。
基本概念:
1. Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中,UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立,只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级。
2. Docker 容器(Container)
容器是独立运行的一个或一组应用。一个Docker容器包含了该应用运行所需要的所有环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台。
3. Docker 仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker 仓库是 Docker 的分发部分。
4. Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
5. Docker 守护进程
Docker 守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。
6. Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。

Docker 基础用法

  • docker images
    列出当前系统镜像
  • docker rmi
    删除一个或者多个镜像
  • docker push
    推送镜像到源
  • docker stop
    停止一个容器
  • docker build
    从零开始来创建一个新的镜像。
    使用docker build创建镜像之前,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
    例如:

FROM centos:6.7
MAINTAINER Fisher “fisher@sudops.com”
RUN /bin/echo ‘root:123456’ |chpasswd
RUN useradd runoob
RUN /bin/echo ‘runoob:123456’ |chpasswd
RUN /bin/echo -e “LANG=\”en_US.UTF-8\”” >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
然后使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .

参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

Dockerfile

Docker 可以通过 Dockerfile 的内容来自动构建镜像。Dockerfile 是一个包含创建镜像所有命令的文本文件,通过docker build命令可以根据 Dockerfile 的内容构建镜像。
Dockerfile 常用指令:

  • FROM
    用法:FROM < image >
    FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
    FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
    FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。
    如果FROM语句没有指定镜像标签,则默认使用latest标签。
  • MAINTAINER
    用法:MAINTAINER < name >
    指定创建镜像的用户。
  • RUN
    用法: RUN “executable”, “param1”, “param2”
    每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的。
  • CMD
    用法:
    CMD “executable”, “param1”, “param2” 或 CMD “param1”, “param2” 或 CMD command param1 param2 (shell form)
    CMD指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
    CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。

CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了。

  • EXPOSE
    用法:EXPOSE < port > [< port >…]
    告诉 Docker 服务端容器对外映射的本地端口
  • ENV
    用法:ENV < key > < value >或ENV < key >=< value > …
    指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留。前者只允许一次设置一个变量,后者允许一次设置多个变量。
    例如
    ENV myName=”John Doe” myDog=Rex\ The\ Dog \ myCat=fluffy
    等同于
    ENV myName John Doe
    ENV myDog Rex The Dog
    ENV myCat fluffy

问题总结

1.启动 Docker Quickstart Terminal 检查boot2docker版本出现

default Boot2Docker ISO is out-of-date
……

这个时候是在下载要等待,下载很慢,如果不想等,可以断网,跳过版本检查。
2.执行docker build 时出现

Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/ubuntu/images. You may want to check your internet connection or if you are behind a proxy.

可以重启解决

docker-machine restart default    //Restart the environment
eval $(docker-machine env default))  //Refresh your environment settings
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值