CentOS 7下安装Docker及基础操作

  |   0 评论   |   0 浏览

[CentOS 7下安装Docker及基础操作]

file

Docker安装

  • 第一步:
    移除旧的版本

    sudo 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,历史的镜像和容器都还存在,注意!!! 这行指令会删除历史的所有数据,请酌情执行

    rm -rf /var/lib/docker
    
  • 第二步
    安装一些必要的系统工具

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 第三步:
    添加软件源信息

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

第四步:
更新 yum 缓存

sudo yum makecache fast
  • 第五步:
    安装 最新的Docker-ce

    sudo yum -y install docker-ce
    

    安装指定版本

    sudo  yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
    
  • 第六步:
    启动 Docker 后台服务

    sudo systemctl start docker
     // 设置开机自启
     sudo systemctl enable docker
    
  • 其他指令(可以不执行的指令)

    // 停止
     sudo systemctl stop docker
     // 重启
     sudo systemctl restart docker
     // 查看状态
     sudo systemctl status docker
     // 设置开机自启
     sudo systemctl enable docker
     // 取消开机自启
     sudo systemctl disable docker
     // 查看是否已经配置开机自启
     sudo systemctl is-enabled docker
    

Docker基础操作

Docker服务操作
  • 启动docker

    sudo systemctl start docker
    
  • 停止docker

    sudo systemctl stop docker
    
  • 重启docker

    sudo systemctl restart docker
    
Docker配置国内镜像源

vi /etc/docker/daemon.json

添加以下配置

{
   "registry-mirrors": [
     "https://registry.docker-cn.com",
     "http://hub-mirror.c.163.com",
     "https://docker.mirrors.ustc.edu.cn"
   ]
 }
Dokcer配置阿里镜像加速

https://cr.console.aliyun.com/#/accelerator

注册账号拿到加速地址

img

修改docker镜像地址(我的阿里镜像加速地址)

--针对Docker客户端版本大于 1.10.0 的用户

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{
"registry-mirrors":[
"https://lhgfekn6.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"]
}

EOF
#重启dockerDaemon
 sudo systemctl daemon-reload
 
 #重启docker
 sudo systemctl restart docker
 
 #查看镜像设置是否生效
 docker info

img

Docker镜像操作
  • 查看镜像

    ```sudo docker images``

  • 拉取镜像
    docker pull 镜像名称:版本号 如:

    sudo docker pull redis:5.0.4
    
  • 删除镜像

    sudo docker rmi 镜像ID
    
  • 运行镜像

    sudo docker run --name test -p 80:80 -p 8081:8081 -v /data/log:/data/log --restart=always -d test:1.0.0
    
    • name
      表示运行的容器的别名

    • p
      宿主机的端口域容器端口的映射关系

    • v
      文件挂载

      • 时间同步

        -v /etc/localtime:/etc/localtime
        
    • restart
      重启方式,自动重启

    • d
      后台运行

  • 镜像打标签
    sudo docker tag 基础镜像:版本 镜像地址(默认docker仓库)/路径/镜像名称:版本如:

    sudo docker tag redis:5.0.4 hub.c.163.com/test/redis:5.0.4
    
  • 推送镜像

    sudo docker push hub.c.163.com/test/redis:5.0.4
    
Docker容器操作
  • 查看容器运行情况

    sudo docker ps
    
  • 查看所有的容器运行情况

    sudo docker ps -a
    
  • 查询特定的容器

    sudo docker ps|grep redis
    
  • 停止容器

    sudo docker stop 容器id
    
  • 重启容器

    sudo docker restart 容器id
    
  • 启动容器

    sudo docker start 容器id
    
  • 删除容器

    sudo docker rm 容器id
    
  • 查看容器运行的日志

    sudo docker logs -f 容器ID
    
    • Docker运行日志保存的目录

      cd /var/lib/docker/containers
      
    • 清理Docker容器运行的日志

      #首先进入上面的目录
       #cd进入对应的容器
       #清空  容器id-json.log的记录文件即可清理容器运行的日志
       #或者停止、删除、重启镜像
      
  • 进入容器

    sudo docker exec -it 容器ID /bin/bash
    

    使用exit退出

  • 执行容器内的脚本**
    以Nginx检查配置文件是否正确测试

    sudo docker exec 容器ID /usr/sbin/nginx -s reload
    
Docker-compose安装
  • 方式一(推荐)

    // 直接下载
     //   github的源
     sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
     //    Daocloud镜像
     curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
     // 下载完成之后设置权限
     sudo chmod +x /usr/local/bin/docker-compose
     // 卸载
     sudo rm /usr/local/bin/docker-compose
    

    file

  • 方式二

    //依赖python 可能受python版本的影响导致安装失败
     yum install epel-release
     yum install -y python-pip
     pip install docker-compose
    
  • 基础命令

    #启动容器,如果镜像不存在则先下载镜像,如果容器没创建则创建容器,如果容器没启动则启动
     docker-compose up -d 
     #停止并移除容器
     docker-compose down 
     #重启服务
     docker-compose restart
    
  • 异常情况

    Could not find a version that satisfies the requirement requests<3,>=2.20.0 (from docker-compose) (from versions: )
     No matching distribution found for requests<3,>=2.20.0 (from docker-compose)
     You are using pip version 8.1.2, however version 19.3.1 is available.
     You should consider upgrading via the 'pip install --upgrade pip' command.
    

    file

    pip install --upgrade pip
     // 升级成功即可安装
    

    file

容器日志管理
  • 容器的日志查看

    sudo docker logs -f 容器ID
    
  • 容器日志保存的位置

    /var/lib/docker/containers/
    

    以上路径下保存了当前容器的各种资源及配置,让容器被删除的时候,这里对应的文件夹也会被删除

    以下红色部分即为容器运行时的日志

  • 带来的问题
    当容器不删除重启的时候,这里的日志文件将会变得越来越大,占用了大量的内存资源 ;而实际的情况下,以SpringBoot项目为例,我们都会在项目里面定义自己的日志策略,因此容器运行时记录的运行日志实际上是一份多余的日志;既然是日志,必定就会占用IO,IO又是一个比较耗时的操作,而且文件越大,操作的性能就会下降。既然没啥用,那我们何不关掉它。

关闭容器运行日志
  • 配置daemon.json

    vim /etc/docker/daemon.json
    
     #添加以下配置
     "log-driver":"none"
    

    #重启docker
     service docker restart
    

    移除并重新运行镜像,再来查看容器日志,发现-json.log已经没有了***
    个人的建议是,测试环境是可以开启这个容器日志,如果镜像测试一旦稳定,推到生产的时候,出于性能考虑(因为这部分日志没有太大的价值),所以可以直接关闭掉;

限制容器运行日志大小
  • 配置daemon.json

    vim /etc/docker/daemon.json
    
     #添加以下配置
     "log-driver":"json-file",
     "log-opts": {"max-size":"1m", "max-file":"3"}
    
    • max-size
      表示日志文件的大小
    • max-file
      表示日志文件的个数,这里是3,那么最多会生成三个日志文件,每个日志文件最大1m;超过3个之后,会把最旧的那个文件给删除掉。
定时任务清空日志

不太建议使用这种方式,虽然可以解决问题,但是我认为不是一个最好的方法

  • 创建清除日志的脚本
    ****vim /etc/docker/clean_docker_container_logs.sh

    #!/bin/sh 
    
     echo "======== start clean docker containers logs ========"  
     #查找/var/lib/docker/containers/路径下以-json.log结尾的文件
     logs=$(find /var/lib/docker/containers/ -name *-json.log)  
     for log in $logs  
             do  
                     echo "clean logs : $log"  
                     #将对应文件的内容置为null
                     cat /dev/null > $log  
                     # 或者
                     # echo "">$log
             done  
     echo "======== end clean docker containers logs ========"
    

    然后在crontab设置定时任务执行

    #5分钟执行一次
     */5 * * * * sh /etc/docker/clean_docker_container_logs.sh
    

标题:CentOS 7下安装Docker及基础操作
作者:llp
地址:https://llinp.cn/articles/2022/01/09/1641738726437.html