Docker

为什么要用Docker

比较了Docker和传统虚拟化方式VM的不同之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
  • 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便;
  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

安装

官网

  1. 确定你是Centos7及以上版本

    cat /etc/redhat-release 
    # CentOS Linux release 7.6.1810 (Core)
    uname -r
    # 3.10.0-957.el7.x86_64
    
  2. 卸载旧版本

  3. yum安装gcc相关

    yum -y install gcc gcc-c++
    
  4. 安装需要的软件包

    yum -y install yum-utils
    
  5. 设置stable镜像仓库

    # 这里使用的是阿里云的镜像
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  6. 更新yum软件包索引

    # 可以不设置,只是让软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度
    yum makecache faster
    # 如果使用了,但是觉得占用磁盘空间,可以删除
    yum clean all
    
  7. 安装Docker

    # 安装Docker引擎等
     yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
  8. 启动Docker

    # 启动docker
    systemctl start docker
    # 查看是否启动
    ps -ef | grep docker
    # 查看版本
    docker version
    
  9. 测试

    运行hello-world镜像,实例化一个Docker容器
    docker run hello-world
    
  10. 卸载

    # 关闭docker
    systemctl stop docker
    # 卸载Docker引擎、CLI、Containerd和Docker Compose软件包。
    yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
    删除所有的镜像、容器等
    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    

阿里镜像加速器

  1. 登录阿里云,进入控制台,依次找到弹性计算容器服务容器镜像服务镜像服务镜像加速器
    在这里插入图片描述
  2. 按照操作文档配置镜像加速器

常用命令

帮助启动类命令
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档
docker 具体命令 --help
镜像

镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

  • 命令
    # 列出本地主机上的镜像
    # -a:列出本地所有的镜像(含历史映像层)
    # -q:只显示镜像ID
    docker images [-a] [-q]
    # 搜索远程仓库内的镜像
    # --limit 数量:只列出前多少个
    docker search 某个镜像名称 [--limit 5]
    # 下载镜像
    # TAG:版本号,没有TAG表示最新版本
    docker pull 某个镜像名称[:TAG]
    # 查看镜像/容器/数据卷所占的空间
    docker system df
    # 删除镜像
    # -f:强制删除
    docker rmi [-f] 镜像名称[:TAG]/镜像ID
    # 删除所有镜像(慎用)
    docker rmi -f $(docker images -qa)
    
  • commit操作
    提交容器副本使之成为一个新的镜像
    docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[版本]
    
    示例:
    # 从Hub上下载ubuntu镜像到本地并成功运行
    docker pull ubuntu
    docker images
    docker run -it ubuntu /bin/bash
    # 此时原始的默认ubuntu镜像是不带着vim命令的
    # 安装vim
    apt-get update
    apt-get install vim
    # 安装完成后,commit我们自己的新镜像启动我们的新镜像并和原来的对比
    docker commit -m="vim cmd add" -a="jf" f6ee663ae207 custom/ubuntu_vim:1.0.0
    docker images
    # 测试
    # 停止所有正在运行的容器
    docker stop $(docker ps -q)
    docker ps
    docker images
    docker run -it 镜像ID /bin/bash
    vim a.txt
    
容器命令
  • 从面向对象角度:
    Docker利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动/开始/停止/删除。每个容器都是相互隔离的、保证安全的平台。
  • 从镜像容器角度:
    可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用租序。
  • 有镜像才能创建容器,所以我们先下载一个镜像,这里以ubuntu为例

    docker pull ubuntu
    
  • 新建+启动容器

    # --name:"容器新名字",为容器指定一个名称
    # -it:启动交互式容器
    ## -i:以交互模式运行容器,通常与-t同时使用
    ## -t:为容器重新分配一个伪输入终端,通常与-i同时使用;即启动交互式容器(前台有伪终端,等待交互)
    # -d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
    # -P:随机端口映射,大写P
    # -p:指定端口映射,小写p
    # 使用ubuntu镜像,以交互模式启动一个容器,命名为u1,并在容器内执行/bin/bash命令
    docker run -it --name=u1 ubuntu /bin/bash
    
  • 列出正在运行的容器

    # -a:列出当前所有正在运行的容器+历史上运行过的
    # -l:显示最近创建的容器
    # -n:显示最近n个创建的容器
    # -q:静默模式,只显示容器编号
    docker ps
    
  • 退出容器

    • 输入exit:容器停止
    • 按住ctrl+p+q:容器不停止
  • 进入正在运行的容器并以命令行交互

    # exec 是在容器中打开新的终端,并且启动新的进程,用exit退出,不会导致容器的停止。推荐
    docker exec -it 容器ID/容器名 /bin/bash
    # attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
    docker attach 容器ID/容器名
    
  • 启动/停止/重启容器

    # 启动已停止运行的容器
    docker start 容器ID/容器名
    # 重启容器
    docker restart 容器ID/容器名
    # 停止容器
    docker stop 容器ID/容器名
    # 强制停止容器
    docker kill 容器ID/容器名
    
  • 删除容器

    # 1. 先停止容器,再删除
    docker stop 容器ID/容器名
    docker rm 容器ID/容器名
    # 2. 强制删除
    docker rm -f 容器ID/容器名
    
  • 导入导出容器

    # export 导出容器的内容留作为一个tar归档文件
    docker export 容器ID > 文件名.tar
    # import 从tar包中的内容创建一个新的文件系统再导入为镜像
    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    
  • 其他一些方法

    # 打印某个后台运行容器的日志
    docker logs 容器ID/容器名
    # 查看容器内运行的进程
    docker top 容器ID/容器名
    # 查看容器内部细节
    docker inspect 容器ID/容器名
    # 从容器内拷贝内容到本地主机
    docker cp 容器ID:容器内路径 主机目录
    

Docker 私有仓库

Docker Registry

# 下载镜像
docker pull registry
# 运行私有库Registry,相当于本地有个私有Docker hub
# Docker挂载主机目录访问如果出现cannot open directory : Permission denied
# 解决办法:在挂载目录后多加一个--privileged=true参数即可
# CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
# 在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,即使用该参数,容器内的root拥有真正的root权限,否则,容器内的root只是外部的一个普通用户权限。
# -v 宿主机路径:容器内的路径  让宿主机和容器内容互通共享
docker run -d -p 5000:5000 -v /usr/local/registry/:/tmp/registry --privileged=true registry
# 案例演示创建一个新镜像,这里使用之前ubuntu上安装vim后提交的新镜像 ubuntu_vim:1.0.0
# curl验证私服库上有什么镜像
curl -XGET http://192.168.10.126:5000/v2/_catalog		# 结果为:{"repositories":[]}
# 将新镜像custom/ubuntu_vim:1.0.0修改符合私服规范的Tag
docker tag 45273d785db7 192.168.10.126:5000/custom/ubuntu_vim:1.0.0
# 修改配置文件使之支持http
vim /etc/docker/daemon.json
# 原本的内容
# {
#  "registry-mirrors": ["https://v1mdez00.mirror.aliyuncs.com"]
# }
# 修改为
{
  "registry-mirrors": ["https://v1mdez00.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.10.126:5000"]
}
# 然后重启docker和Registry
systemctl restart docker
docker run -d -p 5000:5000 -v /usr/local/registry/:/tmp/registry --privileged=true registry
# push推送到私服库
docker push 192.168.10.126:5000/custom/ubuntu_vim:1.0.0
# curl验证私服库上有什么镜像
curl -XGET http://192.168.10.126:5000/v2/_catalog	# 结果为:{"repositories":["custom/ubuntu_vim"]}
# 验证
# 删除已有的镜像
docker rmi -f 192.168.10.126:5000/custom/ubuntu_vim:1.0.0
docker rmi -f custom/ubuntu_vim:1.0.0
# 从私服库上拉取镜像
docker pull 192.168.10.126:5000/custom/ubuntu_vim:1.0.0

容器卷之间的继承

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值