docker 简要条记

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

一、条件内容

   linux 查询版本 通常:cat /etc/os-release
  1、docker 情况准备

   必要构造一个docker情况
  Tips: 截止文档天生,版本为  27.5.0
  这里基于rhel 来阐明 ,官方部署参考网站
0、初次安装
   设置 Docker 存储库
  1. sudo dnf -y install dnf-plugins-core
  2. sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
复制代码
1、基础目次
  1. mkdir /opt/docker
复制代码
2、下载基础包
   这里是基于 2025.01.16 为截止日期的最新版本docker
  1. wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/containerd.io-1.7.25-3.1.el9.x86_64.rpm
  2. wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-ce-27.5.0-1.el9.x86_64.rpm
  3. wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-ce-cli-27.5.0-1.el9.x86_64.rpm
  4. wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-buildx-plugin-0.19.3-1.el9.x86_64.rpm
  5. wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-compose-plugin-2.32.3-1.el9.x86_64.rpm
复制代码
3、安装部署
  1. sudo dnf install ./containerd.io-1.7.25-3.1.el9.x86_64.rpm \
  2.   ./docker-ce-27.5.0-1.el9.x86_64.rpm \
  3.   ./docker-ce-cli-27.5.0-1.el9.x86_64.rpm \
  4.   ./docker-buildx-plugin-0.19.3-1.el9.x86_64.rpm \
  5.   ./docker-compose-plugin-2.32.3-1.el9.x86_64.rpm
复制代码
2、docker-compose 情况准备

   构造docker-compose 情况,通常默认安装了上一步的docker,这里以插件情势安装
  Tips: 截止文档天生,版本为 2.32.4
  这里基于rhel 来阐明 https://docs.docker.com/engine/install/rhel/#install-from-a-package)
0、初次安装
   运行命令安装插件即可,如图1-1
  1. sudo yum install docker-compose-plugin
复制代码

(图1-1)
1、验证安装
  1. docker compose version
复制代码
3、流程阐明

   Docker 用于管理单个容器,而 Docker Compose 用于管理多个容器应用程序
  整体上: (这里直接使用docker 和 docker-compose 外貌流程上是一致的)
1、将应用打包成镜像 —> 2、构建容器(复用容器) —> 运行镜像
二、打包 docker 镜像

1、基础镜像

   官方镜像参考:Explore Docker’s Container Image Repository | Docker Hub
  [1、基于openJdk的镜像参考](eclipse-temurin - Official Image | Docker Hub)
[2、基于node.js的镜像参考](node - Official Image | Docker Hub)
[3、基于python的镜像参考](python - Official Image | Docker Hub)
2、国内镜像源

1、增加镜像源
   告急是为了避免引用基础镜像失败。
  默认安装的docker,直接编辑这个即可
  1. sudo vim  /etc/docker/daemon.json
复制代码
填入内容
   询问 copilot 得到的答案- -,截至2025.01.17
  简朴解析下:
  log-driver: 日志驱动程序,这里设置为 json-file,表示使用 JSON 文件格式记录日志
  log-opts: 设置日志驱动程序的选项:
  

  • labels:用于标记日志文件,这里设置为 servicename。
  • max-size:设置单个日志文件的最大大小,这里设置为 500m(即 500 MB)。
  • max-file:设置最大的日志文件数量,这里设置为 3,意味着 Docker 将保留最多三个日志文件,超出的日志文件将被删除或重写。
  1. {
  2.   "builder": {
  3.     "gc": {
  4.       "defaultKeepStorage": "20GB",
  5.       "enabled": true
  6.     }
  7.   },
  8.   "experimental": false,
  9.   "registry-mirrors": [
  10.     "https://docker.hpcloud.cloud",
  11.     "https://docker.m.daocloud.io",
  12.     "https://docker.unsee.tech",
  13.     "https://docker.1panel.live",
  14.     "http://mirrors.ustc.edu.cn",
  15.     "https://docker.chenby.cn",
  16.     "http://mirror.azure.cn",
  17.     "https://dockerpull.org",
  18.     "https://dockerhub.icu",
  19.     "https://hub.rat.dev",
  20.     "https://proxy.1panel.live",
  21.     "https://docker.1panel.top",
  22.     "https://docker.m.daocloud.io",
  23.     "https://docker.1ms.run",
  24.     "https://docker.ketches.cn"
  25.   ],
  26.   "log-driver": "json-file",
  27.   "log-opts": {"labels": "servicename", "max-size": "500m", "max-file": "3"}
  28. }
复制代码
重启生效
  1. sudo systemctl daemon-reload                #重启daemon进程
  2. sudo systemctl restart docker                #重启docker
复制代码
3、基础的dockerfile

   这里通常目次结构为
workplace
  ​ |____ Dockerfile (下文的示例DockerFile)
  ​ |____ target(编译的目次,通常这里放必要打包的jar即可)
  Tips: 这里之前发起实行下属命令,避免找不到基础镜像
  1. docker pull eclipse-temurin:8
复制代码
  1. # 使用官方的OpenJDK镜像作为基础镜像
  2. FROM eclipse-temurin:8
  3. # 设置工作目录
  4. WORKDIR /opt/app
  5. # 将构建的Spring Boot应用的JAR文件复制到容器中
  6. COPY target/*.jar /opt/app.jar
  7. # 暴露应用程序运行的端口
  8. EXPOSE 8080
  9. # 启动Spring Boot应用
  10. ENTRYPOINT ["java", "-jar", "app.jar"]
复制代码
4、打包镜像

   镜像名称: java-app
  命令实行:应该位于 第2点 的目次接口下实行
  1. # 构建镜像
  2. docker build -t java-app .
  3. # 检查镜像
  4. docker images | grep gateway
  5. # 删除镜像
  6. docker rmi java-app
  7. # 如果镜像 REPOSITORY 一致,可以增加tag
  8. # eg: docker rmi java-app:laster
复制代码
四、构建运行

1、docker 部分

   docker run:这是 Docker 的根本命令,用于运行一个新的容器。
  -it:这两个选项组合在一起,意味着以交互模式运行容器,并且将终端输入连接到容器内部。-i 表示终端输入,-t 表示终端模拟器。
  -d : 这个选项表示以后台模式运行容器,即容器在后台运行,不会占用终端
  -p 8080:8080:这个选项用于端口映射。8080:8080 表示将主机的 8080 端口映射到容器的 8080 端口。这样,主机上访问的 8080 端口就会连接到容器内的应用程序。
  java-app:这是您要运行的 Docker 镜像的名称。这个镜像应该包含已经设置好的 Java 应用程序。
  1. # 后台启动
  2. docker run -it -d -p 8080:8080 java-app
  3. # 关闭
  4. # 获取镜像id ,假设获取到 0246cd97ff15
  5. docker ps | grep demo | awk '{print $1}'
  6. # 关闭镜像
  7. docker stop 0246cd97ff15
复制代码
2、docker-compose 部分

2.1、构建docker-compose.yml

2.1.1、同目次构建

   workplace
  ​ |____ Dockerfile (下文的示例DockerFile)
  ​ |____ ./demo.jar(编译的目次,通常这里放必要打包的jar即可)
  ​ |____ docker-compose.yml
  属性解析
   demo-endpoint : 服务名称,【按需变更】
  build :构建镜像的设置选项
  container_name :容器名称
  ports : 这个字段定义了端口映射。将主机的 8080 端口映射到容器的 8080 端口
  1. version: "3"
  2. services:
  3.   demo-endpoint:
  4.     container_name: demo-test
  5.     build:
  6.       context: .
  7.       dockerfile: Dockerfile
  8.     ports:
  9.       - "8080:8080"
复制代码
2.1.2、利用镜像构造

   workplace
  ​ |____ Dockerfile (下文的示例DockerFile)
  ​ |____ docker-compose.yml
  Tips: 作这一步,可以先将镜像打包到docker,再使用镜像即可
  基于此,这里示例一个
  1. REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
  2. demo              1.10      5251d5eba4a8   4 days ago     544MB
复制代码
属性解析
   这里与上述差别在于,使用 image 来替换 build 及其子属性
  1. version: "3"
  2. services:
  3.   demo-endpoint:
  4.     container_name: demo-test
  5.     image: demo:1.10
  6.     ports:
  7.       - "8080:8080"
复制代码
2.2、使用参数赋值

   workplace
  ​ |____ Dockerfile (下文的示例DockerFile)
  ​ |____ docker-compose.yml
  ​ |____ .env(会自动读取设置,默认设置)
  ​ |____ env_file/*.env (若必要,可以继续放置更多设置)
  Tips:.env 告急用来设置全局变量,其余文件用于影响应用参数
  .env文件
   同是情况变量,仅这个可以影响docker-compose内容值
  1. CONTAINER_NAME=demo-test
复制代码
image.env 文件
  1. TEST=test one 2
  2. HI=hi one 2
复制代码
例子利用 2.1.2 来作参考
   新增属性 env_file 用来设置参数变量
  1. version: "3"
  2. services:
  3.   demo-endpoint:
  4.     container_name: ${CONTAINER_NAME}
  5.     image: ${IMAGE_NAME}:${IMAGE_TAG}
  6.     ports:
  7.       - "8080:8080"
  8.     env_file:
  9.       - /env_file/image.env
复制代码
示例应用代码

  1. @SpringBootApplication
  2. @RestController
  3. public class DemoApplication {
  4.         @Value("${HI:hi}")
  5.         private String hi;
  6.         @Value("${TEST:test}")
  7.         private String test;
  8.         public static void main(String[] args) {
  9.                 SpringApplication.run(DemoApplication.class, args);
  10.         }
  11.         @GetMapping("/hello")
  12.         public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
  13.                 return String.format("Hello %s! {%s},{%s}", name,hi,test);
  14.         }
  15. }
复制代码
2.3、相干命令

后台挂载启动(如果更新了参数,再次运行可更新) dockcer compose up -d
关闭卸载应用 dockcer compose down
指定设置文件运行,告急用于区分情况
若存在多个情况设置,可以根据必要,通过 -f 指定设置文件来启动应用
docker compose -f docker-compose-dev.yml up -d
3、进阶的设置

1、 volumes :主机上的目次或文件挂载到容器内的目次。这样可以在容器内访问主机上的数据。
   这里举例,可以将运作的日志放到主机目次上
  1. volumes: - /opt/logs:/opt/logs
复制代码
2、 working_dir : 字段指定了容器内的工作目次,通常打包镜像时已经设置
   正如上文的:WORKDIR /opt/app
  3、 entrypoint : 字段指定了容器启动时运行的命令
   正如上文的 :ENTRYPOINT ["java", "-jar", "app.jar"]
  4、network : 如果不指定网络,Docker Compose 会自动创建一个默认网络,并将所有服务连接到该网络
   这里告急是基于是否必要网络分离
  5、资源设置
   下文提及的 Swarm 模式,通过 docker info 查抄,若 Swarm 为active则是属于该模式
  Swarm模式
  1. version: "3"
  2. services:
  3.   demo:
  4.     deploy:
  5.       resources:
  6.         limits:
  7.           cpus: "0.50"    # 限制 CPU 使用率为 50%
  8.           memory: "512M"  # 限制内存使用为 512MB
  9.         reservations:
  10.           cpus: "0.25"    # 保留 CPU 使用率为 25%
  11.           memory: "256M"  # 保留内存使用为 256MB
复制代码
非Swarm模式
  1. version: "3"
  2. services:
  3.   demo:
  4.     mem_limit: 512m  # 限制内存使用为 512MB
  5.     cpus: 0.5       # 限制 CPU 使用率为 50%
复制代码
4、进入容器

  1. docker exec -it demo bash
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表