在上一章我们介绍了docker的基础知识,包括docker的概念、组件构成和常用命令,今天这一章我们就通过构建一个基础镜像的过程,给大家详细讲解如何进行镜像下载、运行容器、复制文件、启动容器应用、推送镜像到仓库等操作。
基础镜像
我们在开发中常常会使用这样一种技巧,在项目中创建一个base类,其他类都继承这个base类,这样的好处就是当我们需要扩展某些基础功能的时候,只需要扩展base类,那么继承于它的类都会响应。我们今天想构建的基础镜像同样是要实现这样的功能,我们会预装一些我们在后期容器用到的环境和应用,我们在发布应用时,只需要关注当前容器部署应用的情况,而不会再考虑基础环境的配置。
基础镜像中将包含以下内容:
- JDK 1.8
- Tomcat 7
构建镜像
运行容器
下载并运行容器
运行命令 docker run -p 50016:50016 --name ubuntu18_base -it ubuntu:18.10 /bin/bash 构建容器,如图所示:
如上图,我们已经运行了一个以ubuntu:18.10 为基础镜像的容器,并映射容器的端口50016到宿主机的50016端口。
虽然我们构建容器是一条命令解决的,其实docker client是进行了两部分工作:
- 下载镜像
docker会在本地镜像仓库检索是否存在我们指定要运行的镜像,如果存在则立即执行,如果不存在,则从外网的镜像仓库进行下载。 - 运行容器
镜像准备完毕后,运行docker run命令就可以运行容器。
当前容器的运行模式为前台模式,直接进入了容器中。
退出容器返回到宿主机有两种模式: - 输入exit会直接退出容器,返回到宿主机命令行。
- 使用组合键 ctrl+q+p会将容器设置为后台运行,返回到宿主机命令行。
执行 docker ps -a 可以查看本地容器列表
执行 docker images 可以查看本地镜像列表。
进入已存在的容器
docker服务重启或者docker容器退出后,本地容器就处于停止状态,如果想进入本地容器需执行一下命令。
如上图所示,docker容器的id为 a56380be0877
启动容器 docker restart a56380be0877 启动容器
进入容器 docker attach a56380be0877 进入容器
这样我们就进入了一个本地已停止的容器。
如果容器是在后台运行中的,则执行 docker attach a56380be0877 即可直接进入容器。
删除容器和镜像
删除容器的命令为 docker rm <容器ID>
删除镜像的命令为 docker rm <镜像ID>
这里需要注意的是:
运行中的容器是无法被删除的,所以先要执行 docker stop <容器ID> 停止运行中的容器。
存在容器引用的镜像是无法删除的,就是说如果引用了本地镜像的容器没有被删除,则本地镜像是不允许删除的。
部署应用
前期准备
刚刚加载的容器我们可以视为一个刚做完系统的新服务器,所以我们对它进行简单的环境配置。
执行一下命令 刷新容器系统的软件安装源
apt-get update
apt-get upgrade
apt-get install vim 安装文本编译工具
dokcer Copy命令
首先,在容器中创建一个文件夹,命名为java。
退出当前容器,执行docker cp 命令 讲 tomcat和jdk1.8文件夹拷贝到 java文件夹中,并进入容器通过ls命令进行验证。
安装JDK
执行 vim /etc/profile 命令,对profile文件进行编译,并在文件最后增加以下内容。
export JAVA_HOME=/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=.:${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
文件保存退出后,执行 source /etc/profile 让配置文件立即生效,执行 java -version 返回如下图所示,证明安装成功。
安装Tomcat
执行 vim /java/tomcat7/bin/setclasspath.sh,对setclasspath.sh进行编辑,加入如下内容,如图:
export JAVA_HOME=/java/jdk1.8
export JRE_HOME=/java/jdk1.8/jre
保存退出后,进入bin文件夹执行 ./catalina.sh run命令,会报如下图所示错误,这是因为执行sh脚本是需要授权的,执行
chmod u+x *.sh
即可解决问题。
再次执行 ./catalina.sh run命令,运行成功。
推送镜像
生成本地镜像
docker commit -a ‘zhangbo’ -m ‘add jdk 1.8 add vim add tomcat’ ubuntu18_base mdjzbsq/docker_base:1.0
推送本地镜像到仓库。
首先执行 docker login 登录 docker hub ,输入用户名和密码,执行 docker push 命令,看到如图所示,完成推送。
也可以登录官方网站进行验证。
小结
这一章的内容比较多,通过实际操作构建了一个基础的镜像文件,为以后发布应用提供基础镜像。
文章中提到的tomcat和jdk文件包我都已经上传到百度云盘中,大家可以直接下载。
百度云盘地址:https://pan.baidu.com/s/1sPlQpRn14NlTeIoBf3hb1g 提取码:ick1
祝大家学习愉快。