Loading

Docker介绍,安装和常用的命令

Docker是Google公司推出的Go语言开发的,基于Linux内核的cgroupnamespaceAUFS类的UnionFS等技术。对进程进行封装格力,属于操作系统层面的虚拟化技术。隔离的进程独立于宿主和其他的进程,称为容器。

Docker是在容器的技术上进行了进一步的封装,从文件系统、网络互连到进程格力等等,简化了容器的创建和维护,使得Docker技术比虚拟化技术更为轻便、快捷。

Docker与传统虚拟机对比

Virtual Machines:传统虚拟机技术是虚拟出一套硬件,然后再其上运行一个完整的操作系统,然后应用服务再运行在其上。

Docker: 容器内的应用程序直接运行与宿主的内核,容器和宿主公用一个内核,只是实现了一个隔离的操作。它比传统的虚拟机更轻便。

为什么用docker?

  • 更高效的利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松的维护和拓展

docker架构

客户端,主机,远程仓库

docker是使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建docker容器。

image:是用于创建docker容器的一个模版

container: 是独立运行的一个或一组应用。

client:客户端通过API进行容器的管理。

Docker安装

Centos 安装docker: docker CE支持64位的centos 7 ,且内核版本不低于3.10。

卸载旧版本sudo yum remove docker docker-common docker-selinux docker-engine

使用yum安装sudo yum install docker-ce

安装必要的软件依赖以及增加docker-ce 的yum源:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --app-repo https://download.docker.com/linux/centos/docker-ce.repo

使用脚本安装docker:

在测试或者开发环境中,docker官方为了简化安装流程,提供了一套便捷的安装脚本,Centos系统上可以使用这套工具安装curl -fsSL https://get.docker.com -o get-docker.sh , sudo sh get-docker.sh --mirror Aliyun

启动docker CE

sudo systemctl enable docker #设置开机启动
sudo systemctl start docker

创建docker用户组

默认情况下,docker命令会使用Unix socket与docker引擎通信,只有root用户和docker组用户才可以访问docker引擎的Unix socker,一般linux不使用root进行操作,所以需要将docker的用户加入docker用户组

sudo groupadd docker #建立docker组
sudo usermod -aG docker $USER #将当前用户加入docker组

测试docker是否安装正确:docker run hello-world

删除docker安装包: sudo yum remove docker-ce

删除docker镜像:sudo rm -rf /var/lib/docker

Centos 7配置镜像加速器

对于使用systemd的系统,请在/etc/docker/daemon.json中写入如下内容(如果文件不存在,新建即可):

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

重启服务生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

可以使用docker info来查看docker的信息,其中的Registry Mirrors这个栏位会显示出docker镜像仓库的地址。

Docker 常用的命令

Docker镜像操作

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

  • 从仓库中获取镜像
  • 管理本地主机上的仓库
  • 介绍镜像实现的基本原理

获取镜像:从docker仓库中拉取镜像的命令是 docker pull。

docker pull [选项] [Docker Registry地址[:端口号]/]仓库名[:标签]

# 默认地址仓库为Docker hub,仓库名是两段式的 <用户名>/<软件名> 如果不给用户名,则默认为library
docker pull ubuntu:16.04
docker pull library/ubuntu:16.04

运行镜像

有了镜像,就可以以进行为模版,启动并运行一个容器。

# -it : -i是交互式操作,-t是终端
# --rm: 容器退出后,自动删除
# bash: 放在镜像名后的命令,是有一个交互式的shell,此处为bash
docker run -it --rm ubuntu:16.04 bash

列出镜像docker images lsdocker images

查看镜像、容器、数据卷所占空间:docker system df

显示虚悬镜像(dangling image,即仓库名和标签都为):docker image ls -f dangling=true

删除虚悬镜像:docker image prune

删除本地镜像

命令: docker image rm [选项] <镜像1> [<镜像2>...]

批量删除镜像

docker image rm $(docker image ls -q ubuntu) #删除所有仓库名为ubuntu的镜像

如果有多个版本的镜像,需要删除所有在ubuntu:16.04之前的镜像:

docker image rm $(docker image ls -q -f before=ubuntu:16.04)

注:删除镜像前要先删除掉所有存活的或者未存活的容器。

容器操作

容器是独立运行的一个或一组应用,以及他们的运行态环境。

创建并启动容器(docker run ...)

启动容器分两种,一种是基于镜像新建容器,

如:docker run ubuntu:16.04 /bin/echo 'hello world'

一种是将终止态的容器重新启动,docker container start

docker run -t -i ubuntu:16.04 /bin/bash

-t 让docker分配一个伪终端并绑定到容器的标准输入上,-i让容器的标准输入保持打开。

执行完这个命令后,docker会在后台执行:

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

后台运行:很多时候让docker在后台运行,而不是直接吧执行命令的结果输出到当前宿主机下。可以使用-d参数。

如: 不使用-d ,docker run hello-workd会吧日志答应到宿主机控制台,docker run -d hello-world不会输出日志,只会打印容器id,输出结果用 docker logs查看

停止容器

# 停止运行中的容器
docker container stop xx

#终止状态的容器用如下命令可以查看到
docker container ls -a

#启动终止状态下的容器
docker container start xx
#重启一个运行态的容器
docker container restart xx

进入容器(exec)

使用docker exex -it xx /bin/bash可以进入容器

导入(import)导出(export)容器:

导入 :docker export xx > 导出文件名.tar

导入:cat 导出文件名.tar |docker import -镜像用户名/镜像名:镜像版本docker import -i 导出文件名.tar

也可以导入远程http的资源。

删除容器

#删除终止的容器
docker container rm ubuntu:16.04
#删除运行中的容器
docker container rm -f ubuntu:16.04

#删除所有终止状态的容器
docker container prune
posted @ 2019-10-27 18:13  Changing_now  阅读(268)  评论(0编辑  收藏  举报