Docker 动手测试

400 阅读2分钟

工具与环境

工欲善其事,必先利其器。

  • windows 环境, 安装 wsl2
  • wsl2 安装 ubuntu 20.04
wsl --list --online  // 列出所有可用分发
wsl --install --distribution Ubuntu-20.04  // 安装 分发  Ubuntu-20.04
  • ubuntu 20.04 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun  // 一键安装

终端使用 Tabby

Docker 简单使用和测试

首先准备一个java方法用于简单测试

// Hello.java
public class Hello {
    public static void main(String []args) throws Exception{
    while(true){
        System.out.println("Hello World");
        Thread.sleep(30000);
    }
    }
}

执行 javac Hello.java 得到 Hello.class

编写Dockerfile

FROM azul/zulu-openjdk:8u332


RUN set -eux; \
    groupadd -g 9527 devops && useradd  -u 9527  -g devops  -d /app devops; \
    mkdir /app; \
    chown -R devops:devops /app; \
    mkdir -p /var/log/iconnector; \
    chown -R devops:devops /var/log/iconnector

# change user
USER devops
# copy jar
COPY --chown=devops:devops Hello.class /app/Hello.class

WORKDIR /app

ENTRYPOINT ["java","Hello"]

下载 arthas , 然后当前目录下有四个文件

-rw-r--r-- 1 sjw sjw 536 Nov 4 16:42 Dockerfile
-rw-r--r-- 1 sjw sjw 552 Nov 4 15:12 Hello.class
-rw-r--r-- 1 sjw sjw 191 Nov 4 15:12 Hello.java
-rw-r--r-- 1 sjw sjw 142044 Nov 4 15:14 arthas-boot.jar

打包Docker镜像 这里如果打包报错,需要设置国内Docker镜像,参考 yeasy.gitbook.io/docker_prac…

docker build -t java:v1 .

后台运行镜像

nohup docker run java:v1 & 

查看镜像id

root@md61xj4c# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687b7a796232 java:v1 "java Hello -c 'wget…" 42 minutes ago Up 42 minutes nifty_hawking

将arthas-boot.jar 拷贝到镜像里

docker cp arthas-boot.jar 687b7a796232:/app/arthas-boot.jar

进入镜像,测试arthas的使用

docker exec -it 687b7a796232 /bin/bash

//镜像里执行
devops@687b7a796232:~$ java -jar arthas-boot.jar

image.png

小结

  • FROM azul/zulu-openjdk:8u332 这是docker的基础镜像,内核使用host的系统内核,azul/zulu-openjdk332还会包含一些内核之外的系统命令。 因此包含除内核外的系统文件加软件(这里是JDK)
  • openjdk可以正常使用arthas
  • 镜像的大小取决于系统的版本

docker pull azul/zulu-openjdk-alpine:8u332 镜像大小 image.png

docker pull azul/zulu-openjdk:8u332 镜像大小 image.png

Alpine 系统的相关介绍 yeasy.gitbook.io/docker_prac…