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 利用容器来运行应用。镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

  1. 仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。Docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另外一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。一.安装 Docker本次实验环境:腾讯云服务器 CentOS 6.7 x86_64前提条件: Docker运行对内核要求比较高,因此一般建议直接在Ubuntu这样的平台运行。但作为一个容器标准,Docker也是支持其他如CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:
  2. CentOS 7(64位)
  3. CentOS 6.5(64位)及以后
  4. 在运行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安装:

# yum install docker

CentOS 6.6

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

# yum -y remove docker

第三步 Install Docker-IO

# yum -y install docker-io

这样完成了Docker的安装。

# /etc/init.d/docker start #启动docker

# docker info #查看 docker 基本信息

二. Docker 基本操作

# docker run -d --name mynginx nginx   #启动nginx镜像,没有会自动pull
# docker stop bfd094233f96   #停止一个容器,根据容器 id 进行删除
# docker rm bfd094233f96   #删除一个容器
# docker attach d20f3dc6cd92  #进入一个正在运行的容器

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,

-i 则让容器的标准输入保持打开。

–name 使用一个自定义的名字

此命令不太好用,建议使用以下命令进入容器:

[root@localhost docker] docker inspect --format "{{.State.Pid}}" mynginx  #获取容器pid 19769
[root@localhost docker] nsenter --target 19769 --mount --uts --ipc --net --pid  #进入容器(推荐方法)
docker run -d -p 91:80 --name mynginx2 nginx    # -p 指定端口映射,将80映射为host的91

存储镜像:

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

载入镜像:

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

移除本地镜像:

# docker rmi training/sinatra

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

# docker rmi $(docker images -q -f "dangling=true")

其中 -q 和 -f 是 quiet,–filter 的缩写, 完整的命令其实可以写着下面这样,是不是更容易理解一点?

# docker rmi $(docker images --quiet --filter "dangling=true")

注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。

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

# docker logs [container ID or NAMES]

删除容器:

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

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

# docker inspect container/image

可以查看:

容器实例的IP地址

端口绑定列表

特定端口映射的搜索

收集配置的详细信息

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

# docker cp container:path hostpath

使用Dockerfile来构建镜像:

# docker build [options] PATH | URL

–rm=true表示构建成功后,移除所有中间容器

–no-cache=false表示在构建过程中不使用缓存

相关推荐

下一篇:Docker 使用指南 (二)—— 搭建本地仓库

构建docker镜像教程

深入浅出话Docker

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术博文

linux 查看系统信息命令(比较全)

linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习...

3237
来自专栏宝哥的专栏

Docker系列学习文章 - docker基本使用(四)

| 导语通过上一篇文章的学习,我们把docker安装好了,那么安装好docker后该怎么使用呢?本篇文章通过一两个例子跟大家讲述下docker的基本使用。然后,...

1K21
来自专栏从零学习云计算

kubernetes学习记录(2)——基于Centos7.2的kubernetes集群自动安装与配置

kubernetes集群的解决方案为:使用VMware Workstation Pro,安装3台Centos7 Minimal版(无图形化界面,防止电脑卡顿)的...

2420
来自专栏Java学习之路

虚拟机工作站创建虚拟机并安装Linux教程 一丶什么是Linux:二丶为什么要学Linux:三丶安装虚拟机工作站和初始化虚拟机:四丶安装Linux操作系统

前言: 今天开始学习一下Linux,之前早就想看,但是一直没时间,最近把其他知识整理完了,终于有时间来看一下Linux了。 本节只是安装虚拟机工作站,虚拟机...

3655
来自专栏还债之路

测试NFS+rsync+sersync+SMTP+shell脚本+cron

1,nfs创建一个目录名为/data/web的目录作为web服务器的后端存储,然后共享使用虚拟用户webuser,因为公司访问量不是很大,所以可以直接用sync...

722
来自专栏静下来

mac下iTerm2支持ssh快捷连接服务器的方法

image.png 以前自己还很少用到Mac来弄服务器这块,就偶尔用下,所以之前一直用Mac自带的终端。 最近经常在外,也就比较常用Mac来,觉得自带的终端还是...

3813
来自专栏java技术学习之道

如何使用 Docker 搭建 Java Web 运行环境

1725
来自专栏13blog.site

CentOS 7.2:Failed to start IPv4 firewall with iptables

问题 系统是centos7.2,且已经安装了iptables服务,但是在执行启动命令后,却报了iptables服务无法正常启动的错误。 启动命令如下: syst...

3445
来自专栏北京马哥教育

25个必须记住的SSH命令

OpenSSH是SSH连接工具的免费版本。telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSS...

2965
来自专栏主机笔记

flashfxp使用sftp协议给linux服务器传输文件

在使用虚拟主机的时候我们一般都用ftp把网站的文件传输到服务器上,但是在使用服务器的时候默认是没有安装ftp软件的,尤其是linux系统命令行的界面对新人来说更...

24810

扫码关注云+社区