MENU
// //

一文带你了解并学会使用Docker(二)

September 15, 2023 • 技术分享

在我们了解了Docker的简单使用之后,我们现在去部署它

Dockerfile(构建镜像)

dockerfile是一个文本文件,包含了一条条指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

基本命令

CodeDescription
From设置镜像使用的基本镜像
MAINTAINER设置镜像的作者
RUN编译镜像时运行的脚本
CMD设置容器的启动命令
LABEL设置镜像的标签
EXPOESE设置镜像暴露的端口
ENV设置容器的环境变量
ADD编译镜像时复制文件到镜像中
COPY编译镜像时复制文件到镜像中
ENTRYPOINT设置容器的入口程序
VOLUME设置容器的挂载卷
USER设置运行RUN CMD ENTRYPOINT的用户名
WORKDIR设置RUN CMD ENTRYPOINT COPYADD指令的工作目录
ARG设置编译镜像时加入的参数
ONBUILD设置镜像的ONBUILD指令
STOPSIGNAL设置容器的退出信号量dn.

使用Dockerfile构建镜像

docker build -f ./xxx-dockerfile(文件路径)  -t  镜像名称:版本
   # -f 指定当前dockerfile文件的路径
   # -t 指定新的镜像的名称

Docker Compose

Docker-compose 是一个定义运行多个 Docker 应用的工具,你可以使用YMAL文件来配置你的服务,然后使用docker-compose 命令,创建和启动、编排所有你配置的的服务。

#官网举例
version: "3"
services:
 
  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
 
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
 
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
 
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
 
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]
 
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
 
networks:
  frontend:
  backend:
 
volumes:
  db-data:

参数解释

CodeDescription
version目前有三个版本分别为Version 1,Version 2,Version 3
以下参数包含在services
image指定服务的镜像名称或镜像ID
build可以指定Dockerfile所在文件夹的路径(本地dockerfile)
commond使用command可以覆盖容器启动后默认执行的命令。
container_name指定容器名称
depends_on依赖的信息--可以和其他service或者监测信息一起使用
- conditioncondition: service_started 表示在依赖的服务启动之后,才启动本服务;
condition: service_healthy 表示在依赖的服务健康检查通过之后,才启动本服务
condition: service_completed_successfully 表示在依赖的服务成功执行之后,才启动本服务。
network_mode设置网路模式
ports对外暴露的端口定义
volumes挂载路径 用于设置映射路径
logs日志输出信息
healthcheck
- test检查命令
- interval健康检查的间隔,默认为 30 秒,单位(h/m/s);
- timeout健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,单位(h/m/s);
- retries当连续失败指定次数后,则将容器状态视为 unhealthy。<br/>和 CMD, ENTRYPOINT 一样,HEALTHCHECK 只可以出现一次,如果写了多个,只有最后一个生效。
- start_period应用启动期间的健康,检测不计入统计次数,但仍会发生检测

常用命令

命令作用示例
docker-compose up启动docker-compose尾部加上 -d 守护态运行(后台运行)
docker-compose down停止docker-compose
docker-compose -f 文件路径 up -d指定docker-compose文件启动docker-compose -f /usr/test/docker-compose up -d
docker-compose logs 镜像名查看日志docker-compose logs tomcat
docker-compose logs -f 镜像名监听日志会阻塞再命令窗口