Spring Boot + Docker实战
创始人
2024-01-19 11:18:24

文章目录

    • 1.编写DockerFile
    • 2.构建镜像
    • 3.查看编译的镜像
    • 4.启动镜像测试
    • 5.创建私有仓库
      • 5.1查询registry镜像
      • 5.2加载镜像
      • 5.3运行镜像容器
      • 5.4检查容器
    • 6.搭建Registry web
      • 6.1首先搜索并拉取镜像
      • 6.2运行一个registry web容器
      • 6.3验证
    • 7.推送镜像到私有仓库
    • 8.服务器拉取镜像部署
      • 8.1 资源限制

1.编写DockerFile

# 该镜像需要依赖的基础镜像
FROM openjdk:11
# 指定维护者的名字
MAINTAINER laker "935009066@qq.com"
# 将本地文件夹挂载到当前容器
# VOLUME ["/tmp"] 
# 使用东八区时间环境
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将指定目录下的jar包复制到docker容器的/目录下
COPY /target/*.jar /app.jar
# CMD ["--server.port=8080"]
# 声明服务运行在8080端口
EXPOSE 8080
# 切换WORKDIR
# WORKDIR /opt/web/
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

2.构建镜像

在构建前,请确保 xxx.jar 文件与DockerFile在同一个目录

# 构建镜像
docker build -f Dockerfile -t laker-java:v1 .

docker build 指令用来编译Dockerfile文件,默认的情况下 docker build 会在当前的上下文目录中查找Dockerfile文件进行编译

-f : 参数可以用来指定Dockerfile文件,如果文件名为Dockerfile,可以不加这一句-f Dockerfile

-t : 参数用来设置镜像的名字及标签

注意最后有一个 . ,这个表示当前的构建环境的上下文,Dockerfile中的资源文件都默认成这个上下文的目录中查找,然后拷贝到容器当中去;也可以指定目录。

如果不带上 ”.“,或者指定的上下文目录不对,在编译时则会出现错误。

3.查看编译的镜像

 docker image ls 或者 docker images

4.启动镜像测试

docker run -d \-p 8080:8080 \--name laker-v1 \laker-java:v1
  • -d 是后台运行
  • -p 8080:8080 是端口映射
  • –name laker-v1 给容器取 名字
  • 最后跟的 laker-java:v1 是我打包好的镜像名称。

5.创建私有仓库

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。

但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。

从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。

来自:https://www.cnblogs.com/leozhanggg/p/12050322.html

5.1查询registry镜像

docker search registry

5.2加载镜像

选用官方的第一个镜像,也是stars数最多的

docker pull registry

5.3运行镜像容器

docker run -d \--name registry2 \--restart=always \-p 5000:5000 \-v /laker/registry:/var/lib/registry \registry
  • -d:后台运行
  • –name registry2:指定容器名
  • –restart=always:设置开机自动启动
  • -p 5000:5000:端口映射宿主机,通过宿主机地址访问
  • -v /laker/registry:/var/lib/registry:把镜像存储目录挂载到本地,方便管理和持久化,如果不加,重启后镜像都会丢失
  • -v /laker/registry/srv-config.yml:/etc/docker/registry/config.yml:把配置文件挂载到本地,方便修改和保存

5.4检查容器

docker ps

docker ps -a 是查询所有状态的容器。

检查仓库镜像信息

curl -XGET http://127.0.0.1:5000/v2/_catalog

也可以在浏览器上测试:

6.搭建Registry web

地址:https://hub.docker.com/r/hyper/docker-registry-web

6.1首先搜索并拉取镜像

docker search docker-registry-web
docker pull hyper/docker-registry-web    # 这个镜像用的人较多
registry:url: http://10.224.77.100:5000/v2name: localhost:5000readonly: falseauth:enabled: false

6.2运行一个registry web容器

docker run -d \--name registry-web \--restart=always \-v /laker/registry-web/web-config.yml:/conf/config.yml:ro \-p 8000:8080 \hyper/docker-registry-web

6.3验证

在浏览器访问:http://ip:8000

7.推送镜像到私有仓库

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 10.0.0.1:5000

# 重新标记镜像
docker tag laker-java:v1 10.0.0.1:5000/laker-java:v1
# 推送镜像
docker push 10.0.0.1:5000/laker-java:v1

前提条件

想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 10.0.0.1:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。

这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。

请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

配置非https访问:

{"registry-mirror": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"],"insecure-registries": ["10.0.0.1:5000"]
}

然后重启Docker

systemctl daemon-reload    # 守护进程重启
systemctl restart docker    # 重启docker服务

Windows系统在下图所示位置配置,注意要重启哦。

推送截图示例

可以在Registry Web上查看镜像。

8.服务器拉取镜像部署

docker pull 10.0.0.1:5000/laker-java:v1

结果如下图

8.1 资源限制

  • 内存
  • cpu
  • 磁盘

在生产环境中,建议每个容器都添加相应的资源限制。下面给出一些执行docker run命令启动容器时可以传递的资源限制参数:

  --cpus                          限制 CPU 配额-m, --memory                    限制内存配额--pids-limit                    限制容器的 PID 个数

例如我想要启动一个 1 核 2G 的容器,并且限制在容器内最多只能创建 1000 个 PID,启动命令如下:

$ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh

推荐在生产环境中限制 CPU、内存、PID 等资源,这样即便应用程序有漏洞,也不会导致主机的资源完全耗尽,最大限度降低安全风险。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...