说明:本文内容来自浙江科技学院软件工程本科专业课程《系统集成与优化》的课堂实验报告。
实验目的(来自实验任务书):了解操作系统虚拟化的基本概念,了解Docker镜像和容器工作的基本原理。掌握仓库、镜像、容器之间的关系。掌握镜像和容器的基本操作,了解基于Dockerfile自制镜像。了解容器数据卷和容器网络,能够完成Docker相关的基本操作,能够用Docker打包自己的Spring Boot应用,并成功运行测试。
实验日期:2021-03-14
本实验以阿里云服务器作为Docker的安装载体。
dnf install -y device-mapper-persistent-data lvm2
dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf list docker-ce
dnf install -y docker-ce –nobest
systemctl start docker
本节以MySQL的镜像作为示例。
(1)访问Docker官方仓库http://hub.docker.com,搜索MySQL官方镜像。
(2)从官方仓库拉取5.7版本的MySQL镜像到本地,拉取最新(latest)版本的nginx镜像到本地。
在阿里云主机中安装的Docker不需要配置镜像加速。
该操作一般用于镜像的私有仓库推送。该操作在本地镜像列表新增加了一个新标记的镜像,新镜像实际上是原镜像的引用。
格式:docker tag原镜像名 仓库公网地址/新镜像名:版本名
示例:docker tag nginx registry.cn-hangzhou.aliyuncs.com/holer/nginx:v1
(1)根据镜像名删除
docker rmi mysql:5.7
(2)根据镜像id删除
(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
④示例一
⑤示例二
(1)创建主机工作目录
在本实验中,以/root/docker_space
作为工作目录。
(2)用run命令的-v参数将主机目录映射为容器目录,格式为-v 主机目录地址:容器目录地址
。
(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 网络名 容器名
docker exec -it 容器名 命令
docker logs [OPTIONS] CONTAINER
(1)参数-f:跟踪日志输出。
(2)–tail N:仅列出最新的N条日志。
(0)在主机中创建复制的目的目录
(1)从容器复制到宿主机
(2)从宿主机复制到容器
此处下载linux版jdk8(tar.gz),用WinSCP放到Docker所在的主机上。
在工作目录下创建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
在工作目录下运行:docker build -t jdk:8 .
执行指令:docker images | grep jdk
(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。
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"]
docker build -t springboottest:1.0 .
(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脚本文件导入数据表。
运行以下命令创建容器,使用主机端口8088通信、使用网络testnet。
docker run -d –name sy2test -p 8088:8080 --net testnet springboottest:1.0
(1)在云服务器使用的安全组规则中放行8088端口。
(2)用浏览器打开http://IP:8088/swagger-ui.html/
(3)测试登录功能
/var/lib/docker
。