Docker 从入门到精通(一)基本操作

简介:

 一,为什么要用 Docker?

Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。它由Docker公司的团队编写,基于Apache 2.0开源协议授权。它提供了一个简单、轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

Docker 的特点:

1,更快速的交付和部署

2,更高效的虚拟化

3,更轻松的迁移和扩展

4,更简单的管理

容器技术与传统虚拟机性能对比:

Docker与虚拟机建构对比

Docker 容器本质上是宿主机上的一个进程。Docker 通过 namespace 实现了资源隔离,通过 cgroups 实现了资源的限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。

Docker有五个命名空间:

进程、网络、挂载、宿主和共享内存

为了隔离有问题的应用,Docker运用Namespace将进程隔离,为进程或进程组创建已隔离的运行空间,为进程提供不同的命名空间视图。这样,每一个隔离出来的进程组,对外就表现为一个container(容器)。需要注意的是,Docker让用户误以为自己占据了全部资源,但这并不是”虚拟机”。

Docker 中的三个概念:镜像,容器,仓库

1、镜像(image):Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。

2、容器( Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境,Docker 利用容器来运行应用。镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

3、仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。

Docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另外一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

二,安装 Docker

前提条件:Docker运行对内核要求比较高,因此一般建议直接在Ubuntu这样的平台运行。但作为一个容器标准,Docker也是支持其他如CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:CentOS 7(64位)CentOS 6.5(64位)及以后在运行CentOS 6.5及以后版本时,需要内核版本>=2.6.32-431,因为这些内核包含了运行Docker的一些特定修改。

Docker默认使用AUFS作为存储驱动,但是AUFS并没有被包括在Linux的主线内核中。CentOS中可以使用Device Mapper作为存储驱动,这是在2.6.9内核版本引入的新功能。我们需要先确认是否启用该功能:

CentOS 7安装

Docker RPM包已经包含在CentOS-Extra仓库中,所以我们可以直接使用Yum安装:

 
 
  1. # yum install docker 

CentOS 6.6安装

需要注意的是,CentOS6.6中,已经有一个同名docker的可执行系统程序包。所以Docker RPM包命名为docker-io,我们先卸掉docker。

 
 
  1. # yum -y remove docker 

第三步 Install Docker-IO

 
 
  1. # yum -y install docker-io 

这样完成了Docker的安装。

 
 
  1. # /etc/init.d/docker start #启动docker  
  2. # docker info #查看 docker 基本信息 

三, Docker 基本操作

 
 
  1. # docker search centos #搜索容器 
  2.   
  3. # docker pull centos #下载容器 
  4.   
  5. # docker images #查看当前存在的镜像 
  6.   
  7. # docker run centos /bin/echo 'hello world' #运行一条命令后直接退出 
  8.   
  9. # docker run --name mydocker -it centos /bin/bash #进入docker容器 
  10. -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, 
  11. -i 则让容器的标准输入保持打开。 
  12. name 使用一个自定义的名字 
  13. # docker run -d --name mynginx nginx #启动nginx镜像,没有会自动pull 
  14.   
  15. # docker stop bfd094233f96 #停止一个容器,根据容器 id 进行删除 
  16.   
  17. # docker rm bfd094233f96 #删除一个容器 
  18.   
  19. # docker attach d20f3dc6cd92 #进入一个正在运行的容器 
  20. 此命令不太好用,建议使用以下命令进入容器: 
  21.  
  22. [root@localhost docker]# docker inspect --format "{{.State.Pid}}" mynginx #获取容器pid 
  23. 19769 
  24. [root@localhost docker]# nsenter --target 19769 --mount --uts --ipc --net --pid #进入容器(推荐方法) 
  25.   
  26. # docker run -d -p 91:80 --name mynginx2 nginx # -p 指定端口映射,将80映射为host的91 

存储镜像:

 
 
  1. # docker save -o ubuntu_14.04.tar ubuntu:14.04 

载入镜像:

 
 
  1. # docker load < ubuntu_14.04.tar 或者使用  
  2. # cat ubuntu.tar | docker import - test/ubuntu:v1.0 

移除本地镜像:

 
 
  1. # docker rmi training/sinatra 

清理所有未打过标签的本地镜像:

 
 
  1. # docker rmi $(docker images -q -f "dangling=true"
  2. 其中 -q 和 -f 是 quiet,–filter 的缩写, 完整的命令其实可以写着下面这样,是不是更容易理解一点?  
  3. # docker rmi $(docker images --quiet --filter "dangling=true") 
  4. 注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。 

要获取容器的输出信息,可以通过 docker logs 命令。

 
 
  1. # docker logs [container ID or NAMES] 

删除容器:

 
 
  1. # docker rm 默认并不会删除运行中的容器 

有关容器和镜像的底层信息:

 
 
  1. # docker inspect container/image 

可以查看:

容器实例的IP地址端口绑定列表

特定端口映射的搜索

收集配置的详细信息

从容器内复制文件到指定的路径上:

 
 
  1. docker cp container:path hostpath 

使用Dockerfile来构建镜像:

 
 
  1. docker build [options] PATH | URL  
  2. –rm=true表示构建成功后,移除所有中间容器  
  3. no-cache=false表示在构建过程中不使用缓存 




本文作者:佚名
来源:51CTO
目录
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
docker部署jumpserver及入门
docker部署jumpserver及入门
|
2月前
|
应用服务中间件 nginx Docker
【与时俱进】网络工程师必备技能:Docker基础入门指南,助你轻松应对新时代挑战!
【8月更文挑战第22天】随着容器技术的发展,Docker已成为开发与运维的关键工具。本文简要介绍Docker——一种开源容器化平台,能让应用程序及依赖项被打包成轻量级容器,在任何Linux或Windows机器上运行。文中涵盖Docker的安装步骤、基础命令操作如启动服务、查看版本、拉取与运行容器等。并通过实例演示了如何运行Nginx服务器和基于Dockerfile构建Python Flask应用镜像的过程。这些基础知识将助力网络工程师理解Docker的核心功能,并为实际应用提供指导。
56 2
|
1天前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
15天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
10天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
11天前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
|
19天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
84 6
|
2月前
|
Kubernetes Cloud Native Docker
云原生入门指南:从Docker到Kubernetes的旅程
【8月更文挑战第26天】在这篇文章中,我们踏上了一段探索云原生世界的旅程。从理解Docker容器的基础概念开始,逐步深入到使用Kubernetes进行容器编排,每一步都以通俗易懂的语言和实际代码示例为引导。文章旨在启发读者思考云原生技术如何改变软件开发、部署和管理的方式,以及这些变革对个人职业生涯的意义。通过这段旅程,我们将发现,正如甘地所言,成为我们希望在世界上看到的改变,正是通过学习和实践云原生技术来实现的。
下一篇
无影云桌面