Docker入门

在这里插入图片描述

  1. Docker是什么
    Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs),它是完整的一套容器管理系统
    Docker提供了一组命令,让用户更加方便直接地使用容器技术,而无需要过多关心底层内核技术

    注1:什么是容器
    一个容器就相当于一个虚拟机

    注2:docker用途,目前有三大类
    1.提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
    2.提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
    3.组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

  2. Docker与虚拟化
    传统来看,虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现 而容器技术则更为优雅,
    它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化 因此,有人甚至把它称为
    “新一代的虚拟化”技术,并将基于容器打造的云平台亲切地称为“容器云”毫无疑问,
    Docker 正是众多容器技术中的佼佼者,是容器技术发展过程中耀眼的一抹亮色

    注1:在这里插入图片描述

    注2:Docker和一个正常的虚拟机有何区别?
    在这里插入图片描述

     当前,Docker内部使用的是Linux容器技术(LXC),这是运行在与它的宿主机器同样的操作系统上。
     这准许它可以和宿主机器共享许多系统资源。它也会使用AuFS作为文件系统,也为你管理网络。
    
  3. Docker虚拟化的好处
    好处一:应用部署方便

    举个简单的例子,假设用户试图基于最常见的 LAMP (Linux+Apache+MySQL+PHP )组
    合来构建网站 按照传统的做法,首先需要安装 Apache MySQL PHP 以及它们各自运
    行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大
    量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意
    味着更多的时间代价和不可控的风险 可以想象,如果应用数目变多,事情会变得更加难以处理

    更为可怕的是, 旦需要服务器迁移(例如从阿里云迁移到腾讯云),往往需要对每个
    应用都进行重新部署和调试 这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率
    究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致

    Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台
    这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器
    是否是同一类型的平台 这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险

    好处二:服务器同等配置,性能更优,利用率更高
    让我们假设你有一个容器镜像(image)容量是1GB,如果你想用一个完整的虚拟机来装载,
    你得需要容量的大小是1GB乘上你需要虚拟机的数量。但使用Linux容器虚拟化技术(LXC)和AuFS,你可以共享1GB容量,
    如果你需要1000个容器,假设他们都运行在同样的系统影像上,你仍然可以用稍微比1GB多一点的空间来给容器系统
    因此,借助经过全面调优的容器系统,你就可以在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。

  4. 核心概念
    Docker大部分的操作都围绕着它的三大核心概念: 镜像、容器和仓库

    注册服务器 -> 仓库(CentOS/RedHat) -> 镜像 -> 容器(一台虚拟机)

    4.1.镜像
    Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
    例如,一个镜像可以包含一个基本的操作系统环境(例如:CentOS7),可以把它称为一个 CentOS7 镜像

    4.2.容器
    1.Docker 容器类似于一个轻量级的沙箱, Docker利用容器来运行和隔离应用
    2.容器是从镜像创建的应用运行实例 它可以启动、开始、停止 删除,而这些容器都是彼此相互隔离、互不可见的
    3.可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)
    以及运行在其中的应用程序打包而成的盒子

    4.3.仓库
    Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。

    注1:Docker 仓库和仓库注册服务器( Registry)的区别
    分际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库 每个仓库集中存放某一类镜像,
    例如存放 CentOS 操作系统镜像的仓库,其中可能了很多不同版本的镜像,它则被称CentOS仓库

    详情:
    images/Docker仓库和仓库注册服务器.png

  5. CentOS7 安装docker(在线方式)

    注:Docker支持运行CentOS版本:CentOS 7.X

    5.1.内核版本信息检查

    $ uname -r

    5.2 卸载可能存在的旧版本

    $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

    注:旧版本的docker叫做docker或者docker-engine,如果有安装,先卸载其以及其依赖,新版本的docker叫做docker-ce

    docker-ce(社区版,免费)
    docker-ee(专业版,收费)

    5.3 安装必要的系统工具

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

    注:安装依赖软件(yum-utils提供yum-config-manager包,用来管理yum配置文件;lv2和device-mapper-persistent-data为dockerdevicemapper存储设备的必须依赖)

    5.4 添加docker-ce安装源

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

    默认开启的是stable稳定版仓库,如果想要安装test测试版或者是边缘版本可使用如下命令开启相关模式,关闭的话只需要将–enable参数换成–disable(可选)

    $ yum-config-manager --enable docker-ce-edge
    $ yum-config-manager --enable docker-ce-test

    5.5 更新yum缓存

    $ yum makecache fast

    5.6 安装docker-CE

    $ yum -y install docker-ce

    注:
    1)默认安装的是最新版本的稳定版
    2)查看版本列表请使用如下命令:

    $ yum list docker-ce --showduplicates | sort -r

    3)如果要安装特定版本的docker-CE请使用如下命令格式:

$ yum install docker-ce-<VERSION STRING>

5.7 验证

 5.7.1 查看docker服务是否启动

 $ systemctl status docker   //查看运行状态

 5.7.2 启停服务

 $ systemctl start docker    //启动
 $ systemctl stop docker     //停止
 $ systemclt restart docker  //重启

 5.7.2 运行第一个容器(经典的hello world)

 $ docker run hello-world

 输入以上命令后,窗口有输出,表示docker安装成功 


 注:查看docker的版本,第二个命令是详细查看
     docker --version 或 docker info
  1. 镜像
    Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载
    (默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库

    镜像相关操作:

    6.1 配置加速器
    国内从Docker Hub下载镜像速度很慢,我们可以配置阿里云专属加速器来解决

    6.1.1 浏览器访问并登陆阿里云(淘宝或支付宝帐号登陆也可以)
    https://www.aliyun.com/

    6.1.2 登陆后,进入阿里云“控制台”,搜索“容器镜像服务”,然后点击菜单:“镜像中心”–>“镜像加速器”
    最后,将容器右边的“加速器地址”复制下来即可

    6.1.3 设置容器镜像服务的密码(可选)
    容器镜像服务(Container Registry)提供多地域镜像托管能力,稳定的国内外镜像构建服务,便捷的镜像授权功能,
    方便用户进行镜像全生命周期管理。在开通流程中,您需要设置独立于账号密码的Registry登录密码,便于镜像的上传、下载。
    注1:此步骤为可选,如果需要使用阿里云来管理你的镜像 ,此步骤必须设置

    6.1.4 修改docker相关配置

    $ mkdir -p /etc/docker
    添加下面内容(地址替换成上面的加速器地址):
    $ tee /etc/docker/daemon.json <<-'EOF'
    {
        "registry-mirrors": ["你的加速地址"]
    }
    EOF
    
    
    注:在这里可以先将registry-mirrors换成自己的阿里云专属加速器地址后,在复制到工具里面去执行(方便)
    

    6.1.5 重新加载daemon
    $ systemctl daemon-reload

    6.1.6 重启docker
    $ systemctl restart docker

    6.2 搜索镜像

    $ docker search 镜像名称

    例如:docker search mysql

    6.3 下载镜像

    $ docker pull 镜像名

    例如, 获取一个 centos 系统的基础镜像可以使用如下的命令

    未指定版本一般会使用latest(最新的)版本

    $ docker pull centos

    或者直接指定版本

    $ docker pull centos:版本号

    6.4 查看宿主机上的镜像

    $ docker images

    注1:查看image位置
    ## /var/lib/docker为docker默认安装目录
    cd /var/lib/docker/containers
    ls

    6.5 删除镜像

    $ docker rmi 镜像ID/标签

    例如:
    $ docker rmi 2ca708c1c9cc
    $ docker rmi centos:latest 或 docker rmi centos:版本号

    注1:如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像。或者强制删除镜像
    $ docker rmi -f centos:版本号
    -f, -force: 强制删除镜像, 即使有容器依赖它
    注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,
    先删除依赖该镜像的所有容器, 再来删除镜像

    下面的内容后续再讲

    6.6 保存镜像

    $ docker commit -m=“description about images” --author=“author” {container_id} {repository/images_name:tag}

    6.7 推送镜像到代码仓库(以阿里云docker平台为例)

    $ docker login --username=your_username registry.cn-beijing.aliyuncs.com
    $ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
    $ docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]

    6.8 使用Dockerfile创建新的镜像(注意:末尾有一个点,表示当前路径)

    $ docker build -t “repository/images_name:tag” .

  2. Docker容器
    容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,
    镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

    如何理解:类->实例,镜像->容器

    常用操作

    7.1 启动、停止、重启容器命令

    $ docker start 容器ID或name
    $ docker stop 容器ID或name
    $ docker restart 容器ID或name

    7.2 查看当前运行的容器

    $ docker ps

    7.3 查看所有容器

    $ docker ps -a

    7.4 删除容器

    $ docker rm 容器ID/容器NAME

    注1:主要支持的选项包括
    -f, --force=false 是否强行终止并删除一个运行中的容器
    -1, --link=false :删除容器的连接 ,但保留容器;
    -v, --volumes=false :删除容器挂载的数据卷
    注2:删除容器,还可以参考附录三,可根据条件删除

    7.5 创建容器(重点)

    $ docker create -it centos:latest
    $ docker create -it --name tomcat01 centos:latest

    注1:命令说明
    create:关键字
    centos:latest:即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,
    不存在就从公有仓库下载
    -it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
    –name:指定生成的容器的名字,允许空,如果不指定会自动生成

    注2:此时,通过如下命令,可以查看到刚刚创建的容器
    $ docker ps - a
    注3:create命令新建的容器处于停止状态,可以使用start命令来启动它
    $ docker start 容器ID
    注4:在这里插入图片描述

    7.6 启动容器(重点)

    $ docker start 容器ID/name

    注2:docker ps 查看已启动容器,注意:此时容器状态为UP

    7.7 进入容器(重点)

    $ docker exec -it 容器ID/容器NAME /bin/bash

    简写

    $ docker exec -it 容器ID/容器NAME bash

    注1:只有在容器启动的时候即UP状态才能进入容器终端

    7.8 创建\启动\进入容器(run=create+start)

    新建->启动->进入容器

    $ docker run -it centos:latest /bin/bash

    指定了端口号

    $ docker run -it -p 7001:8001 centos:latest /bin/bash

    使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口

    $ docker run -it -P --name tomcat03 centos:latest /bin/bash

    此命令没有进入容器,可以之后再进入

    更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以通过添加-d参数来实现:
    $ docker run -it -d --name webapp centos:latest
    $ docker exec -it webapp /bin/bash

    参数说明:
    -p:端口映射,格式为:主机(宿主)端口:容器端口
    -P: 注意是大写P,使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口
    -d:后台运行模式
    –name:容器的名字

    7.9 退出容器

    退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
    如果不想继续运行:按【ctrl+d】或输入exit

    7.10 宿主机和docker容器之间复制文件

    $ docker cp 宿主机绝对路径 容器id:路径

  3. 查看Docker容器内部信息

    8.1 进入容器内部获取信息
    docker exec -it 容器ID/容器NAME /bin/bash
    如果此时已进入容器内部,可分别执行hostname、ip addr、env这三个命令可以获取相关信息
    hostname
    ip addr
    env

    8.2 在宿主机,执行docker exec命令
    获取容器的hostname:docker exec 容器ID/容器NAME hostname
    获取容器ip地址:docker exec 容器ID/容器NAME ip addr
    获取容器环境变量:docker exec 容器ID/容器NAME env

    8.3 在宿主机,使用docker inspect命令
    推荐使用docker inspect来获取信息,这个命令会返回一个json字符串,里面以key-value的格式准备了该容器相关的信息,
    内容十分丰富,可以一次性取得全部内容,也可以返回指定key对应的信息
    docker inspect 容器ID/容器NAME

    如果我们只对其中的一些感兴趣,例如hostname、ip地址、环境变量,该如何查看呢
    查看数据所在节点,根据节点位置编写命令,例如:
    hostname位于Config.Hostname这个节点位置,所以执行命令docker inspect -f {{.Config.Hostname}} tomcat001即可获取到hostname

附录一:英文
Registry: 登录;域名注册局;注册局;注册表项;注册机构
pull:拉

附录二:如何卸载原先安装的 docker
1.移除docker:
$ yum remove docker-ce

2.删除Docker安装目录
$ rm -rf /var/lib/docker

3.验证是否删除成功
docker info

bash: /usr/bin/docker: No such file or directory

我们可以看到已经无法找到 docker 安装目录,证明 卸载成功

附录三:关于删除容器
方法一:
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
$ sudo docker ps -a|grep Exited|awk ‘{print $1}’
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
$ sudo docker rm docker ps -a|grep Exited|awk '{print $1}'

方法二:
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
$ sudo docker rm $(sudo docker ps -a -q)

方法三:
#根据容器的状态,删除Exited状态的容器
$ sudo docker rm $(sudo docker ps -qf status=exited)

方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
$ sudo docker container prune (推荐)

附录四:docker常用命令(不断补充中)
1.docker查看容器的cpu占用率
docker stats

### Docker入门教程 #### 什么是DockerDocker是一种用于开发、交付和运行应用程序的开源平台,它通过容器化技术简化了软件部署的过程。简单来说,Docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以放笔一样,几乎任何程序都可以被放置在Docker中并进行隔离运行[^1]。 #### 安装与验证 为了确保Docker环境已经正确安装,在终端执行`docker run hello-world`命令。如果能够正常运行并返回`hello, world`消息,则表明Docker已成功配置[^2]。 #### 常用命令概述 以下是几个常用的Docker命令及其功能: - **帮助启动类** - `systemctl start docker`: 启动Docker服务。 - `systemctl stop docker`: 停止Docker服务。 - `systemctl restart docker`: 重启Docker服务。 - `systemctl status docker`: 查看Docker服务的状态。 - `systemctl enable docker`: 设置开机自启Docker服务。 - **查看信息类** - `docker info`: 显示Docker系统的整体信息。 - `docker --help`: 展示Docker的整体帮助文档。 - `docker 具体命令 --help`: 获取特定Docker子命令的帮助文档。 - **镜像管理类** - `docker images [-a|-q]`: 列出本地存储的所有镜像;加上参数-a可列出所有历史版本,加-q仅显示镜像ID。 - `docker search [某镜像名[--limit N]]`: 搜索公共仓库中的指定镜像,并可通过--limit控制结果数量。 - `docker pull [镜像名[:TAG]]`: 下载远程镜像至本地,默认不带标签则拉取最新版。 - `docker system df`: 统计镜像、容器以及数据卷占用空间情况。 - `docker rmi -f [镜像ID|镜像名[:TAG]|$(docker images -qa)]`: 删除一个或多个镜像,支持批量删除全部镜像。 - **容器操作类** - 创建并进入交互模式容器: ```bash docker run -it ubuntu bash ``` 这条指令基于Ubuntu基础镜像创建一个新的容器实例,并开启了一个交互式的Bash Shell供用户直接操控该容器内部环境[^3]。 --- #### 实践案例——构建第一个容器 假设我们希望尝试使用官方提供的Redis数据库作为例子来熟悉整个流程: 1. 使用`docker search redis`查找可用的Redis镜像; 2. 执行`docker pull redis:latest`获取最新的稳定版本; 3. 接着利用下面这条语句建立关联端口映射后的实际运行态容器: ```bash docker run -d -p 6379:6379 --name myredis redis:latest ``` 以上步骤展示了如何从零开始搭建属于自己的小型缓存服务器! --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值