Docker

容器工具,用来作资源隔离,如进程空间隔离、文件系统隔离、网络隔离等。

文章目录

    • [1. docker-compose 常用写法](#1. docker-compose 常用写法)
    • [2. 常用镜像下载](#2. 常用镜像下载)
    • [3. docker镜像相关命令](#3. docker镜像相关命令)
    • [4. entrypoint与cmd](#4. entrypoint与cmd)
    • [5. docker容器中报错insufficient memory for the Java Runtime Environment](#5. docker容器中报错insufficient memory for the Java Runtime Environment)

1. docker-compose 常用写法

yaml 复制代码
# docker-compose.yml
version: "3.9"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80" # 宿主机8080端口映射到容器中的80端口
    volumes:
      - ./html:/usr/share/nginx/html # 宿主机./html挂载到容器中的/usr/share/nginx/html目录

2. 常用镜像下载

国内镜像源: https://docker.aityp.com/

bash 复制代码
# jdk8
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8-jdk-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8-jdk-linuxarm64  docker.io/eclipse-temurin:8-jdk

# nginx1.27.3
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest-linuxarm64  docker.io/nginx:latest

#postgresql7.5-1.pgdg120+1
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:latest-linuxarm64
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:latest-linuxarm64  docker.io/postgres:latest

3. docker镜像相关命令

bash 复制代码
# 镜像列表
docker images

# 镜像详情
docker inspect <imgid>

4. entrypoint与cmd

在Dockerfile和docker-compose中可以指定entrypoint和cmd,docker-compose会覆盖Dockerfile中的配置。

entrypoint是容器的启动命令,cmd会作为参数追加到entrypoint后面。

entrypoint有两种形式的写法:

  1. ENTRYPOINT ["java", "-jar", "/app.jar"]

    容器启动是直接执行java -jar /app.jar,java进程是容器的1号进程,可以接受发给容器的信号,容器退出时的退出码也是java进程的退出码,但是无法展开环境变量。CMD的内容会拼接在后面作为java的参数。

  2. ENTRYPOINT java -jar /app.jar

    容器启动时实际执行的是sh -c 'java -jar /app.jar',sh进程是1号进程,java是sh的子进程,无法收到发给容器的信号,容器退出时的退出码是sh的退出码,但是可以展开环境变量。CMD的内容会拼接在sh -c 'java -jar /app.jar'的后面,不能成为java程序的参数 ,根据sh -c的解释,其会作为1 2等变量传给java进程。另外需要注意sh无法解析带-的环境变量,因此在docker-compose中配置的带-的环境变量无法传递给java进程。

为了解决数组形式的entrypoint无法展开环境变量:

在Dockerfile中:

COPY ./entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh如下:

bash 复制代码
#!/bin/bash

# exec会使用java进程替换掉当前bash进程,而不是作为子进程运行
env # 打印环境变量
exec java ${JAVA_OPT} -jar /app.jar

5. docker容器中报错insufficient memory for the Java Runtime Environment

yaml 复制代码
# 开启特权级能解决
privileged: true
相关推荐
小陈phd11 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk12 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
xuefuhe14 小时前
Kubernetes基础入门4 应用的扩展与收缩
云原生·容器·kubernetes
Wpa.wk15 小时前
容器编排 - K8s - 配置文件参数说明和基础命令
经验分享·测试工具·docker·云原生·容器·kubernetes
LCG米17 小时前
基于PyTorch的TCN-GRU电力负荷预测:从多维数据预处理到Docker云端部署
pytorch·docker·gru
Warren9819 小时前
接口测试理论
docker·面试·职场和发展·eureka·ansible
杭州杭州杭州19 小时前
Docker
运维·docker·容器
一体化运维管理平台19 小时前
容器监控难题破解:美信监控易全面支持K8s、Docker
云原生·容器·kubernetes
qiubinwei20 小时前
kubeadm部署K8S集群(踩坑实录)
云原生·容器·kubernetes
等什么君!21 小时前
Docker 数据卷:MySQL 数据同步实战
运维·docker·容器