概述
最近两天肝了一部关于docker的课程,记录一下所学.
【狂神说Java】Docker最新超详细版教程通俗易懂 这个教程真的很棒~推荐学习.
介绍
首先,docker是一个虚拟化技术,它可以帮助开发人员将自己的整个项目(包括环境)打包成为一个镜像,做到开箱即用的功能~
而这个镜像,会在我们docker创建的容器中运行. 容器是什么呢? 容器可以简单理解为我们虚拟机中的系统.每个容器之间是互相隔离的,每个容器都基于自己的系统,互不影响,并且性能消耗极低.
我们传统的虚拟机是虚拟出一些硬件,然后在硬件的基础上运行一个完整的操作系统. 而docker的容器则是直接运行在宿主机上.因此docker的容器很是轻便. 这里就带出了它与虚拟机的差别,我们启动一个虚拟机是分钟级别的,而容器则是秒级的.
开始
安装docker的过程便不再撰述,值得注意的是,我们使用docker一般会从网络进行下载别人提供的基础镜像,例如CtenOS/Mysql/Redis等等基础服务. docker默认会从Docker HUb 中下载,它类似于GitHub,由于是国外的缘故,我们必须配置阿里云(网易/七牛云)的镜像,从而加快速度!
详细见于: https://www.runoob.com/docker/docker-mirror-acceleration.html
Docker的一些常用命令
基础命令
从仓库中下载一个镜像
docker pull hello-world
查看所有镜像
docker images
运行镜像
docker run hello-world
正在运行的容器, -a 为显示全部, -q 为只显示ID
docker ps -aq
删除容器
docker rm [容器ID]
删除所有容器,使用$()可以实现很多骚操作.. 不要局限在这一条~
docker rm $(docker ps -aq)
删除镜像,当前镜像没有被容器使用,才可以删除.
docker rmi [镜像名称/镜像ID]
强制删除镜像
docker image rm [镜像名称/镜像ID]
进入对应容器
docker exec -it [镜像名称/镜像ID] /bin/bash
进入对应容器(同上),不建议使用这种.
docker attach [镜像名称/镜像ID]
容器命令
运行并进入一个容器, -it为交互模式,使用/bin/bash解析稍后的指令.接下来便进入容器之中. -d --name 为容器进行命名.
docker run -it -d --name [自己起的名字] [容器名/容器ID] /bin/bash
退出容器
exit
退出容器但不停止容器
Ctrl + p + q
停止容器
docker stop [容器名/容器ID]
启动容器
docker start [容器名/容器ID]
重启容器
docker restart [容器名/容器ID]
将当前容器提交为新的镜像
docker commit -m=[信息] -a=[作者] [容器ID] [镜像名]:[版本号]
容器数据卷
简单的说,当我们创建了一个MySQL的容器之后,我们存储的数据自然也就在这个容器之中. 如果我们将这个容器进行删除,那么我们的数据就不复存在! 所以我们如果有这种类似的需求,则将数据存放在我们的服务器本地之中!
docker run -d -p 3306:3306 -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
以上便是运行MySQL镜像,并且把mysql下的文件与外部路径双向绑定.
指令依次为: -d(后台运行) / -p 指定运行在那个端口,冒号前是本机的端口,其后是在容器系统中的端口. / -v 将两个目录进行绑定 / -e 设置MySQL的密码 .
主要的代码便是: -v /home/mysql/data:/var/lib/mysql ,前者为存放在服务器的路径,后者为容器内路径.
如果我们不去填写存在服务器中的路径,docker会自动生成一个匿名数据卷, 它以随机码为名称,存储在 /var/lib/docker/volumes/* 文件夹之中.
如果我们以如下方式去设置的话,则由随机码更改为 "jvming",这样的形式.我们称之为具名数据卷.
-v jvming:/var/lib/mysql
查看所有卷
docker volume ls
查看指定卷信息
docker volume inspect [卷名称]
Dockerfile
前面我们一直在讲如何去使用镜像/如何去使用容器,接下来我们将使用Dockerfile来进行构建一个镜像.
而Dockerfile实际上是一个文件,我们通过自己去添加指令构建我们的镜像,指令见上图.
基本
首先,我们需要使用vim创建一个 "Deckerfile" 文件.
这里,我们进行DIY一个 "属于自己的centos".
FROM centos #首先,声明这个镜像是基于centos的.
MAINTAINER kum<k@ku-m.cn> #声明作者信息
ENV MYPATH /usr/local #创建一个变量,方便我们后面使用这个地址.
WORKDIR $MYPATH #设置工作目录,即我们进入容器后会出现在哪个路径.
RUN yum -y install vim #使用RUN在构建镜像的时候去执行这个命令,来安装vim
RUN yum -y install net-tools #同上
EXPOSE 80 #设置默认运行端口
CMD echo "end" #在启动这个容器的时候,执行输出 "end"
CMD /bin/bash #含义同在 run的时候加上 /bin/bash ,其实就是省去了自己编写的时间.
自此我们diy的centos镜像的构建文件便编写完毕. 我们使用buil指令进行构建.
docker build -t [容器名称] .
注意,如果你创建的构造文件的名称不是 "Dockerfile",需要加上 -f [文件名] 进行指定. 之后不要忘记后面有一个 "." , 点的意思是,使用当前上下文的构造文件.
这样我们构造的centos便完成.
制作一个Tomcat镜像
前面只是简单的演示如何构建一个镜像,接下来我们创建一个Tomcat的镜像. 首先,我们可以思考一下.
它肯定是基于一个系统,故,我们要编写
FROM centos
其次,它需要安装Tomcat和JDK,这里我们便使用到了ADD指令
首先我们需要把以上二者的安装包(一定要是tar.gz格式),
apache-tomcat-9.0.35.tar.gz jdk-14.0.1_linux-x64_bin.tar.gz
下载到服务器中,然后建立Deckerfile文件,安装包和构造文件要在同一目录.
FROM centos
MAINTAINER kum<k@ku-m.cn>
ENV MYPATH /usr/local
ADD jdk-14.0.1_linux-x64_bin.tar.gz /usr/local/
ADD apache-tomcat-9.0.35.tar.gz /usr/local/
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-14.0.1 #环境变量
ENV PATH $JAVA_HOME/bin:$PATH #环境变量
EXPOSE 8080
CMD ["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh","run"] #启动Tomcat
实际上与前面的例子并不大,ADD的含义是: 将一个压缩包,添加到容器的/usr/local/ 目录,docker构建的时候会自动解析我们的安装包.
接下来便是设置一些环境变量. 然后使用Tomcat的启动文件catalina.sh,这里并不是使用startup.sh.
构建完毕之后,直接启动即可.
docker run -d -p 8080:8080 mytomcat
打包springboot项目为镜像
只要把Dockerfile和jar包放在一个目录,直接构建就好啦~
FROM java:8 #基于Java8
COPY *.jar /app.jar #将目录下的jar包拷贝到容器的当前目录下,并命名为app.jar.
EXPOSE 8080
CMD ["-- server.port=8080"] #设置项目的启动端口.
ENTRYPOINT ["java","-jar","app.jar"] #启动项目
本页的评论功能已关闭