docker之入门——安装及基本命令

Docker简介

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

(背景),云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker趁势而兴。

为什么用 Docker 

容器的启动可以在秒级实现,比传统的虚拟机方式要快得多

对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器

docker的出现,让开发/测试/线上的环境部署,成为便利一条龙。

更快速的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

对比传统虚拟机总结


特性


容器


虚拟机


启动


秒级


分钟级


硬盘使用


一般为 MB


一般为 GB


性能


接近原生


弱于


系统支持量


单机支持上千个容器


一般几十个

Docker基本概念

Docker架构

host --- 主机载体 == docker安装的地方

继承类比:

Class2   extents     Class1    ---------------------- Object o = new Class2

--------------------------------------此时,o对象的结构中,有Class1的成员结构

image2 extents     image1   ----------------------Container c = new image2

-------------------------------------此时,c容器中,有image1的文件

Docker 镜像

Docker 镜像就是一个只读的模板。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。

镜像可以用来创建 Docker 容器。

Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

Docker 容器

Docker 利用容器来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

Docker 仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。

当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

容器、镜像的运行关系

安装 Docker

Docker 支持 CentOS6 及以后的版本。

卸载

1.查询安装过的包

yum list installed | grep docker

docker-engine.x86_64                 17.03.0.ce-1.el7.centos         @dockerrepo

2.删除安装的软件包

yum -y remove docker-engine.x86_64

3.删除镜像/容器等

rm -rf /var/lib/docker

CentOS6

对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下

$ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

$ sudo yum install docker-io

CentOS7

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

$ sudo yum install docker     ##不是最新版本

#最新版安装

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo yum install docker-ce

查看docker版本

docker version

docker info

启动docker

sudo service docker start

设置随系统启动

sudo chkconfig docker on

Docker初体验

docker run hello-world  ##进入docker世界

Docker基本操作

容器操作

docker [run|start|stop|restart|kill|rm|pause|unpause]

  • run/create[镜像名]:  创建一个新的容器并运行一个命令
  • start/stop/restart[容器名]:启动/停止/重启一个容器
  • kill [容器名]: 直接杀掉容器,不给进程响应时间
  • rm[容器名]:删除已经停止的容器
  • pause/unpause[容器名]:暂停/恢复容器中的进程
  • ps:查看容器列表(默认查看正在运行的容器,-a查看所有容器)
  • inspect[容器名]:查看容器配置元数据
  • exec -it [容器名] /bin/bash:进入容器环境中交互操作
  • logs --since="2019-02-01" -f --tail=10 [容器名]:查看容器日志 
  • cp path1 [容器名]:path 容器与主机之间的数据拷贝
  • export -o test.tar [容器名] / docker export [容器名]>test.tar : 文件系统作为一个tar归档文件
  • import test.tar [镜像名:版本号]:导入归档文件,成为一个镜像

docker [ps|inspect|exec|logs|export|import]

镜像操作

docker images|rmi|tag|build|history|save|load]

  • images:列出本地镜像列表
  • rmi [镜像名:版本]:删除镜像
  • tag [镜像名:版本] [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库
  • build -t [镜像名:版本] [path]:Dockerfile 创建镜像
  • history [镜像名:版本]: 查看指定镜像的创建历史
  • save -o xxx.tar [镜像名:版本] /  save [镜像名:版本]>xxx.tar : 镜像保存成 tar 归档文件
  • load --input  xx.tar / docker load<xxx.tar : 从归档文件加载镜像

镜像与容器原理及用法探究

history命令查看镜像层

例:docker history hello-world

显示镜像hello-world分三层,其中两个空层

查看镜像文件

镜像存放在imagedb里

一般在image/overlay2/imagedb/content/sha256下

打开一个镜像文件查看其内容:

cat f09fe80eb0e75e97b04b9dfb065ac3fda37a8fac0161f42fca1e6fe4d0977c80

{
"architecture": "amd64",
"config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"Cmd": ["/hello"],
"ArgsEscaped": true,
"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"container": "8e2caa5a514bb6d8b4f2a2553e9067498d261a0fd83a96aeaaf303943dff6ff9",
"container_config": {
"Hostname": "8e2caa5a514b",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"/hello\"]"],
"ArgsEscaped": true,
"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"created": "2019-01-01T01:29:27.650294696Z",
"docker_version": "18.06.1-ce",
"history": [{
"created": "2019-01-01T01:29:27.416803627Z",
"created_by": "/bin/sh -c #(nop) COPY file:f77490f70ce51da25bd21bfc30cb5e1a24b2b65eb37d4af0c327ddc24f0986a6 in / "
}, {
"created": "2019-01-01T01:29:27.650294696Z",
"created_by": "/bin/sh -c #(nop) CMD [\"/hello\"]",
"empty_layer": true
}],
"os": "linux",
"rootfs": {
"type": "layers",
"diff_ids": ["sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3"]
}
}

----其中,history数组内,标识了镜像的历史记录(与history命令内容对应)

----rootfs的diff_ids中,对应了依赖使用中镜像层文件(history命令中size大于0的层)

查看镜像层文件

层文件在layerdb里

ll /var/lib/docker/image/overlay2/layerdb/sha256

#镜像层文件内结构:

镜像与容器总结

一个镜像就是一层层的layer层文件,盖楼而成,上层文件叠于下层文件上,若上层文件有与下层文件重复的,则覆盖掉下层文件重复的部分,如下图:

---------初始挂载时读写层为空。

---------当需要修改镜像内的某个文件时,只对处于最上方的读写层进行了变动,不复写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本文件所隐藏,当 docker commit 这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。

---------联合挂载是用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(aufs、overlay等) 实现分层合并的方式。

容器创建详解

交互式创建容器并进入:

docker run -it --name centos centos /bin/bash(前台进程)

------------------------exit退出也关闭容器; Ctrl+P+Q退出不关闭容器

后台启动容器:

docker run -d --name nginx nginx

进入已运行的容器:

docker exec -it nginx /bin/bash

查看容器的元数据: docker inspect nginx

绑定容器端口到主机:

docker run -d -p 8080:80 --name nginx nginx:latest

挂载主机文件目录到容器内:

docker run -dit -v /root/peter_dir/:/pdir --name cent centos

复制主机文件到容器内:

docker cp anaconda-ks.cfg cent:/var

原文地址:https://www.cnblogs.com/xingege/p/11386118.html

时间: 2024-10-29 22:14:58

docker之入门——安装及基本命令的相关文章

Redis入门——安装与基本命令

1. Redis安装 下载地址:https://github.com/MSOpenTech/redis/releases 下载zip文件后直接解压 2. 启动Redis服务端 解压目录下执行redis-server.exe redis.windows.conf,启动服务 3. 命令行连接redis服务端 解压目录下执行redis-cli.exe -h 127.0.0.1 -p 6379 4. Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及

docker的安装及基本命令

docket的安装及基本命令 下载各个版本Docker地址:https://download.docker.com/linux/static/stable/x86_64/ docker概述docker是在liunx容器里运行应用的开源工具,是一种轻量级的"虚拟机".docker的logo设计为蓝色鲸鱼,鲸鱼可以看作为宿主机,而集装箱可以理解为相互隔离的容器.每个集装箱都包含自己的应用程序.即可以是一个应用也可以是一套服务,甚至是一个操作系统. docker和虚拟机的区别 特性 dock

Docker入门安装

一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位.系统内核版本为 2.6.32-431 或者更高版本. 1.使用命令unanme -r查看内核版本. 2.如果之前安装过,需要卸载旧版本. $ sudo yum remove docker d

docker入门-安装篇

一.docker介绍 1:docker官网 www.docker.com 2:github  https://github.com/docker/docker.github.io 3:开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的linux发行版上,移植很方便由go语言编写,基于apache2.0协议发布,基于linux kernel,要想在win下运行需要借助一个vm(虚拟机)来实现 ,自2013年开始,近些年发展迅猛,docker从1.13x开始,版本分为社区版ce和

《Docker技术入门与实战》pdf

下载地址:网盘下载 内容简介  · · · · · · [编辑推荐] <Docker技术入门与实战>是中国首部docker著作,一线Docker先驱实战经验结晶,来自IBM和新浪等多位技术专家联袂推荐! <Docker技术入门与实战>结合企业生产环境,深入浅出地剖析 Docker 的核心概念.应用技巧.实现原理以及生态环境,为解决各类问题提供了有价值的参考. [内容简介] 在云计算时代,开发者将应用转移到云上已经解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在.Docke

docker-9 supervisord 参考docker从入门到实战

参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具. 本小节将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Supervisor 可以更好的控制.管理.重启我们希望运行的进程.在这里我们演示

Docker新手入门:基本用法

Docker新手入门:基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker,今天终于算是正式开始学习了.在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少麻烦,主要就是没有特别经典的书!Docker的<第一版Docker书>和<Docker技术入门与实战>普遍评价不高,而<Docker开发实践>和<Dockeru源码分析>又是2015年最近才出的,评价不是很多.综合看了下,最终还是选择了<Docker开发实

Docker从入门到精通系列(1)---第一个web应用

本文为minimicall原创文章,转载需注明出处:http://blog.csdn.net/minimicall 在继<阿里云部署Docker>之后,我决定系统的出一系列<Docker从入门到精通>的深度记录文章,这源于有一天图灵出版社的一个编辑联系我,问我有没有兴趣写Docker方面的书籍进行出版. 本文的目标是建立一个Docker web app.这样,你就可以直观的感受,docker是如何部署一个web应用. 首先,我们建立一个空目录来存放我们需要的文件. 我们建立的是一个

Docker Swarm入门教程

迄今为止,Docker Swarm问世已有一年的时间.Docker Swarm的首次隆重亮相要追溯到2014年,Docker官方在当年12月的DockerConEU峰会上正式推出了Docker Swarm.Docker Swarm不仅是一种用于管理Docker及Docker Machine的集群管理工具,同时也是一种CLI工具,可用来控制Docker主机.Docker官方意在通过Docker Swarm提供一套全面的.能够覆盖容器运行的各个环节的集成式解决方案,并突破自身的现有定位,实现从单纯提