Docker容器实验报告 您所在的位置:网站首页 linux的软件包管理实验报告 Docker容器实验报告

Docker容器实验报告

2023-06-03 02:48| 来源: 网络整理| 查看: 265

说明:本文内容来自浙江科技学院软件工程本科专业课程《系统集成与优化》的课堂实验报告。 实验目的(来自实验任务书):了解操作系统虚拟化的基本概念,了解Docker镜像和容器工作的基本原理。掌握仓库、镜像、容器之间的关系。掌握镜像和容器的基本操作,了解基于Dockerfile自制镜像。了解容器数据卷和容器网络,能够完成Docker相关的基本操作,能够用Docker打包自己的Spring Boot应用,并成功运行测试。 实验日期:2021-03-14

一、Docker安装配置

本实验以阿里云服务器作为Docker的安装载体。

注册阿里云账号,完成实名认证。在阿里云试用中心免费领取云服务器突发性能型 t5的一个月使用权,选择操作系统为CentOS 8。进入云服务器管理控制台,点击新创建的云服务器,重置实例密码为1z34567B,然后重启。部署并使用Docker (1)打开浏览器Workbench,输入用户名root和密码,远程连接ECS实例。 (2)运行下面的命令,安装Docker存储驱动的依赖包。 dnf install -y device-mapper-persistent-data lvm2 在这里插入图片描述 (3)运行下面的命令,添加稳定的Docker软件源。 dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 在这里插入图片描述 (4)运行下面的命令,查看已添加的Docker软件源。 dnf list docker-ce 在这里插入图片描述 (5)运行下面的命令安装Docker。 dnf install -y docker-ce –nobest 在这里插入图片描述 (6)运行下面的命令启动Docker。 systemctl start docker 在这里插入图片描述 (7)检查安装 在这里插入图片描述 二、镜像操作

本节以MySQL的镜像作为示例。

1. 镜像拉取

(1)访问Docker官方仓库http://hub.docker.com,搜索MySQL官方镜像。 在这里插入图片描述 (2)从官方仓库拉取5.7版本的MySQL镜像到本地,拉取最新(latest)版本的nginx镜像到本地。 在这里插入图片描述

2. 镜像加速

在阿里云主机中安装的Docker不需要配置镜像加速。

3. 本机镜像查询

列出本地所有的镜像: docker images在这里插入图片描述

4. 重命名镜像/为镜像添加新标记

该操作一般用于镜像的私有仓库推送。该操作在本地镜像列表新增加了一个新标记的镜像,新镜像实际上是原镜像的引用。 格式:docker tag原镜像名 仓库公网地址/新镜像名:版本名 示例:docker tag nginx registry.cn-hangzhou.aliyuncs.com/holer/nginx:v1在这里插入图片描述

5. 镜像删除

(1)根据镜像名删除 docker rmi mysql:5.7 在这里插入图片描述 (2)根据镜像id删除 在这里插入图片描述

三、私有镜像仓库 进入阿里云容器镜像服务,创建一个新的个人版实例。设置Registry登录密码。创建新的命名空间。在新创建的命名空间下创建一个新的仓库。 在这里插入图片描述 公网地址:registry.cn-hangzhou.aliyuncs.com/holer/nginx在云服务器上登录镜像仓库。 在这里插入图片描述将镜像推送到仓库。 在这里插入图片描述 在这里插入图片描述删除本地镜像的标签及本地镜像 在这里插入图片描述从仓库拉取镜像 在这里插入图片描述 四、容器操作 1. 创建并运行容器

(1)语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] (2)示例 在这里插入图片描述 ①其中,参数-it是参数-i与参数-t的组合,用于创建交互式容器;--name nginx1 用于指定容器名为nginx1;–rm指定退出容器后删除容器;镜像名为nginx。②容器创建后,命令行环境变为容器内部。指定COMMAND参数为bash,表示在进入容器后,执行bash命令,打开Bash Shell。 (3)在后台运行MySQL ①参数-d 创建后台运行容器 ②参数-p主机端口:容器端口 指定主机端口与容器端口的映射 ③参数-e 指定容器运行参数,如MYSQL_ROOT_PASSWORD=123456 ④示例一 在这里插入图片描述 ⑤示例二 在这里插入图片描述

2. 数据卷

(1)创建主机工作目录 在本实验中,以/root/docker_space作为工作目录。 (2)用run命令的-v参数将主机目录映射为容器目录,格式为-v 主机目录地址:容器目录地址。 在这里插入图片描述

3. 容器网络

(1)查看可用的docker网络:docker network ls 在这里插入图片描述 (2)创建网络:docker network create 网络名 在这里插入图片描述 (3)在创建容器时指定网络:--net网络名 docker run -d –name mysql -p 3336:3306 --net mynet mysql:5.7 在这里插入图片描述 (4)将运行中的容器加入网络:docker network connect 网络名 容器名在这里插入图片描述

4. 进入运行态容器并执行命令

docker exec -it 容器名 命令

5. 查看容器日志

docker logs [OPTIONS] CONTAINER (1)参数-f:跟踪日志输出。 (2)–tail N:仅列出最新的N条日志。 在这里插入图片描述

6. 宿主机与容器中文件相互拷贝

(0)在主机中创建复制的目的目录 (1)从容器复制到宿主机 在这里插入图片描述 在这里插入图片描述 (2)从宿主机复制到容器 在这里插入图片描述

五、定制JDK镜像 1. 下载官方JDK

此处下载linux版jdk8(tar.gz),用WinSCP放到Docker所在的主机上。 在这里插入图片描述

2. 解压到工作目录的jdk8目录中

在这里插入图片描述 在这里插入图片描述

3. 编写Dockerfile

在工作目录下创建Dockerfile,内容如下。

FROM daocloud.io/ubuntu:14.04 LABEL Description="JDK8 volume" Vendor="holer" Version="8u241-linux-x64" VOLUME ["/opt/jdk"] ADD ./jdk8 /opt/jdk ENV JAVA_HOME /opt/jdk ENV CLASSPATH $JAVA_HOME/lib/dt.jar:CLASSPATH $JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH

在这里插入图片描述

4. 创建JDK镜像

在工作目录下运行:docker build -t jdk:8 . 在这里插入图片描述

5. 查看结果

执行指令:docker images | grep jdk 在这里插入图片描述

六、Spring Boot应用部署 1. 准备Spring Boot项目

(1)使用Spring Boot实验(对应博文尚未发布)的Spring Boot项目。在项目的属性文件(application.properties)中,将数据源URL从localhost:3306修改为mysql。 (2)在项目源码根目录中打开cmd,执行以下命令将项目打包为JAR:mvn clean package -Dmaven.test.skip=true 在这里插入图片描述 (3)将target目录中的JAR文件传到docker主机的工作目录,改名为app.jar。

2. 编写Dockerfile FROM jdk:8 LABEL Description="AppTest" Vendor="holer" Version="0.0.1" RUN mkdir -p /opt/app ADD ./app.jar /opt/app ENV JAVA_HOME /opt/jdk ENV CLASSPATH $JAVA_HOME/lib/dt.jar:CLASSPATH $JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH EXPOSE 8080 ENTRYPOINT ["java","-jar","/opt/app/app.jar"] 3. 创建Spring Boot应用镜像

docker build -t springboottest:1.0 . 在这里插入图片描述

4. 创建Docker网络

docker network create testnet在这里插入图片描述

5. 准备MySQL服务、应用数据

(1)输入以下命令,创建后台运行、映射主机端口3336、ROOT密码为88、使用网络testnet的MySQL容器。 docker run -d -p 3336:3306 --name mysql -e MYSQL_ROOT_PASSWORD=88 --net testnet mysql:5.7 在这里插入图片描述 (2)在云服务器使用的安全组规则中放行3336端口。 在这里插入图片描述 (3)在Navicat中新建一个到MySQL容器的连接。 在这里插入图片描述 (4)将Spring Boot实验使用的数据库导出为SQL脚本文件。在MySQL容器中新建数据库sy2,执行SQL脚本文件导入数据表。

6. 创建Spring Boot应用容器

运行以下命令创建容器,使用主机端口8088通信、使用网络testnet。 docker run -d –name sy2test -p 8088:8080 --net testnet springboottest:1.0 在这里插入图片描述

7. 测试Spring Boot项目

(1)在云服务器使用的安全组规则中放行8088端口。 (2)用浏览器打开http://IP:8088/swagger-ui.html/ 在这里插入图片描述 (3)测试登录功能 在这里插入图片描述

实验心得体会 在Bash Shell中,退出命令为exit。Docker的默认工作目录是/var/lib/docker。Docker私有仓库:建议将一个应用不同版本的镜像放置在一个仓库中。建议以软件包名或应用名作为仓库名称。为了规范使用,阿里云容器镜像服务的默认实例(个人版)将于2021年3月22日起不再允许多级目录镜像推送。对多级目录镜像进行管理需要升级至企业版。从ECS推送镜像时,可以选择使用镜像仓库内网地址,这样推送速度更快。WinSCP对Linux主机访问的最高层目录为root。要在某个没有添加到PATH的目录中执行程序,首先要进入该目录,然后输入“./程序名”。(“.”表示当前目录)构建JDK镜像的Dockerfile中,因为JDK需要在操作系统上运行,所以基础镜像为Linux操作系统,其后的环境变量命令(ENV)也是基于Linux操作系统的。在镜像中(用VOLUME命令)创建一个目录,将现有JDK的目录放入其中,然后打包成为JDK镜像。构建Spring Boot应用镜像的Dockerfile中,因为Spring Boot应用是在JDK上运行的,所以基础镜像为JDK。ENTRYPOINT指定了一条终端命令,这样容器运行时将自动启动Spring Boot应用。暴露在公网上的云服务器各端口可能会受到攻击,存在安全风险。对此可使用安全组。安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力。 (1)运维端口(22)暴露,将受到SSH暴力破解攻击。配置:22端口入方向仅放行内网Workbench。 (2)Docker中的容器映射端口暴露:MySQL远程管理、Tomcat远程访问不使用默认端口。对开放的端口采取常拒绝策略,仅在测试期间允许访问。 (3)在不使用时可停止云服务器的运行。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有