云原生 | Docker详解Dockerfile、Compose、存储

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

云原生 | Docker初体验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值