1、Dockerfile
1、简介
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
构建自己的镜像,比如将自己的java程序打包构建并且运行
2、配置文件
vim Dockerfile
FROM openjdk:17 #基础环境 比如这个java程序必须需要 jdk17环境
LABEL author = xltx #作者维护信息
COPY app.jar /app.jar #将本地的jar包复制到docker容器根目录中
EXPOSE 8080 #端口
ENTRYPOINT ["java","-jar","/app.jar"] #运行方式
3、构建
#-f 需要构建的文件位置 -t 镜像 .必须项
docker build -f ./Dockerfile -t app .
4、运行
docker run -d --name myapp -p 8081:8080 app
浏览器访问 ip+端口,如访问不了,请开防火墙端口
2、Compose
1、概述
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。
Compose有2个重要的概念:
- 项目(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
- 服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
docker compose运行目录下的所有yml文件组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务可包括多个容器实例。docker-compose就是docker容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理。
Compose:一键部署中间件以及服务应用
2、实战
1、mysql
compose.yaml
name: myblog #部署名称
services: #服务
mysql:
image: mysql:8.0 #镜像
ports: #映射端口和容器端口
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- mysql-data:/var/lib/mysql #卷映射
- /app/myconf:/etc/mysql/conf.d #目录挂载
restart: always #开机自启
#卷映射需要单独定义文件夹
volumes:
mysql-data:
编写配置文件并上传至linux中
启动
#-f:指定配置文件启动 默认compose.yaml
docker compose -f compose.yaml up -d
启动成功,可以自行使用Navicat进行远程连接测试
3、存储
1、目录挂载
默认情况下,在Docker容器内创建的所有文件都只能在容器内部使用。容器删除后,数据也跟着删除,虽然通常我们不会删除容器,但是一旦宿主机发生故障,我们重新创建容器恢复服务,那么之前容器创建的文件就会丢失。所以我们需要将容器数据写到宿主机内,方便我们数据的存储、修改和共享。
那么这时候就需要使用到我们的挂载技术了,挂载技术就是将容器的文件路径挂载到宿主机的文件系统路径上,这样在容器更改文件可以同步到宿主机,在宿主机更改文件也可以同步到容器,而且我们多个容器可以挂载到一个宿主机的文件目录,实现数据共享
#/app/nghtml 使用本地文件夹替代docker中/usr/share/nginx/html的文件夹
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx
进入cd /app/nghtml修改nginx默认页
echo 2222-> index.html
浏览器访问80
ok修改成功,进入容器内部查看nginx默认配置文件是否修改
docker exec -it app01 bash
cd /usr/share/nginx/html
cat index.html
2222-
2、卷映射
卷映射就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。容器启动初始化会把容器内部对应的文件复制到本地文件中
#param1(-v):目录挂载 param2(-v):卷映射
docker run -d -p 90:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name app03 nginx
卷映射文件默认保存在/val/lib/docker/volumes/
查看刚才保存的卷映射文件 ngconf, cd /val/lib/docker/volumes/ngconf
默认都在_data文件中
修改本地nginx配置文件 vim nginx (添加一行注释即可#hhhh),查询容器内部nginx配置文件是否修改
#进入容器内部
docker exec -it app03 bash
cd /etc/nginx
ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
cat nginx.conf
#hhhhh
user nginx;
worker_processes auto;
ok,容器内部nginx配置已修改
常用命令
[root@localhost ~]# docker volume ls #查看所有卷映射文件
DRIVER VOLUME NAME
local ngconf
#创建卷映射
docker volume create haha
#查看卷映射详细信息
docker volume inspect haha
[
{
"CreatedAt": "2024-08-04T10:32:42+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/haha/_data",
"Name": "haha",
"Options": null,
"Scope": "local"
}
]
#删除卷映射
docker volume rm 卷名称
docker volume rm haha