(1)课程调查
首先作为一个纯小白来讲,最初我还以为这门课会主要讲操作系统(尴尬)。后来简要地看了课程内容后才知道学的是有关于微服务和Docker的知识。大学里面多接触一些知识也会方便以后的工作,毕竟技多不压身嘛。我希望能通过这门课程掌握并熟练使用Docker,并将其应用到实际的应用中。
(2)了解微服务
- 微服务是什么
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
- 微服务的特点
- 针对特定服务发布,影响小,风险小,成本低
- 频繁发布版本,快速交付需求
- 低成本扩容,弹性伸缩,适应云环境
- 微服务的优点
- 它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
- 它们更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。测试微服务应用程序仍然是必需的,但它更容易识别和隔离问题,从而加快开发速度并支持DevOps和持续应用程序开发。
- 微服务架构有助于新兴的云服务,如事件驱动计算。类似AWS Lambda这样的功能让开发人员能够编写代码处于休眠状态,直到应用程序事件触发。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。
- 微服务的缺点
- 微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧
- 多服务运维难度,随着服务的增加,运维的压力也在增大
- 分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加
- 数据一致性难以保证
- 系统集成测试和性能监控复杂
- 微服务的部署
- 把持续集成映射到微服务
- 构建流水线和持续交付
- 平台特定的构建物
- 操作系统构建物
- 定制化镜像
- 将镜像作为构建物
- 不可变服务器
(3)学习docker技术
- Docker的安装搭建
- 卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
- 设置仓库
1、更新 apt 包索引
$ sudo apt-get update
2、安装 apt 依赖包,用于通过HTTPS来获取仓库:
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
3、添加 Docker 的官方 GPG 密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
4、设置稳定版仓库
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 安装Docker Engine-Community
1、更新索引包
$ sudo apt-get update
2、安装Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io $ apt-cache madison docker-ce
3、安装特定版本Docker
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
- 测试Docker安装成功
- 容器的使用
1、获取镜像
$ docker pull ubuntu
2、ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器和退出该容器
$ docker run -it ubuntu /bin/bash
3、查看所有容器信息
$ docker ps -a
4、启动容器和停止容器
$ docker start 5e554c16084f
$ docker stop 5e554c16084f
5、重启并进入容器
$ docker restart <容器 ID>
code1: docker attach //退出终端,容器停止. code2: docker exec //退出容器终端,不会导致容器的停止.(建议使用)
6、查看容器输出日志
Docker logs 5e554c16084f
7、导出和导入容器
$ docker export 5e554c16084f > ubuntu.tar //容器导出到本地文件 $ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 //本地文件导入容器
8、删除容器
$ docker rm -f 容器ID
- 镜像的使用
1、列出所有镜像
$ docker images
2、查找镜像
docker search httpd
3、拖取镜像
docker pull httpd
4、创建并更新镜像
5、提交副本容器
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
6、删除镜像
$ docker rmi hello-world
(4)小结
本次实验主要是熟悉了一些Docker的基本操作,另外通过一步步的实操也出现过许多问题,通过浏览器搜索到相应的最佳解决方案。
下面是我在此次实验中遇到的问题以及解决的对策。
1、在安装Docker之前执行sudo apt-get update报没有公钥问题
Key:我是把ubuntu更新一遍之后再去执行就没问题啦,不过这个ubuntu更新的网速我是真的无力吐槽,不超过50kb/s的网速令人窒息。
2、在安装完Docker后,验证sudo docker run hello-world时报TLS handshake timeout错误
Key:docker默认镜像拉取地址为国外仓库下载速度较慢,报错“net/http: TLS handshake timeout”。通过修改daemon配置文件/etc/docker/daemon.json使用加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://u5kqywr6.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
3、在拖取镜像时出现权限问题
Key: docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,因此需要root权限才能访问。
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,zxl sudo gpasswd -a $USER docker #将当前用户添加至docker用户组 newgrp docker #更新docker用户组