Docker入门教程之本地打包docker镜像教程
作者:cjcjccccc
什么是Docker?
Dockers是基于Go语言开发的虚拟容器技术。以前我们部署应用通常是将源代码打包成一个jar包运行,这样就会受到运行环境、配置环境的限制,而且程序也不能跨服务器运行。Docker基于Linux容器技术,将Java源代码、运行环境像MySQL、redis、jdk等通通打包成一个镜像,实现“一次镜像,处处运行”。极大的提高的应用的移植性以及部署的效率。
简单来说,docker是一个解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
容器与虚拟机的区别
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行的一个完整的操作系统,在该系统上在运行所需应用进程。而Docker不需要捆绑一整套的操作系统,它只需要软件工作所需的库资源和设置。
- Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化;Docker依赖于Linux内核环境,其实本质上是在已经运行的Linux下制造一个隔离的文件环境。
优点:
- 更轻量:基于容器的虚拟化,仅包含业务运行所需的runtime环境。
- 更高效:无操作系统虚拟化开销。
- 更灵活:容器隔离,devoops理念。
Docker的组成
docker中有三个基本概念:
- 镜像(image):一个只读的模板,可以用来创建Docker容器。类似于Student类
- 容器(Container):容器是镜像创建的运行实例。容器是镜像运行时的实体,为镜像提供了一个标准的和隔离的运行环境。它可以被启动、停止、删除,每个容器之间都是隔离的。类似于stu实例对象
- 仓库(repository):存放镜像文件的地方。比如maven仓库是存放jar包的地方。
类比于--》Student stu = new Student();
docker安装
Linux上安装:
# 首先安装 Docker yum -y install docker # 然后启动 Docker 服务 service docker start # 测试安装是否成功 docker -v # 配置阿里云镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://******.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Windows上安装:下载Docker Desktop,配置WSL
docker run 的执行流程及原理
执行流程:
docker是一个client-server结构的系统,docker的守护进程运行在主机上。dockerServer接收到docker-client的命令,就会执行这个命令。
容器基本操作
docker 中的容器就是一个轻量级的虚拟机,是镜像运行起来的一个状态,本文就先来看看容器的基本操作。
镜像就像是一个安装程序,而容器则是程序运行时的一个状态。
查看容器
#查看正在运行容器 docker ps #查看所有容器 docker ps -a #查看最新创建的容器 docker ps -l
创建容器
#创建容器 docker create 镜像 --创建一个 nginx 容器:docker create nginx --指定容器的name为nginx:docker create --name=nginx nginx #创建并启动一个容器 docker run 镜像 --docker run --name nginx1 -d -p 8080:80 nginx --name 含义和上文一样,表示创建的容器的名字,-d 表示容器在后台运行,-p 表示将容器的 80 端口映射到宿主机的 8080 端口
启动关闭容器
#启动容器 docker start id|name #重启容器 docker restart id|name #关闭容器 docker stop id|name
删除容器
#单个删除 docker rm id|name #批量删除 docker rm $(docker ps -a -q)
查看容器信息、日记
#容器详情 docker inspect id|name #查看容器进程 docker top #查看你容器日记 docker logs id|name -f :实时日记 -t : 显示时间 -tail: 控制输出行数
容器导入导出
#导出一个已经创建的容器导到一个文件 docker export -o 文件名.tar 容器id #将文件导入为镜像 docker import 文件名.tar 镜像名:镜像标签
docker export -o image-test.tar 1ffcd3e4a201
镜像的基本操作
镜像是容器运行的基础,容器是镜像运行后的形态。镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统,将每一层的改变以读写层的形式增加到原来的只读文件上。
查看所有镜像
docker images
- TAG: TAG用于区分同一仓库中的不同镜像,默认为latest。
- IMAGE ID: IMAGE ID是镜像的一个唯一标识符。
- CREATED: CREATED表示镜像的创建时间。
- SIZE: SIZE表示镜像的大小。
- REPOSITORY:仓库名称,仓库一般用来存放同一类型的镜像。仓库的名称由其创建者指定。如果没有指定则为
<none>
。
搜索镜像
docker search name
下载镜像
docker pull name:版本
版本可以在Docker hub上查看
删除镜像
docker rmi id|name
Dockerfile
Dockerfile是用来构建docker镜像的构建文件。
其实Dockerfile就是一个普通的文本文件,其中包含了一条条的指令,每一条指令都会构建一层。
dockerfile指令
FROM #基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建时需要运行的命令 ADD #步骤,tomcat镜像,这个tomcat压缩包;添加内容 WORKDIR #镜像工作目录 VOLUME #挂载的目录 EXPOSE #暴露端口配置 CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD #当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令 COPY #类似ADD,将我们的文件拷贝至镜像中 ENV #构建的时候设置环境变量
- FROM nginx 表示该镜像的构建,以已有的 nginx 镜像为基础,在该镜像的基础上构建。
- MAINTAINER 指令用来声明创建镜像的作者信息以及邮箱信息,这个命令不是必须的。
- RUN 指令用来修改镜像,算是使用比较频繁的一个指令了,该指令可以用来安装程序、安装库以及配置应用程序等,一个 RUN 指令执行会在当前镜像的基础上创建一个新的镜像层,接下来的指令将在这个新的镜像层上执行,RUN 语句有两种不同的形式:shell 格式和 exec 格式。本案例采用的 shell 格式,shell 格式就像 linux 命令一样,exec 格式则是一个 JSON 数组,将命令放到数组中即可。在使用 RUN 命令时,适当的时候可以将多个 RUN 命令合并成一个,这样可以避免在创建镜像时创建过多的层。
- COPY 语句则是将镜像上下文中的
hello.html
文件拷贝到镜像中。
命令解释:
- -t 参数用来指定镜像的命名空间,仓库名以及 TAG 等信息。
- 最后面的
.
是指镜像构建上下文。
本地打包docker镜像
下载安装Docker Desktop,配置完成后即可在windows CMD上操作docker命令
编写一个简单的springboot项目,提供一个helloworld接口
@RestController public class HelloWorld { @GetMapping("/hello") public String helloImages() { return "hello images!"; } }
使用maven插件打包--install--,在target包下可以看得到生成的jar包。
编写Dockerfile文件
# 基础镜像使用java FROM java:8 #作者 MAINTAINER CJC #将jar包添加到容器中并更名为: hello-docker-image.jar ADD docker-image-test-0.0.1-SNAPSHOT.jar hello-docker-image.jar #运行jar包 RUN bash -c 'touch hello-docker-image.jar' ENTRYPOINT ["java","-jar","hello-docker-image.jar"] #暴露端口 EXPOSE 8080
将jar包和dockerfile文件置于同一目录下执行命令,构建镜像:
docker build -t Name:TagName . > build -t hello-docker-image:V1.0 . -t参数指定构建成后,镜像的仓库、标签等, Name 给镜像取的名字 TagName 给镜像取的标签 最后的 . 表示 Dockerfile 文件在当前目录下
查看镜像:docker images
创建并启动容器:docker run -d -p 8080:8080 6e7772b68332
docker desktop上可以看到容器正在运行:
docker数据卷操作
一般情况下,当我们需要将数据从宿主机拷贝到容器中使用的都是docker的拷贝命令。数据卷可以避免这种麻烦的操作。
数据卷可以实现容器和宿主机之间的数据共享,简单来说数据卷就是在宿主机和容器之间搭建的一个映射的工作区,两者可以同步修改。
docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
这样便是将宿主机中的 /Users/sang/blog/docker/docker/
目录挂载到容器的 /usr/share/nginx/html/
目录下。接下来读者只需要在 /Users/sang/blog/docker/docker/
目录下添加 html 文件,或者修改 html 文件,都能在 nginx 访问中立马看到效果。
查看所有的数据卷:
docker volume ls
查看数据卷详情
docker volume inspect
删除数据卷
docker volume rm
总结
到此这篇关于Docker入门教程之本地打包docker镜像教程的文章就介绍到这了,更多相关本地打包docker镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!