背景
质量团队 Docker 日常操作培训,提升团队整体 Docker 容器水平。
注: 以下命令操作都是在 Centos 7
演示的
简介
Docker 是一个开源的应用容器引擎,基于 Go 语言
并遵从 Apache2.0
协议开源。
Docker Compose
是用于定义和运行多容器 Docker 应用程序的工具。
类似的还有 Containerd
和 Podman
。
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 常用命令
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}}\t{{.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)
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
微信公众号:daodaotest