Docker

  • Docker版本命名
  • CentOS安装Docker
  • CentOS卸载Docker
  • 镜像加速
  • Docker命令
  • Docker镜像操作
  • 从仓库获取镜像
  • 运行镜像
  • 列出镜像
  • 删除本地镜像
  • 启动容器
  • 后台运行
  • 停止运行的容器
  • 进入容器
  • 导出和导入容器
  • 删除容器


Docker版本命名

Docker在1.13版本之后,从2017年的3月1日开始,版本命名规则变为如下:

项目

说明

版本格式

YY.MM

Stable

每个季度发行

Edge

每个月发行

同时Docker划分为CE和EE。CE即社区版(免费,支持周期三个月),EE即企业版,强调安全,付费使用。

CentOS安装Docker

1、系统要求
Docker CE支持64位版本CentOS 7,并且要求内核版本不低于3.10。
2、卸载旧版本
旧版本的Docker称为docker或者docker-engine,使用以下命令卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine
3、使用yum安装
sudo yum install docker-ce
注意:如果安装的是centos7 minimal版本,执行安装提示“没有可用软件包”这个时候需要安装必要的软件依赖及更新增加docker-ce yum源。
sudo yum install -y yum-untils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、使用脚本安装
在测试或者开发环境中Docker官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS系统上可以使用这套脚本安装:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
5、启动Docker CE
sudo systemctl enable docker #设置开机启动
sudo systemctl start docker
6、建立docker用户组
默认情况下,docker命令会使用Unix socket与Docker引擎通讯。而只有root用户和docker用户组的用户才可以访问Docker引擎的Unix socket。一般Linux系统上不会直接使用root用户进行操作。因此,需要将使用docker的用户加入docker用户组。
sudo groupadd docker #建立docker组
sudo usermod -aG docker $USER #将当前用户加入docker用户组
7、测试Docker是否安装正确
docker run hello-world #启动一个基于hello-world镜像的容器

CentOS卸载Docker

1、删除docker安装包
sudo yum remove docker-ce
2、删除docker镜像
sudo rm -rf /var/lib/docker

镜像加速

国内从Docker Hub拉取镜像有时会遇到困难,此时可以配置镜像加速器。docker官方和国内很多云服务器商都提供了国内加速器服务。
实现加速如下所示:
1、对于使用system的系统,请在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)

{
 “registry-mirrors”:[
 “http://hub-mirror.c.163.com”
 ]
 }


2、重启服务生效
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker命令

容器是独立运行的一个或者一组应用,以及他们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用

Docker镜像操作

Docker运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker会从镜像仓库下载该镜像。

从仓库获取镜像

从Docker镜像仓库获取镜像的命令是docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体的选项可以通过docker pull --help命令看到,这里我们说一下镜像名称的格式。
Docker镜像仓库地址:地址格式一般是<域名/IP>[:端口号]。默认地址是Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,即<用户名>/<软件名>。对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。
docker pull ubuntu:16.04
上面的命令中没有给出Docker镜像仓库地址,因此将会从Docker Hub获取镜像。而镜像名称是ubuntu:16.04,因此将会获得官方镜像library/Ubuntu仓库中标签为16.04的镜像。

运行镜像

有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的Ubuntu:16.04为例,如果我们打算启动里面的bash并且进行交互式操作的话,可以执行下面的命令。
docker run-it --rm ubuntu:16.04 bash
-it:这是两个参数,一个是-i:交互式操作,一个是-t:终端。
–rm:这个参数是说容器推出后随之将其删除。
Ubuntu:16.04:这是指用Ubuntu:16.04镜像为基础来启动容器。
bash:放在镜像后的是命令,这里我们希望有个交互式Shell,因此用的是bash。
退出用exit。

列出镜像

想要列出已经下载下来的镜像,可以使用docker image ls(docker images)命令。列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。
查看镜像、容器、数据卷、所占用的空间。docker system df
仓库名、标签均为的镜像称为虚悬镜像(dangling image)。docker image ls -f dangling=true
一般来说虚悬镜像已经失去了存在的价值,是可以随意删除的。docker image prune

删除本地镜像

删除本地镜像:docker image rm [选项]<镜像1>[<镜像2>…],其中镜像可以是镜像短ID、镜像长ID、镜像名或者镜像摘要。
批量删除镜像:docker image rm $(docker image ls -q ubtuntu)
删除xx版本之前的镜像:docker image rm $(docker image ls -q -f before=ubtuntu:16.04)

启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为docker的容器是轻量级的,用户可以随时删除和创建新容器。
1、新建并启动
docker run
输出一个“Hello Word”,之后终止容器。
docker run Ubuntu:16.04 /bin/echo ‘Hello World’
2、启动已终止容器
docker container start 或者docker start
启动一个bash终端,允许用户进行交互。
docker run -it Ubuntu:16.04 /bin/bash
-t让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
当利用docker run 来创建容器时,docker在后台运行的标准操作包括:

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

后台运行

通过添加-d参数实现后台运行
不使用-d参数运行容器,会把日志打印在控制台
使用-d参数运行容器,不会输出日志,只会打印容器id(输出结果可以用docker log查看)
容器是否会长久运行,是和docker run指定的命令有关,和-d参数无关。

停止运行的容器

可以使用docker container stop来终止一个运行中的容器。
终止状态的容器可以用docker container ls -a查看。
终止状态的容器可以通过docker container start命令重新启动。
docker container restart命令会将一个运行态的的容器终止,然后再重新启动它。

进入容器

在容器为后台启动时,可以用docker exec命令进入到容器中。
主要跟-i -t参数
docker exec -it 容器ID /bin/bash

导出和导入容器

导出容器:docker export 容器ID > 导出文件名.tar
从容器快照文件中再导入为镜像
cat 导出文件名.tar | docker import -镜像用户/镜像名:镜像版本
通过指定URL或者某个目录来导入
docker import URL

删除容器

删除容器 :docker container rm Ubuntu:16.04
如果容器处于运行中,可以添加-f参数。docker会发送 SIGKILL信号给容器
查看所有处于中止状态的容器:docker container ls -a
清理所有处于中止状态的容器:docker container prune