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
相关推荐
名字还没想好☜2 小时前
用 systemd 托管后台服务:Restart 策略、日志接管、资源限制与开机自启全踩一遍
运维·docker·kubernetes
动力 continue3 小时前
docker容器大舞台,创建镜像,构造类,基础速通
docker·容器
Akiyama_Mio-Kon4 小时前
2026 最新:Dify 本地 Docker 部署完整教程(Windows + Git Bash)
windows·git·docker
野熊佩骑7 小时前
Kubernetes实战系列文章(三) 之 K8S运维常用命令
linux·运维·docker·微服务·云原生·容器·kubernetes
一个向上的运维者9 小时前
Kubernetes 网络三部曲:CNI、kube-proxy 与 CoreDNS 是如何协作的?
网络·容器·kubernetes
DolitD10 小时前
实时云渲染多应用并发:CELL容器技术突破3D隔离瓶颈
云原生·容器·实时互动·图形渲染·数据可视化
鹤落晴春10 小时前
【K8s】Kustomize管理
云原生·容器·kubernetes
石小千11 小时前
Docker 笔记(九)--离线安装
docker·容器
dazhong201212 小时前
Docker 进阶篇(二) Docker Compose 部署 Nginx 实践
nginx·docker·容器
码--到成功12 小时前
Docker、Kubernetes安装系列 一
docker·容器·kubernetes