docker

docker

简介

  • 使用容器让创建,部署,运行应用程序更简单的一个工具
  • Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口
  • 它是目前最流行的 Linux 容器解决方案
  • Docker 将应用程序与该程序的依赖,打包在一个文件里面,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样
  • 有了 Docker,就不用担心环境问题
  • 容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小
  • 传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可
  • docker 架构
    在这里插入图片描述
    在这里插入图片描述

基本概念

  • Docker 中包括三个基本的概念:
    • Image(镜像)
    • Container(容器)
    • Repository(仓库)

Image(镜像)

  • Image(镜像)是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心
  • Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变
  • 镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义
    在这里插入图片描述
    从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker 内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统 (union file system) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式

Container (容器)

  • 容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
    在这里插入图片描述

  • 由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层

Repository (仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

  • 仓库又可以分为两种形式:
    • public(公有仓库)
    • private(私有仓库)

安装 docker

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
  • 添加Docker的官方GPG密钥:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 添加仓库。
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • 安装docker ce
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 测试
    sudo docker run hello-world
  • 添加当前用户到 docker 用户组
    sudo usermod -aG docker xiaoge #xiaoge 为当前用户名
  • 安装完成后,启动 docker 服务并使其能够在每次系统引导时启动
systemctl start docker
systemctl enable docker
  • 接着,我们将添加一个名为 xiaoge 的新用户并将其添加到 docker 组
sudo useradd -m -s /bin/bash xiaoge_docker
sudo usermod -a -G docker xiaoge_docker
  • 以 xiaoge_docker用户身份登录并运行 docker 命令,如下所示
    su - xiaoge_docker
  • docker 删除 images,通过 image 的 id 来指定删除谁
    docker rmi <image id>

docker images

获取镜像

  • 获取镜像 image
  • 拉取镜像到本地仓库,类似于 git
docker pull xiaogeldx/ubuntu:latest
#由于 pull 拉取会比较慢,所以不推荐,在百度网盘中获取文件更快
#然后倒入镜像
sudo docker load -i ubuntu_docker.tar
  • 查看本地仓库是否有这个镜像
docker images
#或者 docker image ls

在这里插入图片描述

设置镜像标签

docker tag 860c279d2fec xiaogeldx/ubuntu:v0

  • 860c279d2fec:镜像 id

docker containers

创建 docker 容器

  • 创建 docker 容器并运行
docker run -itd -p 10022:22 xiaogeldx/ubuntu:v1 /bin/bash
#参数说明:
# -i: 交互式操作。
# -t: 终端。
# -p:端口,10022:22 表示 docker 在启动时将容器的22端口映射到宿主机的10022端口,这样可以通过 宿主机ip:10022 远程连接(比如 docker 内是 ubuntu 系统,可以通过 ssh 连接),并且需要 docker 内的 ubuntu 的用户设置密码,比如给 root 设置密码,连接时连接 root 用户
# ubuntu: ubuntu 镜像。
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
# 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
  • 用 elasteticsearch
docker run -dti --network=host --name=elasticsearch -v /home/xiaoge/web_prv/elasticsearch/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0
# 如果运行一直显示 elasticsearch 处于 Exit 状态,用下面这个
docker run -dti --network=host --name=elasticsearch -v /home/xiaoge/web_prv/elasticsearch/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0  tail -f /dev/null
#根据自己的 elasticsearch 所在位置更改上面代码的 config: 前面的路径,-ik表示可以搜索中文
  • 查看是否创建成功
docker ps -a
#docker container ls -a
#加上 -a 表示不管是否启动都查出来

在这里插入图片描述
通过 STATUS 可以看出已经启动成功

  • 运行如下命令,如果有显示则 elasticsearch 配置成功,如下图
    curl 127.0.0.1:8002 #端口要对应配置中的端口
    在这里插入图片描述
  • 停止容器
    docker stop elasticsearch
  • 启动容器
    docker start elasticsearch
  • 删除容器
docker rm elasticsearch
#删除容器时,容器必须是停止状态,否则会报错
#删除容器后,还要删除容器的目录 /var/
#然后再执行重启
  • 查看容器日志
    docker logs elasticsearch
    在这里插入图片描述

提交容器

  • 提交容器到镜像
    docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
  • 各个参数说明:
    • -m: 提交的描述信息
    • -a: 指定镜像作者
    • e218edb10161:容器 ID
    • runoob/ubuntu:v2: 指定要创建的目标镜像名

进入容器

  • 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过 exec 指令进入,推荐大家使用 docker exec 命令,因为这样退出容器终端,不会导致容器的停止
    docker exec -it 243c32535da7 /bin/bash
  • 243… 是 container id

导出容器

  • 如果要导出本地某个容器,可以使用 docker export 命令。
    docker export 1e560fca3906 > ubuntu.tar

导入容器

docker import xiaogeldx/ubuntu:v0
或者 docker import http://example.com/exampleimage.tgz example/imagerep

respository

登录,登出

docker login #登录
docker logout #登出

推送镜像

docker tag ubuntu:v0 xiaogeldx/ubuntu:18.04
docker push xiaogeldx/ubuntu:v0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值