docker入门与基础操作

By AverageJoeWang
 标签:

一.基础概念介绍

容器有三个很基础的核心概念,分别为镜像,仓库,容器。镜像可以理解为一个系统或者服务(未运行)文件,他的状态就是一个静态的(与运行态做对比)的文件,镜像可以是一个操作系统,可以是一个服务(tomcat等服务)。仓库是用来存放镜像的。容器和我们生活中的容器做类比,容器是运行态的,里面的对象是镜像。
容器和传统虚拟机的区别图
下面对docker的三大核心概念进行简要介绍。

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

仓库

  • 仓库是集中存放镜像文件的场所。每个仓库中包含多个镜像,每个镜像有不同的id和标签(tag)区别。

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

  • 最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。

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

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

容器

  • Docker 利用容器来运行应用。

  • 镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

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

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

二.安装与启动docker服务

ubuntu系统安装

# 查看系统版本
lsb_release -a
# 查看linux内核
uname -c
# 更新
sudo apt-get update
# 安装curl工具
sudo apt-get install curl
# 安装docker
curl -k -sSl https://get.docker.com | sudo sh

centos系统安装docker

#在centos上安装
yum update
yum install -y docker

macos安装docker

启动docker服务

#centos
service docker start

三.镜像相关操作

镜像可以直接从很多网站下载,这里是从网易云仓库拉取的公共镜像

# 拉取镜像到本地
docker pull hub.c.163.com/public/centos:7.2-tools
docker pull hub.c.163.com/public/ubuntu:16.04-tools
#查看本地镜像,会显示镜像的id和tag等信息
docker images
#查看镜像详细信息
docker inspect 1196ea15dad6
# 搜寻镜像
docker search 镜像名字
# 删除,在删除镜像的id的时候先删除镜像的标签,然后删除镜像文件
docker rmi 镜像tag/镜像id
# 查看容器进程
docker ps

四.容器相关操作

利用已有的镜像来创建容器

# 利用已有的镜像启动容器输出hello world然后退出镜像
docker run 镜像id  /bin/bash "hello world" 
# 启动一个bash终端,进行交互,当终端退出之后,容器就自动终止
docker run -t -i 镜像id
# 守护态运行,-v /root:/local 是数据卷相关
docker run -d --name 容器名字 -v /root:/local --privileged=true 镜像id  ping localhost
docker exec -ti 容器id /bin/bash
# 容器制作镜像
docker commit 容器id 新的镜像tags
# 将运行的容器导出成文件
docker export 容器id > 文件名
# 导入
docker import 文件名

创建容器时顺序

在利用docker run来创建并启动容器时,docker在后台运行的是:

  • 检查本地是否有指定的容器,没有则从共有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,在只读的镜像层外挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
  • 从地址池配置一个IP地址给容器
  • 执行用户指定的应用程序
  • 执行完毕之后容器被终止