2020系统综合实践 第1次实践作业

2020系统综合实践 第1次实践作业

(1)课程调查

进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。

说实话,本来不知道这门课是干嘛的,听着这名字就跟那种传统的坐在实验室里照着老师ppt跟着做,copy几行代码接几条线跑个流水灯就完事儿的课程一样,丝毫不慌。直到早上看到老师发出博客园班级的二维码,提到上学期的软工实践,心态出现了微妙的变化(小崩)。不过听到第一节课就是要学习docker技术还挺激动,之前在许多大佬的技术博客上就有见到过,终于可以体验一把了。

既来之则安之,emmmm要是软工实践借尸还魂再来一次……只希望这门课既然有2个学分,能循序渐进合理安排好对知识消化吸收的时间,软工实践那种冲不动了💨。还有希望老师能多提供一些相关的学习路径和好的学习资料或经验(不局限于官方文档)。

(2)了解微服务

第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。

知乎上一个写的很通俗的回答:知乎:什么是微服务架构

(3)学习docker技术

docker作为微服务的一种十分典型的代表技术,我们要做的是:

学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
搭建你自己的docker环境,系统环境不限(主流的有Ubuntu/CentOS/Debian/Windows/MacOS等),完成docker的基本入门,包括但不限于:容器的创建、删除、更新和查询,创建并维护自己的镜像仓库,实现拉取和上传镜像等。
docker仓库链接:docker hub
参考资料:Docker Documentation;Docker教程 | 菜鸟教程

a. docker的相关概念

  • Docker: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。个人感觉最简单的理解就是类似于虚拟机,但是又比虚拟机更轻量,消耗的资源更少。

  • Docker Compose:Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

  • Dockerfile:Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。DockerFile 菜鸟教程

  • Docker Machine: Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。Docker Machine 菜鸟教程

  • Swarm: Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。Swarm 菜鸟教程

  • K8S: 知乎:10分钟看懂Docker和K8S

b.搭建docker环境

虽然之后的课程内容需要在Linux虚拟机上完成,不过为了更好的理解相关的知识,还是打算先尝试在熟悉的环境上进行第一次搭建。

  • 本次作业pull的镜像是ubuntu

  • 安装Docker 桌面版之后,开始终端操作。

    1. pull ubuntu镜像
    2. 查看一下当前有的镜像和容器
    3. 使用ubuntu镜像创建一个名为zxh_ubuntu的容器,再次查看镜像和容器
    4. 进入容器并创建文件夹test,进入test,创建hello_world.txt文件,打印helloworld
    5. 其他的一些删除操作
    6. 提交容器修改,并定义新镜像zxh_ubuntu。 再次查看镜像和容器,可以发现新增了zxh_ubuntu镜像
    7. 【❗️❗️❗️这里踩了个坑】尝试将新建的镜像push到dockerHub上,失败。

      因为原先已经试验过一次,成功提交到了dockerHub上。在重做一次截图写博客时出现了这个问题,查找了原因以后发现是由于我第二次创建到仓库是直接到doodle目录下创建了个zxh_ubuntu文件夹,而不是“正宗”的docker仓库。查看文档后发现需要定义Dockerfile相关文件,看了一下语法有点劝退……索性copy了原先pull的示例仓库中的DockerFile文件,并bulid -t以后就可以了。(这样可能还有其他的坑,暂时还不清楚。要自建仓库的话还是需要再去了解一下Dockerfile中语句的含义)
      🤔解决过程如下图
    8. 最后就是提交成功的DockerHub仓库啦

总结:

一、关于镜像的操作
  1. 从仓库获取镜像
    搜索镜像: docker search image_name
    搜索结果过滤:
    是否官方:docker search --filter "is-official=true" image_name
    是否自动化构建:docker search --filter "is-automated=true" image_name
    大于多少星:docker search --filter stars=3 image_name
    下载镜像:docker pull image_name
  2. 查看本地镜像: docker images
  3. 本地镜像的删除: docker rmi image_name
    删除多个: docker rmi image_name image_name image_name
二、关于容器的操作
  1. 创建容器:docker run -itd -p --name=container_name image_name

-i 表示以交互模式运行容器
-d 表示后台运行容器,并返回容器ID
-t 表示为容器重新分配一个伪输入终端
-name 为容器指定名称
-P(大写) 随机分配端口
-p 外部主机端口:docker容器端口 如 -p 8888:8080

  1. 查看容器(运行中的): docker ps
  2. 查看容器(包括已停止的): docker ps -a
  3. 启动容器: docker start container_name/container_id
  4. 停止容器: docker stop container_name/container_id
  5. 重启容器: docker restart container_name/container_id
  6. 删除容器: docker rm container_name/container_id
  7. 强制停止容器:docker kill container_name/container_id
三、容器的修改和保存
  1. 进入容器: docker exec -it container_name/container_id /bin/bash
  2. 退出容器: exit 容器停止退出
    ctrl+P+Q 容器不停止退出
  3. 提交修改: docker commit -a "author" -m "message" container_id/container_name new_image_name:tag_name

-a: 参数可选,用于指定作者
-m: 参数可选,备注修改信息
container_id: 被修改容器的id
new_image_name: 新镜像的名字,可自定义
tag_name: 新镜像的标签,可不写(不写默认为latest)

posted @ 2020-04-11 17:33  Jamwong  阅读(537)  评论(2编辑  收藏  举报