ZGGSONG WIKI

Docker

DockerFile文件

用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本

Dockerfile保留字指令

详细说明移步官网 >> 官网DOCCSDN实例

指令 解释 实例
FROM 基础镜像,当前新镜像基于哪个镜像创建的 FROM alpine:latest
MAINTAINER 镜像维护者的姓名和邮箱地址 MAINTAINER ZGGSONG[email protected]
RUN 容器构建时需要运行的指令,即在容器中运行的指令 RUN mkdir /app
EXPOSE 当前容器对外暴露的端口 EXPOSE 8080
WORKDIR 在创建容器后,终端默认登陆进来的工作目录 WORKDIR /app
ENV 在构建镜像时所需的环境变量,ENV这个环境变量可以在后续的任何RUN指令中使用,就像命令前制定环境变量了也可以在其他指令中直接使用这些环境变量,比如:WORKDIR $MY_PATH ENV MY_PATH /app
ADD 将宿主机目录下的文件拷贝进镜像,并且自动处理URL和解压tar压缩包 ADD .vim.tar.gz /root/
COPY 仅拷贝文件和目录到镜像中 COPY hom* /app/
VOLUME 创建一个具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷,其目的是为了防止需要持久化的镜像容器(例如mysql)用户在启动时忘记指定-v参数来持久化必要数据,没有-v则会在指定目录生成一个目录绑定容器的匿名卷 VOLUME ["/usr/local/volume1","/usr/local/volume2"]
CMD 指定一个容器启动时要运行的命令,可以有多个,但只有最后一个生效(覆盖),CMD会被docker run之后的参数替换 1. CMD bash example.sh
2. CMD ["/bin/echo", "this is a echo test"]
ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOIT的目的和CMD一样,都是在指定容器启动程序及参数
不同的是 ENTRYPOINT 每个指令都会生效
1. ENTRYPOINT bash example.sh
2. ENTRYPOINT ["docker-entrypoint.sh"]
ONBUILD 构建一个被继承的Dockerfile时运行命令,父镜像杯子镜像继承的时候,父镜像的onbuild被触发 ONBUILD RUN mkdir mydir

实战构建go项目

编写gin-demo

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
    	c.JSON(200, gin.H{
    		"code":    200,
    		"message": "Welcome!",
    	})
    })
    r.Run(":8080")
}

交叉编译linux二进制文件

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .

下载alpine

alpine系统特点

小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;

安全:面向安全的轻量发行版;

简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。

适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

docker pull alpine

编写Dockerfile

FROM alpine:latest

RUN mkdir "/app"
WORKDIR "/app"

COPY docker-demo "/app/docker-demo-app"

ENTRYPOINT ["./docker-demo-app"]

打包镜像

docker build -t docker-demo:v1 .

运行镜像

docker run -d --name=go-app -p 8080:8080 docker-demo:v1

打开浏览器测试,同时可通过docker logs进行查看 -f: 实时查看

docker logs -f go-app

Docker-compose容器编排

对Docker容器集群进行快速编排,通过docker-compose.yml,写好多个容器之间的调用关系,然后通过docker-compose up 命令即可一键启动/关闭这些容器

Compose常用命令

docker-compose.yml 文件目录执行命令

指令 解释
docker-compose -h 查看帮助
docker-compose up 启动所有docker-compose服务
docker-compose up -d 启动所有docker-compose服务并后台运行
docker-compose down 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps 展示当前docker-compose编排过的运行的所有容器
docker-compose top 展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id 查看容器输出日志
docker-compose config 检查配置
docker-compose config -q 检查配置,有问题才有输出
docker-compose restart 重启服务
docker-compose start 启动服务
docker-compose stop 停止服务

官方示例

version: '3'
services:
  back:
    image: backService:1.0
    container_name: back
    environment:
      - name=tom
      - DB_PATH=jdbc:sqlite:/data/ns.db
    restart: always
    privileged: true
    ports:
      - "9000:9000"
    networks:
      - "net"
    volumes:
      - "/root/k3s.kube.config:/k3s.kube.config"
      - "/root/data:/data"
      - "/etc/network/interfaces:/etc/network/interfaces"
  front:
    image: front:1.0
    container_name: front
    restart: always
    ports:
      - "10087:80"
    networks:
      - "net"
    volumes:
      - "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
  net:
  • version
  1. v3 版本不支持 volume_from 和 extends 属性
  2. cpu 和 内存属性的设置移到了 deploy 中
  3. v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。
  • services 多个服务

    • image 镜像名称

    • build 不使用镜像时候采用主动build镜像

    • environment 环境变量

    • expose 标示端口号

    • ports 映射端口号到宿主机

    • volumes 挂在目录到宿主机

    • depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行

    • container_name 容器名称

    • networks 网络(自定义网络名称)

    • restart always每次docker启动时候重启

    • links 连接目标容器(services下配置的名称)

    • privileged: true:容器可获得root权限

    • logging 日志选项

      • driver 配置驱动
      • options 可选配置
  • networks 配置自定义网络

docker-compose 来自: 带大家快速学习Docker-Compose

Copyright © 2022 ZGGSONG