docker

Docker

一、Docker简介

二、安装Docker

centOS7系统正常情况下安装和卸载docker:

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v


#卸载
yum remove docker \
         docker-client \
         docker-client-latest \
         docker-common \
         docker-latest \
         docker-latest-logrotate \
         docker-logrotate \
         docker-selinux \
         docker-engine-selinux \
         docker-engine

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker

rm -rf /var/run/docker

问题:

但是在阿里云的服务器Alibaba Cloud Linux 3系统下安装会出现安装失败的问题:

​ 在符合如下条件的Alibaba Cloud Linux 3实例中,使用适配CentOS 8中的第三方DNF(YUM)源,执行dnf install docker-ce命令安装容器软件包失败,并出现如下报错。

  • aliyun_3_x64_20G_alibase_20210425.vhd及之前的所有镜像版本。
Docker CE Stable - x86_64
Failed to download metadata for repo 'docker-ce-stable'
Error: Failed to download metadata for repo 'docker-ce-stable'
问题原因

第三方DNF源仅适配CentOS 8发行版,而在Alibaba Cloud Linux 3中,系统的releasever值与CentOS 8不同,导致DNF解析后的地址无效,从而下载RPM包失败。DNF安装docker-ce时,首先会从系统
中获取版本号,即releasever值,然后替换掉相应源baseurl中对应的$releasever变量,之后DNF从替换后的baseurl中获取相关数据。由于CentOS 8的releasever值为8,而Alibaba Cloud Linux 3系统的releasever值为3,因此解析后的baseurl并非预期地址,DNF便无法从这个错误的地址中安装软件包。

临时解决方法

  1. 登录问题实例,编辑/etc/yum.repos.d/docker-ce.repo文件,找到docker-ce.repo文件中所有存在enabled=1值的源,将源中baseurl的$releasever变量替换为8。

在这里插入图片描述

  1. 保存并退出,重新进行安装即可。

根本解决方案

通过安装dnf-plugin-releasever-adapter插件实现releasever的自动转换,即将3转换为8。dnf-plugin-releasever-adapter插件目前的版本及默认支持的第三方repo如下表所示:

插件版本默认支持的第三方repo
1.0-1.3docker-ce.repo,epel.repo
  1. 在Alibaba Cloud Linux 3系统上执行以下命令,安装插件。目前,插件默认对docker-ce和epel源中的$releasever值做自动转换。

    dnf install dnf-plugin-releasever-adapter --repo alinux3-plus
    
  2. 若无其他的DNF源需要转换,安装插件后即可直接安装软件;若还有其他的DNF源需要转换,请按照以下方式配置:

    1. 依次执行以下命令,进入

      /etc/yum/pluginconf.d/
      

      目录,编辑releasever-adapter.conf配置文件。如果需要添加其他的DNF源,则需要将DNF源的.repo文件名添加在

      include

      字段后面,并以逗号隔开。

      说明:DNF源的.repo文件一般在/etc/yum.repos.d/目录下查看。

      cd /etc/yum/pluginconf.d/
      vim releasever-adapter.conf
      

      系统显示类似如下。

      [main]
      enabled=1
      
      [releasevermapping]
      release_dict={'2.1903' : '7', '3' : '8'}
      
      [reposlist]
      include=docker-ce.repo, epel.repo
      

      说明

      • 文件中参数的具体介绍如下所示:
        • [main]:此部分为插件的主要控制部分,控制插件的启用与否,其中enabled=1表示启用插件,enabled=0表示停用插件。
        • [releasevermapping]:此部分为待处理的releasever的映射关系,其中2.1903映射为7,3映射为8。
        • [repolist]:此部分为需要修改的源的列表,如果需要添加其他的源,则需要将.repo文件的名字添加在include字段后面,并以逗号隔开。
      • 一般来说,一个.repo文件中有多个可以使用的源,每个源都有一个独立的名称区分其他的源,一个系统中不能出现重复的名称,例如:docker-ce.repo中有[docker-ce-stable]和[docker-ce-stable-debuginfo]等源。
      • 请务必保证新添加到releasever-adapter.conf配置文件中的源文件名字是源文件内各个源名称的前缀,例如:docker-ce.repo源文件中包含的docker-ce-stable和docker-ce-stable-debuginfo两个源名称,均以docker-ce 为前缀。
    2. 保存配置文件,即可通过docker-ce、epel和您添加的源安装docker-ce软件,命令如下所示。

      说明:您也可以尝试安装其他软件。

      dnf install docker-ce
      # 或者
      yum install -y docker-ce
      

适用于

  • 云服务器ECS

三、Docker的相关命令

3.1 Docker启停命令

systemctl start docker  #启动docker
systemctl stop docker  #停止docker
systemctl restart docker  #重新启动docker
systemctl enable docker  #开机启动docker
systemctl status docker  #查看docker状态

3.2 Docker操作镜像的命令

docker images #查询本地有哪些镜像
docker search 镜像名称 #搜索远程镜像
docker pull 镜像名称:版本号#下载远程仓库的镜像
#删除本地镜像,如果多个镜像有相同ID只能用镜像名:版本号删除
docker rmi 镜像名称:版本号  #查询本地有哪些镜像
docker rmi 镜像ID #查询本地有哪些镜像

在这里插入图片描述

3.3 Docker操作容器

  • 创建容器三种方式

    • 交互式容器:创建完成后立即进入到容器内部,可以直接操作容器,但是退出就关闭容器。
    • 守护式容器:创建后完成即可启动容器,但是没有进入容器,可以使用exec命令进入容器内部操作。
    • create命令:直接创建容器,不会自动启动容器也不会进入容器。
    #交互式容器  name 部分可以不写,系统自动分配名字
    docker run -it --name=自定义容器名 镜像名称:版本号 /bin/bash 
    #守护式容器
    docker run -id --name=自定义容器名 镜像名称:版本号
    #create命令
    docker create --name=自定义容器名 镜像名称:版本号
    
    

在这里插入图片描述

  • 其他容器操作

    #退出容器
    exit
    #查询所有已经创建的容器
    docker ps -a 
    #进入容器
    docker exec -it 容器名 /bin/bash
    #启动容器
    docker start 容器名称/容器ID
    #停止容器
    docker stop 容器名称/容器ID
    #删除容器
    docker rm 容器名称/容器ID
    #查看容器状态
    docker inspect 容器名称/容器ID
    
    

四、Docker 容器的数据卷

4.1 数据卷的概念

  • 数据卷就是宿主机中的一个文件夹或目录
  • 当容器目录和数据卷目录绑定后,双方对数据的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

在这里插入图片描述

4.2 数据卷的作用

  • 持久化:把容器内的数据备份到宿主机内。
  • 数据共享:宿主机和容器、容器和容器之间共享数据。

4.3 数据卷的配置

#创建容器绑定数据卷
docker run -id --name=xxx -v /宿主机中的目录:/容器目录 镜像名称:版本
#数据卷容器:挂载了宿主机的目录的容器就是一个数据卷容器
docker run -id --name=xx --volumes-from 容器名 镜像名称:版本

五、常用应用部署

  • 参考相关文档,主要步骤为:
    • 搜索镜像,下载镜像。
    • 用镜像创建容器,-v 做数据卷可方便之后操作数据,如果该容器创建后需要被外界访问就必须加 -p 设置端口映射。
    • 进入容器操作。

六、用容器制作镜像

6.1容器转成镜像

#把容器导出成镜像
docker commit 容器ID 镜像名称:版本
#把一个镜像导出成一个压缩包
docker save -o 压缩包名称 镜像名称:版本
#把一个压缩包加载成一个镜像
docker load -i 压缩包名称

6.2Dockerfile

  • Dockerfile是一个包含了特殊指令的文本文件,每一条指令可以构建一层,使用Dockerfile可以基于基础镜像添加自己的功能,编译成一个新的镜像文件。
  • 常用的关键字:
关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

因为很多时候 应用本身有健康监测机制 |
| ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
| STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
| SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值