一,dockerfile常用命令
命令 介绍 FROM –指定基础镜像 LABEL 作者信息 USER 切换运行属主身份 WORKDUR 切换工作目录 ENV 用于docker容器设置环境变量 RUN 用来执行命令行的命令 COPY 把宿主机文件复制到镜像中去 ADD 将文件路径复制添加到容器内部路径 EXPOSE 为容器打开指定要监听的端口以实现与外部通信
二,dockerfile命令使用介绍
1. FROM(指定基础镜像)
FROM <镜像>:[tag]
FROM openjdk:11-jdk-buster
当前主机没有镜像,会在官网下载
2. LABEL(作者信息)
LABEL maintainer = "作者信息"
3. WORKDUR(切换工作目录)
WORKDUR /usr/local/tomcat/
4. ENV(用于docker容器设置环境变量)
ENV CATALINA_JAVA /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
5. RUN(用来执行命令行的命令)
RUN apt-get update
6. COPY(把宿主机文件复制到镜像中去)
COPY source_file destination_file
7. ADD(将文件路径复制添加到容器内部路径)
ADD <源路径> <目标路径>
8. EXPOSE(为容器打开指定要监听的端口以实现与外部通信)
EXPOSE 80
EXPOSE 80 443
三,构建一个dockerfile
# 使用官方OpenJDK 17 镜像(基于Ubuntu Jammy,包含完整JDK )
FROM eclipse- temurin: 17 - jdk- jammy# 设置工作目录
WORKDIR / app# 将本地JAR 文件复制到容器中(假设打包后的文件名为app. jar)
COPY target/ app. jar / app/ app. jar# 暴露应用端口(根据实际需求修改)
EXPOSE 8080 # 启动命令(根据实际启动参数调整)
CMD [ "java" , "-jar" , "/app/app.jar" ]
四,docker-compose安装构建
1. docker安装docker-compose命令
# 使用 curl 下载(推荐)
sudo curl - L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" - o / usr/ local/ bin/ docker- compose# 或使用 wget 下载
sudo wget - O / usr/ local/ bin/ docker- compose https: / / github. com/ docker/ compose/ releases/ latest/ download/ docker- compose- $ ( uname - s) - $ ( uname - m) # 添加执行权限
sudo chmod + x / usr/ local/ bin/ docker- compose# 验证安装
docker- compose -- version
# 正常应输出类似:docker- compose version 1. xx. x, build xxxxx
2.构建docker-compose.yml配置
services: # 数据库服务mysql: image: mysql: 8.0 environment: MYSQL_ROOT_PASSWORD : ${ MYSQL_ROOT_PASSWORD } MYSQL_DATABASE : ${ MYSQL_DATABASE } MYSQL_USER : ${ MYSQL_USER } MYSQL_PASSWORD : ${ MYSQL_PASSWORD } volumes: - mysql_data: / var / lib/ mysql- . / docker/ mysql/ my- custom. cnf: / etc/ mysql/ conf. d/ custom. cnfnetworks: - ${ NETWORK_NAME } restart: always# 缓存服务redis: image: redis: 8.0 command: redis- server -- requirepass ${ REDIS_PASSWORD } volumes: - redis_data: / data- . / docker/ redis/ redis. conf: / usr/ local/ etc/ redis/ redis. confnetworks: - ${ NETWORK_NAME } restart: always# 搜索引擎elasticsearch: image: elasticsearch: 8.11 .3 environment: - discovery. type= single- node- xpack. security. enabled= false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - es_data: / usr/ share/ elasticsearch/ datanetworks: - ${ NETWORK_NAME } ulimits: memlock: soft: - 1 hard: - 1 restart: always# 可视化分析kibana: image: kibana: 8.11 .3 environment: - ELASTICSEARCH_HOSTS = http: / / elasticsearch: 9200 ports: - "5601:5601" networks: - ${ NETWORK_NAME } depends_on: - elasticsearchrestart: always# 对象存储minio: image: minio/ minio: RELEASE .2023 - 10 - 13 T21- 12 - 34 Zcommand: server / data -- console- address ":9001" environment: MINIO_ROOT_USER : ${ MINIO_ROOT_USER } MINIO_ROOT_PASSWORD : ${ MINIO_ROOT_PASSWORD } volumes: - minio_data: / dataports: - "9000:9000" - "9001:9001" networks: - ${ NETWORK_NAME } restart: always# 后端服务backend: build: context: . / backenddockerfile: . . / docker/ backend/ Dockerfileenvironment: SPRING_DATASOURCE_URL : jdbc: mysql: / / mysql: 3306 / ${ MYSQL_DATABASE } ? useSSL= false SPRING_DATASOURCE_USERNAME : ${ MYSQL_USER } SPRING_DATASOURCE_PASSWORD : ${ MYSQL_PASSWORD } REDIS_HOST : redisREDIS_PORT : 6379 REDIS_PASSWORD : ${ REDIS_PASSWORD } ELASTICSEARCH_HOST : elasticsearchMINIO_ENDPOINT : minio: 9000 MINIO_ACCESS_KEY : ${ MINIO_ROOT_USER } MINIO_SECRET_KEY : ${ MINIO_ROOT_PASSWORD } ports: - "${BACKEND_PORT}:8080" networks: - ${ NETWORK_NAME } depends_on: - mysql- redis- elasticsearch- miniorestart: always# 前端服务frontend: build: context: . / frontenddockerfile: Dockerfileports: - "${FRONTEND_PORT}:80" networks: - ${ NETWORK_NAME } depends_on: - backendrestart: always# 反向代理nginx: image: nginx: 1.23 volumes: - . / docker/ nginx/ nginx. conf: / etc/ nginx/ nginx. confports: - "80:80" - "443:443" networks: - ${ NETWORK_NAME } depends_on: - frontend- backendrestart: alwaysnetworks: app_network: driver: bridgevolumes: mysql_data: redis_data: es_data: minio_data: