Docker

1. Docker是什么


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

(1),什么是容器:

一个容器就相当于一个虚拟机

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

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

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

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

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

4. CentOS7用阿里云Docker Yum源在线安装Docker


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

   4.1.内核版本信息检查
  
   $ uname -r

   4.2 卸载可能存在的旧版本(卸载 docker)

    $ 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(专业版,收费)

   4.3 配置阿里云Docker Yum源(从原站下载速度太慢了,换阿里云下载贼快)
      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

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

   4.4 更新yum缓存

      yum makecache fast

   4.5 安装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>,例如:yum install docker-ce-18.03.0.ce
   
   4.6  设置docker开机启动
          systemctl enable docker    //每次linux系统重启之后,docker又要重新手动启动,太麻烦,可设置docker自动启动

   4.7 启停服务
        systemctl start docker //启动
         其它命令
     $ systemctl start docker    //启动
     $ systemctl stop docker     //停止
     $ systemclt restart docker  //重启
     $ systemctl status docker   //查看运行状态  
     注:查看docker的版本,第二个命令是详细查看
         docker --version 或 docker info


     注:docker默认安装目录
            /var/lib/docker

5. 镜像


   Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载,用户也可以通过配置,使用自定义的镜像仓库。
 

 5.1 配置加速器
     国内从Docker Hub下载镜像速度很慢,我们可以配置阿里云专属加速器来解决
     
     5.1.1 浏览器访问并登陆阿里云(淘宝或支付宝帐号登陆也可以)
       https://www.aliyun.com/
   
     5.1.2 登陆后,进入阿里云“控制台”,搜索“容器镜像服务”,然后点击菜单:“镜像工具”-->“镜像加速器
       最后,将容器右边的“加速器地址”复制下来即可
       https://oyi1xr7k.mirror.aliyuncs.com(这里是我的加速器地址)

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

     5.1.4 修改docker相关配置
       vi /etc/docker/daemon.json
       添加下面内容(地址替换成上面的加速器地址):
       {
         "registry-mirrors":["你的阿里云专属加速器地址"]
       }
       例如:
       {"registry-mirrors":["https://g72i77c9.mirror.aliyuncs.com"]}

       注:在这里可以先将registry-mirrors换成自己的阿里云专属加速器地址后,在复制到工具里面去执行(方便)

     5.1.5 重新加载daemon
        systemctl daemon-reload

     5.1.6 重启docker
        systemctl restart docker 

   5.2 搜索镜像
     
     $ docker search 镜像名称
     
     例如:docker search mysql

   5.3 下载镜像
     
       docker pull 镜像名

     例如, 获取一个 centos 系统的基础镜像可以使用如下的命令
     ## 未指定版本一般会使用latest(最新的)版本
     $ docker pull centos
     ## 或者直接指定版本
     $ docker pull centos:版本号

   5.4 查看宿主机上的镜像

     $ docker images

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

   5.5 删除镜像

     $ docker rmi 镜像ID/标签
     
     例如:
     $ docker rmi 2ca708c1c9cc
     $ docker rmi centos:latest 或 docker rmi centos:版本号

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

 
6. Docker容器


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

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

 6.1 启动、停止、重启容器命令
     
     $ docker start 容器ID|name|name:tag
     $ docker stop 容器ID|name|name:tag
     $ docker restart 容器ID|name|name:tag

6.2 查看当前运行的容器
     
     $ docker ps

   6.3 查看所有容器

     $ docker ps -a

   6.4 删除容器

     $ docker rm 容器ID

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

   6.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

 6.6 启动容器(重点)

     $ docker start 容器ID/name
     
     注2:docker ps 查看已启动容器,注意:此时容器状态为UP,Exited,Created

   6.7 进入容器(重点)

     $ docker exec -it 容器ID/容器NAME /bin/bash
     ## 简写
     $ docker exec -it 容器ID/容器NAME bash
  
     注1:只有在容器启动的时候即UP状态才能进入容器终端

   6.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:容器的名字

   6.9 退出容器

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

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

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

附录一:如何卸载原先安装的 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


附录四:设置容器自动重启


1. 创建容器时设置
docker run -d --restart=always --name 设置容器名 使用的镜像
(上面命令  --name后面两个参数根据实际情况自行修改)

 --restart具体参数值详细信息:
       no        容器退出时,不重启容器;
       on-failure    只有在非0状态退出时才重新启动容器;
       always      无论退出状态是如何,都重启容器;

2. 修改已有容器,使用update
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根据实际情况修改)

附录五:容器内容拷贝到宿主机上

docker cp 容器id:/home/内容/Home

home:容器路径,

内容:容器里创建的内容

Home:宿主机上的路径(需要拷贝的路径)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值