系统综合实践——第1次实践作业:容器相关概念
理解学习:在传统虚拟机已经能够满足大部分工作学习任务的前提下,为什么还需要继续折腾容器呢?
一、资料学习
1.课程问答
- 回答问题1:在课程开始前,你是否了解过微服务或者docker?
- 完全陌生
- 回答问题2:完成上述内容后,你认为本次作业的难度如何?
- 比较困难
2.资料问答
- 学习参考:
- 微服务是什么,相较于传统的软件架构,它有什么优缺点,它是怎样部署的?
- 相较于传统单体应用,微服务是具有单一职责、面向服务特征的软件开发技术,通过可独立部署的小组件将应用程序构造为一组松散耦合的服务。`
- 搭建典型微服务架构:
- 服务配置中心、服务注册中心、业务服务、服务网关
- 微服务体系结构的优点
- 1)服务的独立部署
- 2)服务快速入门
- 3)更适合敏捷开发
- 4)全权负责,专责小组负责专门服务
- 5)服务可以根据需要动态扩展
- 6)重复使用代码
- 微服务体系结构的缺点
- 1)调用复杂性高的分布式部署。
- 2)独立数据库、分布式事务挑战
- 搭建典型微服务架构:
- 相较于传统单体应用,微服务是具有单一职责、面向服务特征的软件开发技术,通过可独立部署的小组件将应用程序构造为一组松散耦合的服务。`
- 具体到docker,什么是docker镜像,什么是docker容器,二者的关系是什么?
- Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。docker用途,目前有三大类:提供一次性的环境、提供弹性的云服务、组建微服务架构。
- Docker镜像将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。
- 很多开源工具都有docker镜像,这就使得用户只需要下载使用就行,完全省去了处理软件依赖、缺少库文件、安装部署等环节。
- 容器是镜像的一个实例,程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
二、课程实践——搭建docker环境
1.实验环境
- VisualBox_6.1虚拟机
- 有条件还是直接装双系统;后期实验需要大量内存开销,虚拟机要满载。
- 安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机系统;
2.实验目的
- 完成docker的基本入门。
3.软件工具
- nano/Text Editor
- docker-hub
- aliyun
- Docker Engine-Community
三、实验过程
1.Docker安装
- 整理一个docker安装的shell脚本,完成安装;
整理脚本——有助于以后重新快速部署,这是一个良好的编程习惯。
https://get.docker.com/
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 手动安装
- 更新 apt 包索引
sudo apt-get update
- 安装 apt 依赖包,用于通过HTTPS来获取仓库
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
- 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置稳定版仓库
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
- 安装:Docker Engine-Community
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 启动测试
sudo systemctl start docker
sudo docker run hello-world
sudo docker run --rm hello-world // 容器运行后自动删除
- docker命令,查看Docker客户端的所有命令选项。
sudo docker
sudo docker 【command】 --help
- 解决docker安装后每次都需要sudo权限运行的问题;
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker
sudo chmod a+rw /var/run/docker.sock
2.镜像
从docker hub上任意拉取一个镜像,操作镜像的查询和删除,也可使用其他容器仓库,例如阿里;
(1)配置加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zw76fmnf.mirror.aliyuncs.com"]
}
EOF
- 重启docker
systemctl daemon-reload
sudo systemctl restart docker
(2)pull镜像
- 列出本地主机上的镜像列表
sudo docker images
- 在docker-hub上复制tag
- ctrl + c可以中断pull操作
sudo docker pull httpd:latest
sudo docker pull ubuntu:latest
sudo docker pull django:python3
- 在 aliyun拉取
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lancl_hh/my_store:[镜像版本号]
(3)删除镜像
sufo docker rmi + 镜像名/如,httpd
sudo docker rmi -f httpd:latest 683a7aad17d3
- 清空
sudo docker rmi $(sudo docker images -q) // -q :静默模式,只显示编号。
3.容器
用步骤-2的镜像启动一个容器,操作容器的查询、修改和删除;
(1)启动容器
- 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载
sudo docker run -it ubuntu /bin/bash
- 退出
exit
(2)容器操作
- 查询所有容器/List containers——ps
sudo docker ps -a
- 容器的启停和删除
- 启动一个已停止的容器:
docker start + 【container_id】
- 退出一个在后台运行的容器
docker stop + 【container_id】
- 删除容器
docker rm -f +【container_id】 // -f :通过 SIGKILL 信号强制删除一个运行中的容器。
- 删除所有容器(1)
sudo docker ps -a | awk '{ print $1}' | tail -n +2
// awk 是用来提取列的主要工具;{print $1} 就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来。
// tail -n +2 表示从第二行开始读取
sudo docker rm $(sudo docker ps -a | awk '{ print $1}' | tail -n +2)
- 删除所有已经停止的容器(2):
sudo docker rm $(sudo docker ps -a -q) // -q :静默模式,只显示容器编号。
4.镜像仓库
创建并维护自己的镜像仓库,实现拉取和上传镜像等。
- 终端操作login
- 用于登录的用户名username=阿里云账号全名,
- 密码为开通服务时设置的密码。
sudo docker login --username=lancl_兰 registry.cn-hangzhou.aliyuncs.com
- 上传镜像
- 根据实际镜像信息替换示例中的【ImageId】和【镜像版本号】参数。
sudo docker tag 【ImageId】 registry.cn-hangzhou.aliyuncs.com/lancl_hh/my_store:【镜像版本号】
- 分两次键入命令行
sudo docker push registry.cn-hangzhou.aliyuncs.com/lancl_hh/my_store:[镜像版本号]
- 拉取镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lancl_hh/my_store:[镜像版本号]
- 重命名镜像
sudo docker tag 683a7aad17d3 httpd:latest
Tips
- 如何解决docker镜像下载慢的问题?
- 阿里云镜像加速器
- 解决docker安装后每次都需要sudo权限运行的问题;
- 1.创建docker组:sudo groupadd docker
- 2.将当前用户加入docker组:sudo gpasswd -a ${USER} docker
- 3.重启服务:sudo service docker restart
- 4.刷新docker成员:newgrp - docker
- 5.更改/var/run/docker.sock权限
- sudo chmod a+rw /var/run/docker.sock
- 除了Docker Hub,尝试在其他国内平台(例如阿里云)建立并维护自己的镜像仓库;
- 针对本次实践任务中遇到的各类问题和解决办法进行总结(不少于3条);
- 2/3/4熟悉基础操作,
- 了解国内主流docker镜像:阿里、华为的镜像仓库
- 实验报告文档质量高,描述清晰,条理清楚。