docker
![](/images/5.png)
docker
Duckkkkkdocker
什么是docker
Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像 运行中的这个镜像称为容器,容器启动是非常快速的
docker的核心概念
docker主机(Host):安装了docker程序的机器(docker可以直接安装在操作系统上)
docker客户端(Client):连接docker主机进行操作
docker仓库(Registry):用来保存各种打包好的软件镜像
docker镜像(Images):软件打包好的镜像;放在docker仓库中
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
原理图
使用docker的步骤
安装dockersWindows窗口
在 Docker Hub 查询对应的组件, 从Docker仓库拉取这个软件/组件对应的镜像
使用Docker运行这个镜像,这个镜像就会生成一个Docker容器container (配置项,如tomcat镜像中要配置端口, 目录和文件的映射)
对容器的启动停止,查看日志, 加入网桥( 将容器加入网桥,形成一个局域网,这些容器可以互相访问). 就是对软件的启动停止
docker常用命令
Docker容器信息
1.查看docker容器版本
docker version |
2.查看docker容器信息
docker info |
3.查看docker容器帮助
docker --help |
镜像操作(这里是一个mysql的镜像操作)
搜索镜像
docker search mysql |
下载镜像
##下载官方最新镜像,相当于:docker pull musql:latest |
下载镜像查看
##列出本地images |
示例:
镜像删除
##单个镜像删除,相当于:docker rmi redis:latest |
容器操作
容器启动
docker run -i -t --name mytomcat -p 9000:9000 -d tomcat:latest |
##启动一个或多个已经被停止的容器 |
容器的进入与退出
- centos(容器名)
##使用run方式在创建时进入 |
端口映射
docker run -d --name mysql -p 8888:8080 mysql:8 |
容器的停止与删除
##停止一个运行中的容器 |
容器进程
##列出mysql容器中运行进程 |
容器日志
##查看mysql容器日志,默认参数 |
查看容器
##查看正在运行的容器 |
安装与配置环境
mysql安装
--拉取mysql8的镜像 |
dockers容器间的相互访问
桥接模式
存在目的
隔离各个容器,使得每个容器的端口号都是隔离的。如果不隔离开来,那么容器将和宿主机,容器和容器间都会发生端口占用的情况。
桥接模式的原理
docker的桥接网络使用虚拟网桥,bridge网络用于同一主机上的docker容器相互通信,连接到同一个网桥的docker容器可以相互通信,当我们启动docke时,会自动创建一个默认bridge网络,除非我们进行另外的配置,新创建的容器都会自动连接到这个网络,我们也可以自定义自己的bridge网络,docker文档建议使用自定义bridge网络连接到同一bridge网络的容器可以相互访问彼此任意一个端口,如果不发布端口,外界将无法访问这些容器,在创建容器时,通过-p或是–publish指令发布端口
原理图![image-20231111192921261](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
命令
--查看所有网络 |
效果图![image-20231111193449518](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
示例
两个mysql之间实现相互访问
docker安装fastDFS
--搜索镜像 |
--tracker安装 |
在D盘中新建\dockercontainers\fastdfs\tracker文件目录 为本地镜像
--安装storage |
==注意安装storage要保证磁盘还有10%剩余空间==
上传图片
本地上传:![image-20231111210312987](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
将要上传的图片拖到这里来,打开命令行窗口执行如下命令
--进入storage |
效果图
它返回给我们的再拼接上localhost:8888(暴露的端口)就可以访问了
项目上传
在一个boot项目中导入依赖
<dependency> |
文件上传实现类
package com.y.biz.impl; |
项目发布
原理图
图中的ip是网桥分配的。
我们发布的项目访问数据库和redis 等是通过桥接访问所以这里访问的其实是它默认的端口 列如项目发布后要访问redis 端口就是默认端口6379 如果是客户端访问则是映射出去的接口图中是(6380)
将项目中yml文件中连接配置进行相应修改
i修改依赖文件 为了兼容性去掉junit4
新增docker 镜像打包插件并在项目下新建Dockerfile文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>${project.name}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<dockerfile>Dockerfile</dockerfile>
</configuration>
</plugin>
</plugins>
</build>将如下内容复制到Dockerfile文件中
# 基于 openjdk:8-jre 为基础镜像进行构建
FROM openjdk:8-jre
# 进入这个容器的目录指定为/app
WORKDIR /app
# 将jar包放入/app目录下,并重新命名为app.jar
ADD target/spring-boot-demo-1.0-SNAPSHOT.jar app.jar
# 该项目使用的是8081端口,所有需要向外暴漏8081端口,日后才能通过映射的端口去访问这个暴漏的端口
EXPOSE 9999
# ENTRYPOINT 和 CMD 结合使用,ENTRYPOINT固定命令,CMD根据参数的不同 运行不同的jar包(动态参数)
ENTRYPOINT ["java","-jar"]
CMD ["app.jar"]
# 相当于 java -jar xxx.jar
开启docker管理端上的暴露
打包项目镜像
如果项目test阶段有未通过的测试打包时可以跳过测试阶段
构建效果如下
构建成功后我们可以使用idea连接docker 将打包好的docker推到docker镜像中
在file->settings->plugins搜索docker 安装
连接docker
创建项目镜像的容器
将项目对应的容器加入到网络中,这样项目镜像可以通过网桥访问redis,mysql等
docker network connect yynetwork app
--yynetwork 是你网络的名字
--app 是你项目的容器名
命令行构建镜像
- 上面这种上传镜像会很慢,可以用命令行去构建镜像
首先去掉pom.xml中这段注释,创建的Dockerfile文件不要删除
<!-- <plugin>-->
<!-- <groupId>com.spotify</groupId>-->
<!-- <artifactId>dockerfile-maven-plugin</artifactId>-->
<!-- <version>1.4.13</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>default</id>-->
<!-- <goals>-->
<!-- <goal>build</goal>-->
<!-- <goal>push</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- <configuration>-->
<!-- <repository>${project.name}</repository>-->
<!-- <tag>${project.version}</tag>-->
<!-- <buildArgs>-->
<!-- <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>-->
<!-- </buildArgs>-->
<!-- <dockerfile>Dockerfile</dockerfile>-->
<!-- </configuration>-->
<!-- </plugin>-->b. 将项目打成jar包,右击对应jar包,打开jar包所在文件夹
c. 打开文件夹目录后 在此目录打开终端,输入如下命令
docker build -t app:1.0 .
1. docker build --构建镜像
2. -t 指定构建镜像的名字
3. :1.0是指定那个文件
4. .表示在当前目录下
注意:要确保当前目录有Dockerfile 文件和对应jar包--创建容器
docker run -it --name resapp -p 9999:9999 -d res:1.0
--加入网络中
docker network connect yynetwork resapp