一,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: