Java技术栈 —— Docker入门
Java技术栈 —— Docker入门
一、Docker简介
docker的本意是码头工人。
图1 —— Men of the Docks(乔治·贝洛斯)
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。[1]
| 一、参考文章或视频链接 |
|---|
| [1] 《Docker》- 百度百科 |
| [2] Docker - 官方 |
| [3] 《Men of the Docks》- Wikipedia |
二、安装
2.1 Ubuntu联网安装
# Ubuntu(24.04 LTS) 下找到 /etc/apt/sources.list.d/文件夹,添加一份docker.sources文件
Types: deb
Architectures: amd64
URIs: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu
Suites: noble
Components: stable
Signed-By: /usr/share/keyrings/docker-archive-keyring.gpg
# 保存后终端执行下列命令
sudo install -m 0755 -d /usr/share/keyrings
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 正式安装,见参考文章[9]
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
这里要说明下docker compose和docker-compose的区别,名字上只有一个空格和分隔符的区别,目前docker compose一般可直接替代docker-compose
| 参考文章或视频链接 |
|---|
| [1] Migrate from Docker Compose v1 to v2 - 官方 |
2.2 离线安装
Q1:Docker Desktop与Docker Engine的区别?
Docker Engine is the fundamental containerization engine that runs on servers and manages containers, while Docker Desktop is a developer-focused tool that includes Docker Engine along with additional features to simplify the development and testing of containerized applications on local machines.[2]
简而言之,Docker Desktop > Docker Engine,Docker Engine只是一个核心组件,类似JDK与JRE的关系,在参考文章[3]里也阐明了这两者的关系与切换方式,为了完整的学习Docker,故安装Docker Desktop,我是Ubuntu系统,你可以根据参考文章[1]自行查找Windows的安装方式,其实也非常简单,一键式傻瓜安装。# 切换至docker-engine docker context use default # 切换至docker-desktop docker context use desktop-linux
如果离线安装,安装Docker Desktop前,需先把缺失的依赖装上,见参考文章[7]。

依赖安装好后,回到参考文章[3],安装docker-desktop。
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
安装好后应该是这个样子的

2.3 配置国内源镜像
没有daemon.json就自己建一个,记得定时清理docker产生的日志文件。
推荐使用 毫秒镜像
| 2.1 参考文章或视频链接 |
|---|
| [1] docker配置国内源 |
| [2] docker 没有 daemon.json |
| [3] daemon.json各配置项的含义 |
| [4] daemon.json.md - github |
| [5] docker日志清理方式 |
三、使用
在安装好上面的Docker Desktop后,并选择好你要用default还是desktop-linux,执行以下的命令,这代表你已经安装好并可以使用docker了,Congratulations!🎉🎉🎉。
$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
| 三、参考文章或视频链接 |
|---|
| [1] Emoji Cheat Sheet |
四、制作Docker镜像
4.1 image镜像与container容器
就类似于操作系统镜像和虚拟机实例,没别的。
4.2 如何打包docker镜像
| 4.2 参考文章或视频链接 |
|---|
| [1] docker如何打包镜像文件 |
4.3 导出到本地
之所以要导出到本地,是因为这样你可以将image携带到客户现场进行部署,要将Docker镜像或容器导出为本地的.tar文件,可以使用docker save命令,如果想要导出特定的镜像,可以运行以下命令(其中是要导出的镜像名称):
docker save -o <output_file>.tar <image_name>
这会将指定的镜像保存为一个.tar文件并输出到当前目录。
如果想要导出正在运行的容器,需要先获取该容器的ID或名称,然后运行以下命令(其中<container_id/name>是要导出的容器的ID或名称):
docker export -o <output_file>.tar <container_id/name>
同样,这也会将指定的容器保存为一个.tar文件并输出到当前目录。
五、Docker实战
5.1 运行docker版hello world
我们可以从将一个helloworld项目docker化入手,请看参考文章[2]
# Docker镜像打包
# 如果你使用 --rm 选项,它将删除这些中间容器,从而减少临时文件的数量。
docker build --rm -t helloworld .
# Docker镜像清理:清理在打包过程中产生的,且未使用的中间层镜像
docker image prune
# 清理容器
# 容器在启动并停止以后,并不会被自动清除,而是以exited状态继续留存在docker中,以下命令可以清除退出状态的容器
docker container prune
# 查看镜像
docker images
# 查看容器
docker ps(仅运行的)或 docker ps -a(所有)
# 删除镜像
docker rmi <IMAGE_ID_OR_NAME>
# 删除容器
docker rm <CONTAINER_ID_OR_NAME>
# docker会给运行的docker容器取一个随机的科学家名字,挺浪漫的
(base) PS E:\Projects\IdeaProjects\_PR\dockerdemo> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6fd14c68ecb helloworld "java HelloWorld" 48 seconds ago Exited (1) 45 seconds ago elegant_neumann(优雅的诺伊曼,这个不用说了)
3b6ef0fdc5d8 helloworld "java HelloWorld" About a minute ago Exited (1) About a minute ago keen_wiles(敏锐的怀尔斯,费马大定理那位)
# 你也可以自己指定名字
docker run --name my_custom_name -p 8001:8001 -d helloworld
如果你的HelloWorld有package,我的package是dev.polaris,请修改为以下写法
# Use a specific version of OpenJDK, This command is use to specify the version of the language which help to run the application.
FROM openjdk:11
# Set the working directory, This command is use to specify a directory where the all process will happen.
WORKDIR /javaapp
# Copy only the necessary source files, This is use to copy the files and resources from your local system to docker container.
COPY /src/main/java/dev/polaris/ /javaapp/dev/polaris/
# Compile the Java program
RUN javac ./dev/polaris/HelloWorld.java
# Set the default command to run the Java program
CMD ["java", "-cp", "/javaapp", "dev.polaris.HelloWorld"]
| 五、参考文章或视频链接 |
|---|
| [1] java-docker-build-tutorial |
| [2] Build And Deploy Java Application With Docker | Step-By-Step Tutorial |
5.2 停止所有docker容器
# 优雅地停止容器的命令
$ docker stop $(docker ps -q)
# 确认是否停止
$ docker ps -a
5.3 迁移docker数据目录
首先,停止所有docker容器
其次,找一个足够大的磁盘,将原来的docker数据mv过去
mv /var/lib/docker /mnt/d6e08a22-6c58-4ea8-87f5-d9ea8fafcaa0/docker
然后,建立soft link
ln -s /mnt/d6e08a22-6c58-4ea8-87f5-d9ea8fafcaa0/docker /var/lib/docker
5.4 配置container自动重启
| 参考文章或视频链接 |
|---|
| [1] 打不死的小强,让Docker的容器自动重启 |
六、Docker Desktop配置
如何修改docker desktop的默认文件存储位置?

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)