一文快速入门Docker推荐

Docker提供一种安全、可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕。如今Docker在互联网公司使用已经非常普遍。本文用十分钟时间,带你快速入门Docker。

Docker是什么

Docker是什么?

官网首页的介绍:

Enterprise Container Platform for High-Velocity Innovation. Securely build, share and run any application, anywhere

百度百科告诉我们:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

《第一本DOCKER书》的简介:

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由Docker公司(www.docker.com,前dotCloud公司,PaaS市场中的老牌供应商)的团队编写,基于Apache 2.0开源协议发行。

Docker的特别之处:

Docker是轻量级的虚拟化技术,启动速度快(大多数Docker容器只需不到1s即可完成启动),单台硬件上可以同时跑成百上千个容器,使得快速扩展,弹性伸缩变得简单。据说,在2016年,京东使用15万Docker集群来保证618高并发场景下的系统稳定。

Docker是跨平台的,支持Windows、Macos、Linux,可以做到“构建一次,到处运行”,解决开发环境和生产环境不一致带来的一系列问题,让开发人员和运维人员可以更加和谐相处。

Docker是开源的,托管于GitHub。

Docker思想

从docker的logo联想docker核心思想

Docker的logo是一个载着集装箱的大鲸鱼,这绝对是对Docker最形象的描述和解释。

对比运输业,在集装箱出现之前,货物无法用统一的标准方式进行搬运,比如有些货物易碎,需要轻拿轻放,有些则不需要。于是铁路、公路、海洋等各种运输之间,需要大量的人力作为货物中转,效率极低,而且成本很高。集装箱出现之后,解决了这个难题,任何货物货物都可以放到这个神奇的箱子里,然后在公路、铁路、海洋等所有运输场景下,这个箱子在运输过程中都是密封的,而且中间的中转工作,都可以通过大型机械搞定,效率大大提升。

Docker正式借鉴了标准集装箱的思想,将集装箱思想运用到了软件领域。Docker为代码提供了一个基于容器的标准化运输系统,可以将任何应用及其依赖的环境(如代码、配置文件、JDK、Tomcat等)打包成一个容器,这个容器可以在几乎所有的操作系统运行。

Docker核心概念

镜像

镜像是docker的基石,用户可以基于镜像来运行自己的容器。

镜像的基础是Docker的联合文件系统,该文件系统是分层的,每个镜像是一个层。由于每个层上面还以有其他层,也就是说,镜像可以在其他镜像(基础镜像)上面进行创建。借用一幅图来帮助理解。图片来源于网络,侵删。

仓库

仓库是保存用户镜像的地方,docker官方仓库地址为 https://hub.docker.com。在Docker Hub上面有许多镜像,包括最简单的hello-world,MySQL等等。当然我们也可以有自己私有的仓库。

容器

容器为应用程序提供了隔离的运行空间。每个容器内都包含一个独享的完整的用户环境,并且一个容器内的运行环境变动不会影响其他容器的运行环境,可以使应用程序在几乎任何地方以相同的方式运行。

容器是基于镜像启动的,容器中可以运行一个或多个进程。在创建容器进程时,指定了这个进程所需要的Namespace参数,使得容器就只能「看」到当前 Namespace 所限定的资源、文件、设备、状态,或者配置。所以说,容器是一种特殊的进程而已,容器的本质就是进程。

Docker安装

以CentOS 7为例,进行安装Docker。

检查系统内核版本

Docker运行在 CentOS 7上,要求操作系统为 64 位,内核版本为 3.10 及以上。

确认本机已经安装了满足要求的Linux内核。使用命令uname -r来检查内核版本信息。

[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64

在CentOS 7中安装Docker

使用命令yum install -y docker安装Docker,“-y”表示不询问,使用默认配置进行安装。

启动Docker服务,并设置为开机自启动

使用下列命令:

systemctl start docker.service
systemctl enable docker.service

输入docker version,返回版本信息表明Docker安装成功。

[root@localhost ~]# docker version
Client:
 Version:     1.13.1
 API version:   1.26
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:   go1.10.3
 Git commit:   b2f74b2/1.13.1
 Built:      Wed May 1 14:55:20 2019
 OS/Arch:     linux/amd64

Server:
 Version:     1.13.1
 API version:   1.26 (minimum version 1.12)
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:   go1.10.3
 Git commit:   b2f74b2/1.13.1
 Built:      Wed May 1 14:55:20 2019
 OS/Arch:     linux/amd64
 Experimental:  false

Docker实战——Hello World

入门实战怎么能少得了经典的“Hello World”?

拉取镜像

其实DockerHub上已经有了这个镜像,名字叫“hello-world”。直接从DockerHub拉取镜像,命令和Git有些相似:docker pull hello-world

[root@localhost docker]# docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
1b930d010525: Pull complete
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for docker.io/hello-world:latest

查看镜像

查看拉取到的Docker镜像:docker images

[root@localhost ~]# docker images
REPOSITORY       TAG         IMAGE ID      CREATED       SIZE
docker.io/hello-world  latest       fce289e99eb9    5 months ago    1.84 kB

运行镜像

运行镜像:docker run hello-world。看到打印出如下的内容,代表运行成功。

[root@localhost docker]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  (amd64)
 3. The Docker daemon created a new container from that image which runs the
  executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
  to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker常用命令

docker images : 列出本地的镜像

docker pull image_name:拉取镜像。如果没有指定具体的镜像标签,会自动拉取latest标签的镜像。

docker search image_name:在Docker Hub上查找镜像

docker start container:启动和运行容器

docker run [OPTIONS] image_name:基于镜像创建并启动一个容器

常用选项:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

docker logs container:获取容器的日志信息

docker attach container:进入容器

exit:退出容器

docker exec container command:在运行的容器中执行命令

docker stop container:停止容器

docker rm container:删除容器

docker save -o image_name.tar image_name:导出镜像

docker ps:查看正在运行的容器

docker ps -a:查看系统中容器列表

docker top container:查看容器内的进程

docker stop daemon_dave:停止守护容器

Docker构建镜像

如何构建镜像?

构建一个自己的镜像需要两步:

编写Dockerfile。Dockerfile 告诉Docker如何制作镜像以及每一步是怎样的。

  • Docker执行Dockerfile中的指令的流程是这样的:

    • Docker从基础镜像运行一个容器
    • 执行一条指令,对容器进行修改
    • 提交到一个新的镜像层
    • Docker再基于刚才提交的镜像运行一个新容器
    • 执行Dockerfile中的下一条指令,知道所有指令执行完毕。
  • 使用docker build命令构建。

编写Dockerfile

每个Dockerfile的第一条命令必须是FROM。FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8

MAINTAINER 指令用来标志该镜像所有者和联系方式。例如:MAINTAINER James "×××@example.com"

VOLUME 指令用来向基于镜像创建的容器添加卷。一个卷可以是存在一个或者多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供共享数据和数据持久化的功能。

CMD 指令用来指定一个容器启动时要运行的命令。

ENTRYPOINT指令与CMD指令很相似。

WORKDIR 指令用来从镜像创建一个新容器的时候,在容器内部设置一个工作命令,ENTRYPOINT或CMD指令指定的程序会在这个目录下执行。

ENV 指令用来在在镜像构建过程中设置环境变量。例如:ENV TEST_PATH /home/test

RUN 指令用来在当前镜像中运行指定的命令。例如:RUN apt-get install -y nginx

EXPOSE 指令用来告诉Docker该容器内的应用程序将使用容器的指定端口。例如:EXPOSE 80

ADD 指令用来将构建环境下的文件和目录复制到镜像中。 例如:ADD docker-0.0.1-SNAPSHOT.jar app.jar

COPY 指令与ADD 类似,不同点在与COPY只关心在构建上下文中复制本地文件,而不会提取和解压。

LABEL 指令用于为Docker镜像添加元数据。例如:LABEL name=test description="a container is used to test"

Dockerfile实例:

FROM java:8
MAINTAINER James "×××@example.com"
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

执行docker build

执行docker build命令后看到“BUILD SUCCESS”表明构建成功,可以使用docker run命令来运行了。

总结

本文介绍了Docker是什么、Docker思想、Docker核心概念、Docker安装等内容,看完本文,Docker算是入门了,但是万里长征只走完了第一步,学无止境,共勉。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker入门安装教程(小白篇)

    Dokcer介绍: Docker是一种容器相关的技术,简单来说你可以把它当做一个微型的独立系统,在这个系统里面运行各种软件,然后又在linux服务器上或者是电脑上运行这个系统,这个系统就被称为Docker容器,而运行Docker容器的机器就被称为宿主机.Docker的特性使它可以原封不动的在不同的环境下移植运行,这就避免了同样的代码因为服务器上各种环境细微差别导致的BUG,而且Docker操作简单,易于上手. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发布.

  • 从0开始了解Docker入门(小结)

    序 Docker 自开源以来受到了各大公司的广泛关注,或许现在互联网公司的运维体系不承载在 Docker(或 Pouch 等)之上都不好意思说自己的互联网公司. 本文会简单介绍下 Docker 的基础概念,入门级使用方式和一些使用 Docker 能大大提升效率的场景. 原理 对 Docker 最简单并且带有一定错误的认知就是 "Docker 是一种性能非常好的虚拟机". 正如上面所说,这是有一定错误的说法.Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不

  • Docker安装和简单使用入门教程

    安装 由于我本人使用的linux系统,原生支持docker,相对安装还是比较简单的 1:使用下面的官方脚本安装: wget -qO- https://get.docker.com/ | sh 2:输入下面的命令验证是否可以查看版本号,可以就是安装成功 sudo docker version 3:建议把当前使用的用户加到Docker用户组,就可以不用很次都sudo了 sudo usermod -aG docker your_username 4:重新登录,sudo权限才会成效 logout 至此,

  • docker快速入门教程

    10分钟教会大家如何玩转Docker,这是 1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是一个开源的应用容器引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行的 Linux 系统上,通过这种方式实现虚拟化. 提到虚拟化,大家应该十分熟悉了,有VMware,Xen,KVM等等很多.那么,Docker和VM有什么不同呢,我们用官网

  • Docker 入门快速上手指南

    为什使用 Docker? 为什么要使用 Docker?就个人而言,Docker 能提供的最大便利在于这种技术面对程序环境迁移时所表现的卓越性. 这种性能使得我们不必在分享代码或项目合作.交接时附带一长串的环境配置指南进行版本限制和扩展描述:也不必再特意记录自己对现有环境的配置改变,以免下次系统迁移时手足无措:更为重要的是,Docker 在提供以上解决方案的同时没有把解法变得复杂,相反的,它提供了一种更快.更容易的方式. Docker 独到的对增量和文件层的应用,使得镜像下载.共享 & 隔离.版本

  • Docker学习笔记之docker入门

    学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器: 每个容器使用端口如何维护?(方法1写在Dockerfile里面,不灵活:方法2在run的时候-p指定): 那这样的话,会存在好多linux用户,相当于每一个容器就要维护一个物理机(虚拟): 需要一套工具来管理维护镜像.容器的操作和状态: 目前主流使用docker都是应用到哪些场景中? 1. docke

  • Docker简单安装与应用入门教程

    本文实例讲述了Docker简单安装与应用.分享给大家供大家参考,具体如下: 作为一个初次接触Docker的人来说,最大的问题是Docker是什么?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.比如,我们在笔记本上编译测试通过的容器可以批量地在生产环境中部署,可以用于自动化测试和持续集成.发布. 还可以用于web应用的自动化打包和发布:在服务型环境中部署和调整数据库或其他的后台应用:从头编译或者扩展现有的OpenShift或Cloud Foundry

  • 什么是docker Docker入门教程第一篇

    Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Docker的特点.特性.原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生态和Dockerfile,并使用Dockerfile构建一个nginx环境. 缘起 在几个月前听说Docker,但是一直没有时间去研究,前一段时间趁着azure免费试用,赶紧实验一下,但是卡在了ubuntu基础镜像的下载上(由于国内网络的特殊原因),所以也就搁浅了,这里把经验和体会分享一下. Doc

  • Docker快速入门以及环境配置详解

    前言 数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术.本文中我们就要介绍的这种技术名叫Docker.Docker能让开发者简单.快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索. 简介 Docker 最初 dotCloud 公司内部的一个业余项目

  • Docker Swarm入门实例详解

    Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. 1. Swarm 认识 Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具.Docker 1.

随机推荐