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/
如果你想及时得到个人撰写文章的消息推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信公众号。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/daodaotest/p/14891274.html