zoukankan      html  css  js  c++  java
  • Docker 及 Docker Compose 日常操作(团队培训材料)

    背景

    质量团队 Docker 日常操作培训,提升团队整体 Docker 容器水平。

    注: 以下命令操作都是在 Centos 7 演示的

    简介

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

    Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。

    类似的还有 ContainerdPodman

    Docker 思想

    • 集装箱
    • 标准化: 运输方式、存储方式、API接口
    • 隔离、安全

    Docker 的优点

    • 快速,且一致的运行环境
    • 弹性伸缩,快速扩展
    • 隔离性
    • 迁移方便,天热的便于持续交付和部署

    Docker 核心概念

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。官方公开镜像仓库为:Docker Hub,也可用 Harbor、Nexus 等搭建私有 Docker 镜像仓库。

    安装

    # 卸载旧 docker 和 docker-compose
    $ sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-engine 
                      docker-compose
                      
    # 配置 docker-ce 的 yum 源(阿里云)
    $ cat << EOF > /etc/yum.repos.d/docker-ce.repo
    [docker-ce-stable]
    name=Docker CE Stable - $basearch
    baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
    EOF
    
    # 安装 docker 和 docker-compose
    $ sudo yum install -y docker-ce docker-ce-cli containerd.io bash-completion docker-compose
    
    # 配置 docker 自动提示
    $ cp /usr/share/bash-completion/completions/docker /etc/bash_completion.d/
    
    # 配置开机启动
    $ sudo systemctl enable --now docker
    
    # 查看状态、启停、重启 docker
    $ sudo systemctl [status|start|stop|restart] docker
    
    # 查看安装版本
    $ docker --version
    Docker version 20.10.6, build 370c289
    $ docker-compose --version
    docker-compose version 1.18.0, build 8dd22a9
    

    Docker 配置

    Docker 国内镜像加速

    # 设置国内镜像加速
    $ cat << EOF > /etc/docker/daemon.json
    {
      "registry-mirrors": [
        # Docker 中国区官方镜像
        "https://registry.docker-cn.com",
        # 网易
        "https://hub-mirror.c.163.com/",
        # 中科大
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
    EOF
    
    # 重启生效
    $ systemctl restart docker
    
    # 查看镜像加速设置
    $ docker info | grep "Registry Mirrors" -A 3
    

    Docker 使用场景

    Docker 安装 Mysql 5.7

    Docker 常用命令

    Docker 镜像日常操作

    # 搜索镜像,也可在 docker hub web 查看
    $ docker search mysql
    
    # 下载镜像,默认版本为:latest
    $ docker pull mysql
    $ docker pull mysql:5.7
    
    # 查看镜像
    $ docker images
    
    # 查看所有镜像(-a, --all),仅列出镜像 id(-q, --quiet)
    $ docker images -aq
    
    # 显示镜像构建历史
    $ docker history mysql
    
    # 显示完整镜像构建命令,且格式化输出
    $ docker history mysql --format "table {{.ID}}	{{.CreatedBy}}" --no-trunc
    
    # 删除镜像
    $ docker rmi mysql
    
    # 命名 tag
    $ docker tag mysql:5.7 daodaotest/mysql:5.7
    
    # 登录、退出仓库
    $ docker login
    $ docker logout
    
    # 上传镜像
    $ docker push daodaotest/mysql:5.7
    
    # 导出、导入镜像
    $ docker save -o mysql57.tar mysql:5.7
    $ docker load < mysql57.tar
    

    Docker 容器日常操作

    # 交互式启动容器
    $ docker run -it busybox /bin/sh
    
    # 启动容器执行命令,退出后自动删除容器
    $ docker run --rm busybox sh -c 'echo "1+1" | bc'
    
    # 启动 Mysql 容器示例
    $ docker run -d -p 3306:3306 --name mysql 
    -v /home/mysql/mysql/conf:/etc/mysql 
    -v /home/mysql/mysql/logs:/var/log/mysql 
    -v /home/mysql/mysql/data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=daodaotest 
    mysql:5.7
    

    参数说明:

    • -i:标准输入给容器
    • -t:分配一个虚拟终端
    • --rm:退出后自动删除容器,临时测试时多用
    • -d:后台运行容器,并返回容器 ID
    • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
    • --name:容器名称,此处为mysql
    • -v:宿主机和容器的目录映射关系,“:” 前为宿主机目录
    • -e:配置信息,此处配置 Mysql 的 root 密码
    # 显示启动状态容器
    $ docker ps
    
    # 显示最后创建容器
    $ docker ps -l
    
    # 显示所有容器
    $ docker ps -a
    
    # 启动、停止、重启容器
    $ docker [stop|start|restart] mysql
    
    # 启动容器
    $ docker start mysql
    
    # 查看容器详细信息
    $ docker inspect mysql
    
    # 格式化输出特定信息
    $ ocker inspect mysql -f '{{ .NetworkSettings.IPAddress }}'
    
    # 查看容器变化
    $ docker diff mysql
    
    # 查看容器中进程
    $ docker top mysql
    
    # 查看容器 log,实时输出(-f)
    $ docker logs mysql
    $ docker logs -f mysql
    
    # 连接到容器
    $ docker attach mysql
    
    # 容器里执行命令
    $ docker exec -it mysql uname -a
    

    Docker Volume 日常操作

    # 查看 volume 相关帮助
    $ docker volume
    
    # 创建 volume
    $ docker volume create daodaotest
    
    # 查看所有 volume
    $ docker volume ls
    
    # 查看 volume 详细信息
    $ docker volume inspect daodaotest
    
    # 删除 volume
    $ docker volume rm daodaotest
    
    # 慎用,清除本地所有 volume
    $ docker volume prune
    

    Docker 常用批量操作

    # 批量强制停止所有容器
    $ docker kill $(docker ps -aq)
    
    # 批量强制删除所有容器
    $ docker kill $(docker ps -aq) && docker rm $(docker ps -aq)
    
    # 批量删除tag 为 <none> 的所有镜像
    $ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
    
    # 批量删除所有镜像
    $ docker rmi $(docker images -aq)
    

    Dockerfile 使用场景

    基于 AdoptOpenjdk 官方 Dockerfile 制作 jre8 镜像(修改字符集和时区)

    Docker 仓库搭建(Harbor)

    Harbor 2.2.0 搭建与使用

    Docker Compose 使用场景

    Docker Compose 方式安装 SonarQube 8.3.1

    Docker Compose 日常操作

    与 Docker 命令类似,仅列出常用命令。

    # 构建并后台启动容器
    $ docker-compose up -d
    
    # 查看运行容器
    $ docker-compose ps
    
    # 动态查看日志
    $ docker-compose logs -f
    
    # 启动、停止、强制停止、重启
    $ docker-compose [start|stop|kill|restart]
    
    # 删除已经停止的容器
    $ docker-compose rm
    
    # 停止并删除运行的容器
    $ docker-compose down
    
    作者:蒋李恒
    出处:https://www.cnblogs.com/daodaotest/
    如果你想及时得到个人撰写文章的消息推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信公众号。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux学习之telnet命令
    Linux学习netstat
    php 将字符串中的连续多个空格转换为一个空格
    erlang: Programming Rules and Conventions。
    jQuery.data() 方法
    检测一个DOM对象是否为空
    PHP 根据类名和方法名已面向对象的方式执行函数。
    PHP函数前面的@。
    php涉及数据库操作时响应很慢。
    Apache实现动态虚拟主机
  • 原文地址:https://www.cnblogs.com/daodaotest/p/14891274.html
Copyright © 2011-2022 走看看