您的位置:首页 > 运维架构 > Docker

Docker的基本概念和操作

2017-09-10 11:00 405 查看

1        概论

1.1 定义

“build once, configure once and run anywhere”。

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

虚拟化技术包括硬件级虚拟化(如VMWare、VirtualBox、AWS、阿里云等)和操作系统级虚拟化(如Docker)。

Docker是操作系统虚拟化(容器化)技术中目前最流行的一种实现。

1.2 应用场景

Docker通常用于如下场景:

Ø        web应用的自动化打包和发布;

Ø        自动化测试和持续集成、发布;

Ø        在服务型环境中部署和调整数据库或其他的后台应用;

Ø        从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker能处理的事情包括:

Ø        隔离应用依赖

Ø        创建应用镜像并进行复制

Ø        创建容易分发的即启即用的应用

Ø        允许实例简单、快速地扩展

Ø        测试应用并随后销毁它们

2        基础概念

2.1 Docker镜像

类似虚拟机的快照,是自定义一套的操作系统环境。

创建镜像有两种方式:

Ø        从公共Docker仓库里选择一个镜像在其基础上修改(常用)。

Ø        自己创建(后续详解)。

2.2 Docker仓库

Docker仓库用于保存镜像, Docker 仓库分为公有和私有仓库。公有的 Docker 仓库名字为Docker Hub,提供了大量的镜像集合供使用。

2.3 Docker容器

使用镜像创建Docker容器,可以理解为镜像的一个实例,容器里可以运行应用。容器可以对外开放服务端口。

容器是设计来运行一个应用的,而非一台机器。停止一个Docker容器,对初始状态(创建容器所用的镜像的状态)做的所有变化都会丢失,所以业务数据不能存储在容器里,容器只是运行应用的环境。

Docker设计者极力推崇“一个容器一个进程的方式”,容器被设计用来运行单进程,无法很好地模拟一个完整的环境(如需模拟完整环境则参阅LXC)。

当容器被启动后,一个读写层会被添加到镜像的顶层。当分配到合适的网络和IP地址后,需要的应用程序就可以在容器中运行了。

2.4 数据卷

数据卷使得开发者可以不受容器生命周期影响而进行数据持久化。它们表现为容器内的空间,但实际数据保存在容器之外,从而允许我们在不影响数据的情况下销毁、重建、修改、丢弃容器。

Docker允许定义应用部分和数据部分,并提供工具可以将它们分开。使用Docker时必须做出的最大思维变化之一就是:容器应该是短暂和一次性的。

卷是针对容器的,可以使用同一个镜像创建多个容器并定义不同的卷。卷保存在运行Docker的宿主文件系统上,可以指定卷存放的目录,或让Docker保存在默认位置。保存在其他类型文件系统上的都不是一个卷。卷还可以用来在容器间共享数据。

2.5 链接

Docker允许在创建一个新容器时引用其它现存容器,在刚创建的容器里被引用的容器将获得一个别名,则视为这两个容器链接在了一起。

容器启动时,将被分配一个随机的私有IP,其它容器可以使用这个IP地址与其进行通讯。这点非常重要,原因有二:一是它提供了容器间相互通信的渠道,二是容器将共享一个本地网络。

3        安装(CentOS 7)

参考:https://docs.docker.com/engine/installation/linux/centos/

3.1 前置条件

安装Docker需要64位的内核为3.10或以上的Linux系统。

可使用以下命令查看内核:

# uname -r

输出如:3.10.0-229.el7.x86_64

3.2 通过yum安装

3.2.1  更新yum软件包到最新版本

# yum update

3.2.2  添加docker yum repo

# vi /etc/yum.repos.d/docker.repo

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

3.2.3  安装

# yum install -y docker-engine

3.2.4  启用服务

# systemctl enable docker.service

3.2.5  启动

# systemctl start docker

3.2.6  验证

# docker run --rm hello-world

docker将自动下载hello-world:latest镜像,下载完成后运行结果包含:

Hello from Docker!

This message shows that your installation appears to beworking correctly.

则表示docker已正确安装。

3.3 通过官方脚本安装

下载官方的docker安装脚本进行安装,本质上也是通过yum安装,步骤与yum安装类似。

# yum update

# curl -fsSL https://get.docker.com/ | sh

# systemctl enable docker.service

# systemctl start docker

# docker run --rm hello-world

3.4 创建docker group

Docker的守护进程启动后会为名称为docker的用户组下的用户赋予Unix Socket的读写权限,有需要的话可以创建docker用户组。

4        镜像操作

在使用 docker 的时候,首先需要拉取镜像,然后再通过一个容器来运行这个镜像。通过镜像是可以生成容器的。同时,当容器运行到一个时间的时候,我们也可以通过 docker commit,将容器的可读可写层转化为镜像。因此,镜像和容器是相生相伴的,缺一不可的。

本节以下载ubuntu镜像为例。

4.1 查看本机镜像

# docker images

4.2 搜索镜像

# docker search <镜像名关键词>

4.3 下载镜像

# docker pull ubuntu

docker pull 会默认从 docker hub 拉取镜像,如果本地已经有了就直接结束,否则的话会根据文件系统分层逐个下载。

4.4 push镜像到远程库

4.4.1       tag镜像

# docker tag <镜像名称[:TAG]> <要标记成的镜像名称[:TAG]>

如:

# docker tag ubuntu my-ubuntu-tag

4.4.2       push

# docker push <标记成镜像名称[:TAG]>

4.5 删除镜像

# docker rmi <要删除的镜像名称>

5        容器操作

5.1 从镜像运行一个含shell的容器

# docker run -i -t <镜像名称> /bin/bash

如:

# docker run -i -t ubuntu /bin/bash

5.2 查看运行的容器

# docker ps

运行容器后,可通过该命令查看到运行的容器的信息,如ID:f70b2a474d88。

5.3 容器的启停

包括启动、停止、重启、强行停止和删除。

# docker start f70b2a474d88

# docker stop f70b2a474d88

# docker restart f70b2a474d88

# docker kill f70b2a474d88

# docker remove f70b2a474d88

5.4 持久化容器

容器在退出后并不会更改镜像,如果希望保存容器中的数据,就需要通过 commit 来保存成镜像

# docker commit <容器ID> <要保存成的镜像名>

如:

# docker commit f70b2a474d88 my-ubunt-checkpoint

5.5 查看容器配置

# docker inspect <容器ID>

6        参考

官网:https://www.docker.com/

http://www.docker.org.cn/book/docker/what-is-docker-16.html

http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?pn=1

http://archive.ghostcloud.cn/docker%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A-%E5%85%A5%E9%97%A8%E7%AF%87.pdf

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息