Docker 入门

Docker自2013年发布至今, 一直广受瞩目,被认为可能会改变软件行业。

但是,许多人并不清楚Docker到底是什么,要解决什么问题,好处又在哪里?本文简单介绍一下,希望对大家有帮助。
​​在这里插入图片描述

为什么要使用docker

在这里插入图片描述
想必大家都听过这样一句话:“它在我的机器可以跑了”(It works on my machine)。

软件开发面临的最大的麻烦之一,就是环境配置。为了确保软件在不同设备上能够正常运行,必须保证操作系统的设置各种库和组件的安装,只有它们都正确了,软件才能成功跑起来。

既然环境配置如此麻烦,那能不能从根本上解决问题,即将原始环境一模一样的复制过去呢?

其中一种解决方案就是使用虚拟机(virtual machine)。它可以让我们在一种操作系统里面运行另一种操作系统,比如通过VMware软件在Windows系统里面安装Linux系统,两个系统独立运行,互不影响。虽然虚拟机可以将完整的环境复制过去,但是因为它是一个操作系统,也存在一些问题:

  1. 资源占用多
    虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。
  2. 冗余步骤多
    虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
  3. 启动慢
    启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

由于虚拟机存在上述缺点,Linux发展出了另一种虚拟化技术,Linux容器。
Linux容器不是一个操作系统,而是对进程进行隔离。由于容器是进程级别的,所以相对虚拟机来说,有很多优势:

  1. 启动快
    容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
  2. 资源占用少
    容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
  3. 体积小
    容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

Docker 是什么

Docker 属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就再不用担心环境问题啦。
在这里插入图片描述
在这里插入图片描述

DockerVMware
虚拟化轻量级虚拟化(只虚拟出来容器所需要的资源,软件层面)完全虚拟化(虚拟化硬件)
启动速度秒级分钟级
运行性能**接近原生5%左右损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别系统级(更彻底)
操作系统主要支持Linux几乎所有
封装程度只打包项目代码和依赖关系,共享宿主机内核完整的操作系统

Docker的架构

docker使用客户端-服务器架构。 Docker客户端(client) 与 守护进程(Docker daemon)进行对话,该守护进程 完成了构建、运行和分发 Docker 容器的繁重工作。

Docker的用途

Docker 的主要用途,目前有三大类。

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

Docker的安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition 缩写为CE)和 企业版(Enterprise Edition 缩写为EE)。

Docker CE的安装请参考官方文档

Mac

Centos

Ubuntu

Debian

Windows

Centos 安装 Docker 示例

Docker需要用户具有sudo权限,非root用户为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组(官方文档

  • 卸载之前的Docker

    yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
    
  • 使用rpm存储库安装

    在新主机上首次安装Docker引擎之前,您需要设置Docker存储库。之后,您可以安装和更新存储库中的Docker。

  • 安装yum-utils

    yum install -y yum-utils
    
  • 配置阿里云镜像

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 更新rpm库中的软件包

    yum update
    
  • 安装最新docker

    列出docker源

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

    安装最新版

    docker-ce是 Docker Engine 的社区版、docker-ce-cli是Docker Engine的命令行界面(启动、删除等命令)、

    containerd.io是 Docker 引擎的核心组件、docker-compose-plugin是 Docker Compose 的插件。

    docker-buildx-plugin (多平台构建、多层构建等等,可选)

    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
  • 检查docker版本号

    docker -v
    
  • 启动docker

    systemctl start docker
    // 配置系统启动后自动运行
    systemctl enable docker
    

Docker 常用命令

在这里插入图片描述

  • 查询Docker Hub上的镜像
    docker search 镜像名称
    
  • 拉取镜像
    docker pull 镜像名称 
    # 指定版本 
    docker pull 镜像名称:版本号
    
  • 查询已下载镜像
    docker image ls
    
  • 删除镜像
    docker image rm 镜像id 
    # 或者 
    docker rmi 镜像名称:版本号
    
  • 创建并运行docker容器(如果本地镜像不存在,自动从hub搜索镜像并下载)
    docker run -it  --name xxx(自定义容器名称)  -d 镜像名称
    # 参数解释 也可通过docker run
    -it 交互式终端
    --name 容器唯一名称
    -p 映射端口  格式:linux的访问端口:容器内的运行程序端口 如(3320:3306)
    --privileged 开放权限 (默认值true)
    --network 自定义网络
    --ip 自定义ip
    -v 挂载卷(Volume)或主机目录到容器中  格式:主机目录:容器目录 或 volume_name:容器目录
    -e 设置容器中运行程序的环境参数  如:MYSQL_ROOT_PASSWORD=123
    -d 后台运行容器并打印容器ID
    
  • docker日志查询
    docker logs 容器名称
    
  • 查询正在运行的docker容器
    docker ps 
    #查询所有容器 
    docker ps -a
    
  • 查看容器的内部状况
    docker inspect 容器名称
    # 将输出重定向使用 >>
    docker inspect 容器名称 >> /var/xx.txt
    # 将输出内容进行过滤, 使用管道
    docker inspect 容器名称 | grep 查询字段
    
  • 进入容器
    # 常用方式
    docker exec -it 容器名称 bash
    -it 交互式终端
    bash 指定shell为bash
    
  • 退出容器
    exit
    
  • 容器关闭与重启
    # 停止容器
    docker stop 容器名称
    # 重启容器
    docker restart 容器名称
    # 运行容器
    docker start 容器名称
    

    容器启动时会根据启动的先后顺序自动生成ip地址。当然,也可以在启动时,为容器分配固定的ip地址。

  • 删除容器
    docker rm 容器名称/容器id(前四位)
    

Docker 容器配置

配置本地镜像

从网络获取docker镜像太慢,设置阿里云的镜像库。

  1. 修改 /etc/*docker*/*daemon*.json 文件,配置阿里云镜像库。

    {
      "registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
    }
    
  2. 重启docker

    systemctl restart docker
    

设置docker的静态ip

docker容器的ip地址在每次启动后启动顺序设置ip地址,为解决ip地址变动的问题,我们有必要设置docker内部ip地址固定。

  1. 创建自定义网络(network)
    docker network create --driver bridge --subnet=自定义网络ip/16 --gateway=网关值 自定义网络名称
    
  2. 查看网络
    docker network ls
    

感谢大家读到这里,后续还会有其他相关文章,欢迎继续阅读。

在这里插入图片描述
文章参考:https://ruanyifeng.com/blog/2018/02/docker-tutorial.html

​​

​​

​​

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值