编辑
2025-07-31
Docker
00
请注意,本文编写于 285 天前,最后修改于 39 天前,其中某些信息可能已经过时。

目录

Docker
1. CentOS安装
系统要求
卸载旧版本
a.脚本安装
安装docker
启动docker
Unbuntu安装
系统要求
手动安装
卸载旧版本
使用 Docker 仓库进行安装
设置仓库
安装 Docker Engine-Community
2. 基本命令
a. Docker run
b. docker ps
c. docker inspect
d. docker diff
e. docker logs
f. docker rm
g. docker stop
h. docker save
i. docker load
3. 案例
4. Docker File
5. 推送镜像
a. 创建镜像
b. 添加标签
c. 推送镜像
6. 搭建私服
a. 下载 registry
b. 新建密码目录
c. 下载htpasswd
d. 生成密码
e. 创建docker registry
f. 登录registry
g. 标记本地镜像
h. 推送镜像到仓库
i. 查看效果
6. Dokcer远程服务
a. 修改配置
b. 重新加载配置
c. 验证
7. 插件
a. com.spotify/docker-maven-plugin
b. com.spotify/dockerfile-maven-plugin
c. io.fabric8/docker-maven-plugin
8. 问题
1. 停止docker失败
2. Docker 启动时报错:iptables:No chain/target/match by the name
3. 容器日志文件过大
解决
方案一
方案二
docker配置jvm参数
Docker-compose
安装
下载文件
赋予权限
全局访问
验证安装

Docker

1. CentOS安装

系统要求

Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

卸载旧版本

旧版本的 Docker称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

a.脚本安装

使用脚本安装时,在安装之前会自动进行检查,选择适合当前系统的包进行安装docker。如果发现有缺少的依赖,会自动进行安装。

  • 执行命令
curl https://get.docker.com > /tmp/install.sh
  • 修改权限

    chmod +x /tmp/install.sh
  • 执行脚本

    /tmp/install.sh

b. yum安装

执行以下命令安装依赖包:

sudo yum install -y yum-utils

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。

执行下面的命令添加 yum 软件源:

$ sudo yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo $ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo # 官方源 # $ sudo yum-config-manager \ # --add-repo \ # https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker 请执行以下命令:

$ sudo yum-config-manager --enable docker-ce-test

安装docker

更新 yum 软件源缓存,并安装 docker-ce

$ sudo yum install docker-ce docker-ce-cli containerd.io

启动docker

systemctl enable docker systemctl restart docker

Unbuntu安装

系统要求

Docker Engine-Community 支持以下的 Ubuntu 版本:

  • Xenial 16.04 (LTS)
  • Bionic 18.04 (LTS)
  • Cosmic 18.10
  • Disco 19.04
  • 其他更新的版本……

手动安装

卸载旧版本

Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:

sudo apt-get remove docker docker-engine docker.io containerd runc

当前称为 Docker Engine-Community 软件包 docker-ce 。

安装 Docker Engine-Community,以下介绍两种方式。

使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。

设置仓库

更新apt包索引

$ sudo apt-get update

安装 apt 依赖包,用于通过HTTPS来获取仓库:

$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common

添加 Docker 的官方 GPG 密钥:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

使用以下指令设置稳定版仓库

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update

安装 Docker Engine-Community

更新apt包索引

$ sudo apt-get update

安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

$ apt-cache madison docker-ce docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages ...

使用第二列中的版本字符串安装特定版本,例如 5:18.09.13-0ubuntu-xenial。

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

2. 基本命令

a. Docker run

docker run xxx echo "Hello World"

启动容器,输出信息

image-20221021172011503

docker run -i -t xxx /bin/bash

启动容器,请求Docker提供一个容器中的Shell。这样就可以进入容器中的命令行了。其中的 -i 和 -t 参数表示我们想要一个交互会话,/bin/bash 参数表示你想获得一个 bash shell。当你推出 shell 时,容器就会停止

image-20221021175407841

docker run -h CONTAINER -i -t xxx /bin/bash

启动容器,使用 -h 参数设置主机名(hostname)。移动 /bin目录的位置之后,现在这个容器已经没用了,至少暂时是这样的

image-20221021175407841

b. docker ps

docker ps

显示运行中容器的信息

image-20221021175407841

docker ps -a

列出所有容器,包括已经停止的容器。

image-20221021181421062

c. docker inspect

docker inspect xxx

显示容器的详细信息

image-20221021180136305

容器信息太多。使用 grep 或者 --format 参数过滤感兴趣的信息。例如:

docker inspect xxx | grep IPAddress

image-20221021180300230

docker inspect --format {{.NetworkSettings.IPAddress}} frosty_moore

image-20221021180519571

d. docker diff

docker diff xxx

可以看到容器中文件改动状态。可以看到被删除的文件有 /bin,有新增的 /basket 以及它里面的文件

image-20221021180700087

image-20221021180716572

e. docker logs

docker logs xxx

显示容器的日志,能得知这个容器里曾经发生过的一切事情

image-20221021180938875

f. docker rm

docker rm xxx

删除容器

image-20221021181928292

如果想删除所有已经停止的容器,可以利用 docker ps -aq -f status=exited 的结果,结果中包含所有已停止容器的 ID。例如:

docker rm -v $(docker ps -aq -f status=exited)

image-20221021182128509

注意 -v 参数的作用,它意味着当所有有Dokcer管理的数据卷已经没有和任何容器关联时,都会一律删除。为了避免已停止的容器数据量不断增加,可以在执行docker run 的时候加上 --rm参数,它的作用是当容器退出时,容器和相关的文件系统会被一起删除。如下:

docker run -i -t --rm debain /bin/bash

image-20221021182711684

可以看到在运行之前,存在一个已经停止的容器。在 运行并退出之后,没有新的已停止容器增加。

g. docker stop

docker stop xxx

停止容器

image-20221021182510301

h. docker save

docker save -o nginx.tar 101.43.194.240:5000/nginx

导出镜像

image-20251127204317937

  • 配合scp 把导出的镜像文件转移到其他的服务器上,然后load

i. docker load

docker load -i nginx.tar

导入镜像

image-20251127204902855

3. 案例

本案例采用docker官方提供的pdf

创建一个镜像

bash
docker run -it --name cowsay --hostname cowsay debian bash apt-get update apt-get install -y cowsay fortune

image-20221022011526048

/usr/games/fortune | /usr/games/cowsay

image-20221022011645884

docker commit cowsay xiayaling/widdo/cowsayimage

image-20221022011957574

docker run test/cowsayimage /usr/games/cowsay "Moo"

image-20221022012133765

4. Docker File

Dockerfile

bash
FROM debian:wheezy #WORKDIR /usr/local/docker/image/cowsay LABEL author="widdo" email="only_xyl@163.com" #修改源 #备份系统默认源 RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak #清空/etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/debian/ jessie main contrib non-free" > /etc/apt/sources.list #RUN apt-get install -y cowsay RUN apt-get update && apt-get install -y cowsay fortune COPY entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

bash
#!/bin/bash if [ $# -eq 0 ]; then /usr/games/fortune | /usr/games/cowsay else /usr/games/cowsay "$@" fi

image-20221027172907869

注意:

  • 创建docker工作目录,存放Dockerfile文件

  • Dockerfile文件名,必须大写

  • 后续镜像中用到的文件,都要放到工作目录下

  • Dockerfile中需要修改 apt 的源,否则下载不下来

  • 参考下面我的路径

image-20221027172212783

5. 推送镜像

本文采用 Docker Hub 作为 docker 的镜像仓库

想要推送镜像到docker hub。需要满足如下条件:

  • Docker Hub 上注册账号
  • 创建仓库。可以是public ,也可以是 private (只能有一个private 的)
  • 本地(linux)上登录 Docker Hub 。使用 docker login 进行登录,输入用户名密码

a. 创建镜像

参考 4

b. 添加标签

可选项。当镜像仓库不是自己 docker hub中的仓库时。可以通过添加标签的方式指定

docker tag xiayaling/widdo:cowsay-dockerfile-2.0

c. 推送镜像

docker push xiayaling/widdo:cowsay-dockerfile-2.0

6. 搭建私服

a. 下载 registry

执行命令。

bash
docker pull registry

b. 新建密码目录

创建目录,用来存放密码

bash
mkdir -p /docker/registry/auth

c. 下载htpasswd

因为新版的docker registry没有htpasswd命令(是指运行的registry容器中没有htpasswd命令),所以自己下载。

注意:这个不是在容器里运行,实在vm

然后,用htpasswd生成用户名和密码文件

bash
yum install httpd-tools

image-20230217103358657

d. 生成密码

命令格式:htpasswd -Bbn 用户名 密码 > htpasswd。前一个htpasswd是命令,后一个是生成的用户名密码文件。需要在/docker/registry/auth目录下执行

htpasswd -Bbn widdo widdo_docker > htpasswd

image-20230217103530266

注意:网上很多是这样的:

docker run --entrypoint htpasswd registry:latest -Bbn widdo widdo_docker >> /docker/registry/auth/htpasswd

image-20230217103909359

这个命令是指运行 docker registry容器里的htpasswd命令。但是报错exec: "htpasswd": executable file not found in $PATH: unknown.。就是原先的registry版本里有htpasswd命令,现在的没有了。

e. 创建docker registry

运行如下命令

bash
docker run -d -p 5000:5000 --name registry --restart=always \ -v /docker/registry/auth:/auth/ \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry:latest

image-20230217104220384

  • docker-compose方式

进入docker/registry/auth目录下。

实际使用的目录:

  • /opt/software/docker/registry
    • /auth
    • /data
    • docker-compose.yml
bash
version: '3.8' services: registry: image: registry container_name: docker-registry ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm REGISTRY_AUTH_HTPASSWD_PATH: ./auth/htpasswd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./data:/data - ./auth:/auth

f. 登录registry

登录搭建的私有docker仓库

docker login xxx:5000

输入用户名密码之后,这个地方会报错

image-20230217104459883

解决方案

  1. 修改/etc/docker/daemon.json,添加配置

    vim /etc/docker/daemon.json #添加如下内容 {"insecure-registries":["xxxx:5005","xxxx"]}
  2. 加载配置,重启docker服务

    systemctl daemon-reload systemctl restart docker

image-20230217105202677

重新登录docker registry

image-20230217105309798

g. 标记本地镜像

dcoker tag 镜像:[tag] 服务端IP:端口/镜像名:tag

docker tag nginx:stable-alpine 101.42.10.77:5000/nginx:local

image-20230217105806364

h. 推送镜像到仓库

执行命令 docker push

docker push 101.42.10.77:5000/nginx:local

image-20230217110023067

i. 查看效果

执行命令

curl -u "用户名:密码" -X GET http://101.42.10.77:5000/v2/_catalog

image-20230217110323992

6. Dokcer远程服务

idea 打包生成docker镜像时,用到的插件里面需要配置docker的远程服务

a. 修改配置

进入目录 /usr/lib/systemd/system/docker.service 下,添加 -H tcp://0.0.0.0:2375。相当于开放 2375端口

ExecStart=usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 改为: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

b. 重新加载配置

systemctl daemon-reload systemctl restart docker

c. 验证

执行一下命令

curl https://127.0.0.1:2375/version

image-20221028012326336

7. 插件

maven 插件,用来生成docker镜像。常用的有三个:

  • com.spotify/docker-maven-plugin,支持镜像的创建和提交
  • com.spotify/dockerfile-maven-plugin,支持镜像的创建和提交
  • io.fabric8/docker-maven-plugin,支持镜像的创建和提交,容器的启动和停止

a. com.spotify/docker-maven-plugin

配置如下:

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <configuration> <serverId>docker-hub</serverId> <registryUrl>https://hub.docker.com/</registryUrl> <imageName>widdo-image</imageName> <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下--> <dockerDirectory>${project.basedir}</dockerDirectory> <!--指定远程 docker api地址--> <dockerHost>${docker.host}</dockerHost> <!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路径 此处配置的 即对应 target 目录--> <directory>${project.build.directory}</directory> <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> <!--将插件绑定到maven的生命周期中--> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> <execution> <id>tag-image</id> <phase>package</phase> <goals> <goal>tag</goal> </goals> <configuration> <image>widdo-image</image> <newName>https://hub.docker.com/widdo-image</newName> </configuration> </execution> <execution> <id>push-image</id> <phase>deploy</phase> <goals> <goal>push</goal> </goals> <configuration> <imageName>widdo-image</imageName> </configuration> </execution> </executions> </plugin>

使用

可以和maven的生命周期进行绑定。执行mvn 命令的时候,自动执行绑定的 docker 命令

mvn package 绑定 docker build mvn deploy 绑定 docker push

详细信息参考GitHub

存在问题:

  • 复制很多文件。

  • 目录嵌套。target/目录下嵌套很多层 dcoker信息 。

    也可能是没用对,不过目前还没找到原因

问题一:复制很多文件

image-20221101140335160

问题二:目录嵌套

image-20221101183517289

优点

  • github文档比较清晰
  • 不仅支持插件中直接配置镜像指令,又支持dockerfile
  • 镜像的生命周期可以和maven的生命周期绑定

缺点

  • 复制很多文件
  • 存在目录嵌套
  • github不活跃,最近一次提交是3年前

b. com.spotify/dockerfile-maven-plugin

配置如下:

<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>default</id> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> <configuration> <contextDirectory>${project.basedir}</contextDirectory> <!--注意:官方github的readme提供的配置中,没有配置dockerfile,导致镜像构建的的时候找不到 dockerfile 而报错,出现dockerfile:null--> <dockerfile>${project.basedir}</dockerfile> <repository>${docker.registry}/${project.artifactId}</repository> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>${project.basedir}/${project.build.finalName}.${project.packaging}</JAR_FILE> </buildArgs> </configuration> </plugin>

使用

可以和maven的生命周期进行绑定。执行mvn 命令的时候,自动执行绑定的 docker 命令

mvn package 绑定 docker build mvn deploy 绑定 docker push

结果如下:

image-20221101185559471

存在问题:

  • 官方github的readme提供的配置中,没有添加dockerfile,会导致build的时候,找不到dockerfile.从而 docker build 报错
  • 镜像创建的时候需要docker环境,而插件com.spotify/dockerfile-maven-plugin默认找本地的docker环境,如果本地是windows的话,不装docker环境会报错,出现上图找不到docker_engine的情况

优点:

  • 配置更加简单,只需要关心:仓库,标签,dockerfile。纯粹的面向 dockerfile

  • 不存在复制过多文件和目录嵌套问题

  • 镜像的生命周期可以和maven的生命周期绑定

缺点

  • 官方github文档存在问题
  • 需要本地docker环境
  • github 不活跃,最近一次提交是3年前

c. io.fabric8/docker-maven-plugin

配置如下:

<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.39.0</version> <!--全局配置--> <configuration> <!--配置远程docker守护进程url--> <dockerHost>${docker.host}</dockerHost> <!--认证配置,用于私有registry认证--> <authConfig> <username>${docker.username}</username> <password>${docker.password}</password> </authConfig> <!--用于在标准输出中打开详细输出的字符串属性,默认是false--> <verbose>true</verbose> <!--镜像相关配置,支持多镜像--> <images> <!-- 单个镜像配置 --> <image> <!--镜像名(含版本号)--> <name>${docker.registry}/${project.name}:${project.version}</name> <!--registry地址,用于推送,拉取镜像--> <registry>${docker.registry}</registry> <!--镜像build相关配置--> <build> <!--docker-assembly.xml 定义镜像中的文件--> <!-- <assembly> </assembly>--> <!--使用dockerFile文件,定义构建镜像的流程--> <dockerFile>${project.basedir}/Dockerfile</dockerFile> </build> </image> </images> </configuration> </plugin>

使用

不可以和maven的生命周期进行绑定。只能单独执行 docker命令

docker build docker push

结果如下:

image-20221102010326919

优点

  • 社区活跃,最近一次提交是12天前
  • 官方文档比较正规
  • 即支持镜像的build,push,又支持container的启动和停止

缺点

  • 功能比较多,配置比较复杂,学习成本高

整体来说,推荐使用 io.fabric8/docker-maven-plugin

8. 问题

1. 停止docker失败

image-20230210161333145

原因

Docker有两个服务进程 分别是/usr/lib/systemd/system/docker.service 和 /usr/lib/systemd/system/docker.socket 上面的警告意味着如果试图停止docker服务,但是docker.socket还处于激活状态

解决

  • **方案一:**停止docker socket
systemctl stop docker.socket

image-20230210162144796

根据提示可知:在停止docker.socket 之后,docker服务停止了

  • **方案二:**删除docker.socket文件
cd /lib/systemd/system/ && rm -rf docker.socket

查看docker状态

systemctl status docker.service

image-20230210162422888

重新创建docker.socket

cd /lib/systemd/system vim docker.socket #添加以下内容 [Unit] Description=Docker Socket for the API PartOf=docker.service [Socket] ListenStream=/var/run/docker.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target

重启docker

systemctl daemon-reload systemctl restart docker.service

image-20230210164052439

2. Docker 启动时报错:iptables:No chain/target/match by the name

docker服务启动的时候,docker服务会向iptables注册一个链,以便让docker服务管理的containner所暴露的端口之间进行通信

通过命令iptables -L可以查看iptables

在开发环境中,如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启firewalld),docker就会报iptables error例如:failed programming external connectivity … iptables: No chain/target/match by that name

要解决这个问题,只要重启docker服务,之后,正确的iptables规则就会被创建出来

3. 容器日志文件过大

查询文件及子目录大小

du -h --max-depth=1

查看磁盘空间

df -h

分析哪个文件夹占用内存比较高

du -h -d 1 /

分析容器日志文件

du -hl -d 1 /var/lib/docker/containers/

image-20241002203546186

解决

方案一

全局配置。修改docker配置文件。

  1. 通过vim /etc/docker/dameon.json,添加以下配置。
{ "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"5"} }
  • max-size表示一个容器日志文件大小上限是500M
  • max-file表示容器最多有5个日志。id.json、id+1.json 等。以上配置 500M*5 = 2.5G
  1. 重启docker服务
systemctl daemon-reload systemctl restart docker

**注意:**已经存在的容器不会生效,需要重新创建。

方案二

docker-compose容器限制

version: '3' services: service-name: image: image-xxx restart: always logging: # driver: "none" # 关闭日志 driver: "json-file" options: max-size: "100m" max-file: "3"

docker配置jvm参数

  1. dockerfile中添加环境参数
### 基础镜像,使用alpine操作系统,openjkd使用 FROM 101.43.194.240:5000/jdk:openjdk14 # 作者 LABEL authro="widdo" email="only_xyl@163.com" ARG VERSION ARG SERVICE_NAME ARG SERVICE_PORT ARG JAVA_OPTS ENV VERSION ${VERSION} ENV SERVICE_NAME ${SERVICE_NAME} ENV SERVICE_PORT ${SERVICE_PORT} # 系统编码 ENV LANG=C.UTF-8 LC_ALL=en_US.UTF-8 # 运行参数 ENV JAVA_OPTS ${JAVA_OPTS} RUN echo "JAVA_OPTS=${JAVA_OPTS}" # 声明一个挂载点,容器内此路径会对应宿主机的某个文件夹 VOLUME /tmp #RUN echo "JAR Path: $(pwd)/target/${SERVICE_NAME}-${VERSION}.jar" # 检查JAR文件是否存在 # 应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar ADD ./target/${SERVICE_NAME}-${VERSION}.jar /app.jar # 声明运行时端口 EXPOSE ${SERVICE_PORT} # 启动容器时的进程 ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
  1. docker-compose中配置
#gateway服务 gateway: image: ${REGISTRY_URI}/${GATEWAY_SERVICE_NAME}:${VERSION} container_name: ${GATEWAY_SERVICE_NAME} build: context: ../context dockerfile: develop/Dockerfile args: - VERSION=${VERSION} - SERVICE_NAME=${GATEWAY_SERVICE_NAME} - SERVICE_PORT=${GATEWAY_SERVICE_PORT} - JAVA_OPTS=-Xmx256m -Xms256m ports: - ${GATEWAY_SERVICE_PORT}:${GATEWAY_SERVICE_PORT} #指定网络,所有服务处于同一网络 #networks: # - my_network command: - --spring.profiles.active=env - --spring.config.location=../../nacos/gateway.yaml

**注意:**参数JAVA_OPTS

验证

容器中验证jvm配置是否生效

  1. 进入容器
docker exec -it xxx bash
  1. 执行命令
jcmd 1 VM.flags

image-20241002213330364

-XX:InitialHeapSize:初始堆大小。同-Xms -XX:MaxHeapSize: 最大堆大小。 同-Xmx -XX:MinHeapDeltaBytes: 表示当JVM决定是否要做或者尝试扩容的时候最小扩/缩多少,JDK1.8以下默认为192K,JDK1.8默认512K -XX:newSize:表示新生代初始内存的大小 -XX:MaxNewSize:JVM堆区域新生代内存的最大可分配大小 -XX:OldSize:老生代的大小 -XX:+UseParallelGC:指 定在New Generation 使用 parallel collector垃圾收集器 -XX:CICompilerCount:最大并行编译数 -XX:+UseCompressedClassPointers:开启类指针压缩 -XX:+UseCompressedOops:开启普通对象指针压缩

Docker-compose

安装

下载文件

下载docker-compose的可执行文件

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

image-20250313225351189

赋予权限

赋予可执行权限给下载的二进制文件

sudo chmod +x /usr/local/bin/docker-compose

image-20250313225454159

全局访问

创建一个符号链接,将docker-compose命令链接到/usr/bin目录,以便可以全局访问

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

image-20250313225711350

验证安装

运行命令docker-compose vsersion查看信息

docker-compose version

image-20250313225816265

本文作者:widdo

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!