CHAPTER 1 Docker入门

docker 入门

    • 1. docker简介
    • 2. docker核心概念
    • 3. 安装docker引擎
      • 3.1 yum安装
      • 3.2 压缩包安装
      • 3.3 由insecure-registry引起的启动异常
      • 3.4 docker升级
      • 3.5 docker卸载

1. docker简介

  1. Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  2. Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
    docker官网
    百度百科

2. docker核心概念

Docker 的三大核心概念:

  • 镜像 (Image)
  • 容器(Container)
  • 仓库(Repository)
  1. Docker 镜像 Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。 例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件)。 可以把它称为一个 Apache 镜像。 镜像是创建 Docker 容器的基础。 通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
  2. Docker 容器 Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用。 容器是从镜像创建的应用运行实例。 它可以启动、开始、停止、 删除,而这些容器都是彼此相互隔离、互不可见的。 可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空 间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
  3. Docker 仓库 Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。 有时候我们会将 Docker 仓库和仓库注册服务器( Registory)混为一谈,并不严格区分。 实 际上,仓库注册服务器是存放仓库的地方,其上往往 存放着多个仓库。 每个仓库集中存放某一类镜像,往 往包括多个镜像文件,通过不同的标签( tag)来进行 区分。 例如存放 Ubuntu 操作系统镜像的仓库,被称Ubuntu仓库,其中可能包括 16.04、 18.04 等不同 版本的镜像。 根据所存储的镜像公开分享与否, Docker 仓库 可以分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是官方提供的 Docker Hub,其中存放着数量庞大的镜像供用户下 载。 国内不少云服务提供商(如腾讯云、 阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。 当然,用户如果不希望公开分享自己的镜像文件, Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。 当用户创建了自己的镜像之后就可以使用 push命令将它上传到指定的公有或者私有仓 库。 这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上 pull 下来就可以了。

3. 安装docker引擎

3.1 yum安装

(本文以Centos系统为演示用例,docker引擎为CE版本)
Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用, 包括 Linux 操作系统(如 Ubuntu、 Debian, CentOS、 Red.hat 等), macOS 和 Windows 操作系统, 以及 IBM、亚马逊、微软等知名云平台。
用户可以访问 Docker 官网的 Get Docker ( https://www.docker.com/get-docker)页面,查 看获取 Docker 的方式,以及 Docker 支持的平台类型

目前 Docker 支持 Docker 引擎、 Docker Hub、 Docker Cloud 等多种服务。
Docker引擎:包括支持在桌面系统或云平台安装 Docker,以及为企业提供简单安全 弹性的容器集群编排和管理;
DockerHub :官方提供的云托管服务,可以提供公有或私有的镜像仓库;
DockerCloud :官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支持容器化项目,还有 CI、 CD 功能。

Docker引擎 目前分为两个版本:社区版本( Community Edition, CE)和企业版本 (Enterprise Edition, EE)。 社区版本包括大部分的核心功能,企业版本则通过付费形式提供 认证支持、镜像管理、 容器托管、 安全扫描等高级服务。 通常情况下,用户使用社区版本可以满足大部分需求;若有更苛刻的需求,可以购买企业版本服务。 社区版本每个月会发布一次尝鲜( Edge)版本,每个季度( 3、 6、 9、 12 月)会发行一次稳定( Stable)版本。 版本号 命名格式为“年份.月份”,如 2018 年 6 月发布的版本号为 vl8.06。

CentOS 环境下安装 Docker
Docker 目前支持 CentOS 7 及以后的版本。 系统的要求:64 位操作系统,内核版本至少为 3.10。

首先,为了方便添加软件源,以及支持 devicemapper 存储类型,安装如下软件包:

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

添加 Docker 稳定版本的 yum 软件源:

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

之后更新 yum 软件源缓存,并安装 Docker:

$ sudo yum update 
$ sudo yum install -y docker-ce 

最后,确认 Docker 服务启动正常 :

$ sudo systemctl start docker 
$ sudo systemctl status docker 

3.2 压缩包安装

  1. 下载二进制包并解压
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
tar -xf docker-19.03.9.tgz
mv docker/* /usr/bin/
  1. 配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3s9106.mirror.alncs.com"]
}
EOF
  1. 注册docker服务
    在 /etc/systemd/system 目录下创建一个docker.service文件,用于注册docker服务和开机启动
#创建一个docker.service文件
vi /etc/systemd/system/docker.service

#内容如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
  1. 给service文件设置权限
chmod 777 /etc/systemd/system/docker.service
  1. 重新加载配置文件,启动,开机启动
[root@node-251 docker]# systemctl daemon-reload
[root@node-251 docker]# systemctl start docker
[root@node-251 docker]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
  1. 查看
[root@node-251 docker]# docker -v
Docker version 19.03.9, build 9d988398e7
[root@node-251 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

3.3 由insecure-registry引起的启动异常

/etc/systemd/system/docker.service文件中如果如下启动

ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1

则在/etc/docker/daemon.json配置镜像加速的时候需要注意,添加的insecure-registries的IP不能够和启动冲突
否则无法启动

3.4 docker升级

注意:
不要删除/var/lib/docker目录, 否则就会删除已安装的镜像及容器
不要删除/var/lib/docker目录, 否则就会删除已安装的镜像及容器
不要删除/var/lib/docker目录, 否则就会删除已安装的镜像及容器

如果已安装版本是通过yum安装的,卸载掉再重装就可以了

[root@localhost docker]# yum list installed | grep docker
docker.x86_64                       2:1.13.1-209.git7d71120.el7.centos @extras  
docker-client.x86_64                2:1.13.1-209.git7d71120.el7.centos @extras  
docker-common.x86_64                2:1.13.1-209.git7d71120.el7.centos @extras  
#卸载
[root@localhost ~]# yum -y remove docker*
#更新源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看安装包
[root@localhost ~]# yum list docker-ce --showduplicates|sort -r

docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
#安装
[root@localhost ~]# yum -y install docker-ce-18.03.1.ce-1.el7.centos
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker --version
Docker version 18.03.1-ce, build 9ee9f40
  • 报错1: Error response from daemon: Unknown runtime specified docker-runc
    原因:这是因为低版本升级到高版本之后不兼容 修改参数进行解决
    解决:更改/var/lib/docker/containers目录中的文件参数,把docker-runc替换为runc

      grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
    

    注:grep -rl:递归搜索目录和子目录,只列出含有匹配的文本行的文件名,而不显示具体的匹配内容
    xargs:衔接执行之前得到的值
    总体意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出来,并把‘docker-runc’字符为runc

  • 报错2:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/09f8444f734ca18130ac4e2dafdcd3a19dd2986c9474bd0a50c87c0af559a831/merged: invalid argument
    原因:SELINUX要么都关闭,要么都开启
    解决:推荐修改CentOS下的/etc/selinux/config 将SELINUX=disabled 改成 SELINUX=permissive

    vi /etc/selinux/config
    # 找到SELINUX=enable修改为SELINUX=permissive
    SELINUX=permissive
    # 保存
    :wq
    

    或者修改docker关闭selinux

    vi /etc/sysconfig/docker
    # 找到OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false"
    # 删除 --selinux-enabled
    OPTIONS="--log-driver=journald --signature-verification=false"
    # 保存
    :wq
    

    另外docker-18.03已经废弃使用overlay1了,overlay2存储才是今后所支持的,因此不建议按照网上某文章的教程那样将docker的存储驱动改回overlay1。改回overlay1的方式只是治标不治本,正解是修改selinux配置。

  • 报错3:Error response from daemon: manifest for jenkins:latest not found
    原因:像jenkins或者某些软件没有最新版本(latest)
    解决:所以并非docker的问题,手动指定版本pull即可

3.5 docker卸载

  1. 停止所有运行的容器
    使用以下命令停止所有正在运行的容器:
sudo docker stop $(docker ps -aq)

这个命令会停止所有容器,包括正在运行的容器和已经停止的容器。

  1. 删除所有容器
    使用以下命令删除所有容器:
sudo docker rm $(docker ps -aq)

这个命令会删除所有容器,包括正在运行的容器和已经停止的容器。

  1. 删除所有镜像
    使用以下命令删除所有镜像:
sudo docker rmi $(docker images -q)

这个命令会删除所有镜像,包括没有被容器使用的镜像。

  1. 卸载 Docker 引擎
    使用以下命令卸载 Docker 引擎:
sudo yum remove docker-ce docker-ce-cli containerd.io

这个命令会删除 Docker 引擎及其依赖的软件包和文件。

  1. 删除 Docker 数据目录
    使用以下命令删除 Docker 数据目录:
sudo rm -rf /var/lib/docker

这个命令会删除 Docker 数据目录,包括所有容器、镜像和数据卷。

完成上述步骤后,Docker 已经被完全卸载。

你可能感兴趣的:(#,Docker整理,docker,容器,运维)