目录
1、Docker的安装
2、Docker部署MySQL
Docker从镜像仓库拉取应用镜像,这个应用镜像包含应用执行所有要的所有依赖、环境、配置、系统函数库等东西,这意味着这个应用可以在任意一个环境中运行。我们可以忽略在安装时需要关注的依赖和配置等东西,只需要通过Docker下载应用镜像即可。
命令解读
-p 3306:3306其实是from主机的3306端口映射到主机内部容器3306端口的意思,这样我们只需要链接主机而不需要连接容器也可以访问应用。
3、Docker基础(docker的基础命令)
image(镜像)
Docker ps展示的是容器中正在运行中的进程,添加-a会把stop了的进程也展示。
docker exec -it nginx bash 它的意思是打开容器的终端,这样我们就可以以bash命令行的形式操作容器。exit退出。可以发现容器内是由自己的文件系统的。
在删除容器的时候有可能容器在运行不能删,加-f可以强制删除。
命令的别名,打开这个文件
4、数据卷挂载(容器中数据如何修改和持久化?)
通过官方的镜像应用查询NGINX的静态资源在哪个目录下
但是由于我们镜像里面只包含应用执行所必须的系统函数库,所以Linux的ll vim等命令都不会生效
这个时候就需要用到数据卷来对静态资源进行修改,也就是在主机目录下和NGINX目录做映射,在主机下的修改同步到NGINX里。
创建:
详情:
然后我们就可以在主机目录下对文件进行修改,它会同步修改到NGINX容器内。
本地目录挂载
本地比如对MySQL挂载。MySQL它本身是由一个匿名数据卷的,它在创建MySQL容器时自动生成,故而主机会同步一份MySQL容器的数据。我们在MySQL进行数据迁移时,需要对老MySQL进行删除,老容器删除但数据卷不会删除,主机内的同步数据也不会删除,可以借此来恢复数据。但是系统自动生成的数据卷目录太长,也不直观,所以我们用自定义本地目录来为MySQL创建数据卷,注意要加/或./,否则docker会把它识别为名称从而存在默认目录下。这也是docker的数据持久化的一种方式
主机需要先创建对应的目录
执行 docker run -d\
5、自定义镜像(如何在docker上打jar包)
分层的镜像有助于代码复用,在下载其他镜像时如果有些层已经存在就不需要再下载
dockerFile中这几个指令就可以实现打jar包并运行 。
我们也可以直接下载jdk的镜像,它会包含jre(jvm)和系统函数库,所以我们只需要关注拷贝jar包和定义启动命令
具体实现:
jar包和Dockerfile在同一目录
执行docker build -t 镜像名 dockerfile地址 这样一个格式创建镜像
启动自定义容器
6、docker容器网络互联
docker自己存在一个虚拟网卡,它会在启动容器时会为每个容器默认分配一个IP地址,但是这个IP地址是自动分配的且不定的,可能容器启动后IP地址就发生了改变。
创建了18网段的网络
连接容器到网段
如果我们在容器启动时就指定连接的网络,它就不会连接默认网络
7、部署项目
7、1部署java应用
数据库连接配置使用配置文件中的一部分做数据库连接
通过容器名和MySQL互联
通过IP和MySQL连接
上传完jar包和dockerFile文件后,创建完容器就可以启动容器,注意端口不要冲突哦
7、2部署前端
创建一个新的容器,因为我们的配置文件也要挂载
在NGINX的配置文件中, 我们指定不同的端口访问不同的页面
在重新启动容器时,监听两个端口,挂载html静态资源和conf配置文件。
7、3 Dockercompose(一键部署)
DockerCompose文件内的语法和正常的docker run语法差别不算大
注意数据卷使用的是相对路径,那我们启动DockerCompose时就要注意当前位置。
在Compose文件的其他部分(如服务定义)引用该网络时使用名称hm-net,而name属性是它的真实名称(通过docker network ls
可见的名称)。