Docker镜像简单入门

定义

镜像是一种轻量级、可执行的独立软件包

作用

  • 打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
  • docker镜像就好比是一个模板,可以通过这个模板来创建容器服务
  • 通过一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

使用

拉取镜像例2
删除镜像例3 例4
查看镜像例1
构建镜像构建指令 构建脚本 例5
构建多架构镜像例7
更改镜像例6
打包镜像例8
推送例9
  • Dockerfile 是一个用来构建镜像的文本文件

构建指令

指令说明格式示例
FROM以哪个镜像为基础开始构建,必须为第一个命令
FROM
  FROM :
  FROM @
FROM mysql:5.6
MAINTAINER作者信息
RUN运行一条命令
CMDdocker run IMAGE_ID cmd这里的默认命令
ENTRYPOINT配置容器启动后执行的命令
EXPOSE声明会用到的端口
ENV设置环境变量
ADD从当前目录复制文件到容器. 会自动处理目录, 压缩包等情况
COPY从当前目录复制文件到容器. 只是单纯地复制文件
VOLUME声明一个数据卷, 可用于挂载
WORKDIR容器启动时,执行的命令会在该目录下执行,相当于设置容器的工作目录
ONBUILD前缀命令, 放在上面这些命令前面, 表示生成的镜像再次作为"基础镜像"被用于构建时, 要执行的命令.
USER RUN命令执行时的用户.

构建脚本

powershell 构建脚本

$containerName='dbtool'
$imageName = $containerName
$remogeImageName = ('registry.cn-hangzhou.aliyuncs.com/xxxx/beta:'+$imageName)

# 自定义的dockerfile文件,会复制到上下文目录中去
$dockerfileSource = '.\DbTool.Dockerfile'

# 上下文目录,路径下的所有内容会打包上传给 Docker 引擎
$contextDir = '.\DbTool\'
$dockerfileDesPath = ($contextDir+'Dockerfile')
 
echo "删除容器..."
docker ps --format '{{ .ID }}\t{{.Image}}' |
Select-String -Pattern $containerName -CaseSensitive -SimpleMatch |
ForEach-Object{ 
	$value = $_.Line
    $value = $value.Split("`t")
    if($value[1] -eq $containerName)
    {
        echo "删除容器 $value ..."
        docker rm -f $value[0]
    }
}

echo "删除镜像..."
docker rmi $imageName

echo '复制 Dockerfile...'
Copy-Item -Path $dockerfileSource -Destination $dockerfileDesPath

echo '构建镜像...'
docker buildx build -t  $imageName --platform=linux/arm64 -o type=docker $contextDir

echo '运行容器...'
docker run -it --restart=always --name=$containerName -d  $imageName

echo "删除远程镜像 ..."
docker rmi $remogeImageName

echo '构建远程镜像 ...'
docker tag $imageName  $remogeImageName

echo '推送远程镜像 ...'
docker push $remogeImageName

pause

例1

查看已经下载的镜像

docker images

例2

拉取镜像

docker pull mysql

例3

删除所有镜像

docker rmi -f $(docker images -aq)

例4

指定id删除镜像

docker rmi -f c60d96bd2b77

例5

  1. 编辑Dockerfile

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    EXPOSE 80
    COPY . .
    ENTRYPOINT ["dotnet", "HunanZondy.Realestate.Register.Host.dll"]
    
  2. 执行构建

    docker build -t hunanzondy.realestate .\HunanZondy.RealEstate\
    
  3. 构建的镜像指定多个 tag

    docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest 
    
–platformlinux/arm64,linux/amd64当指定多个架构时,只能使用 --push 推送到远程仓库,无法 --load,推送成功后再通过 docker pull --platform 来拉取指定架构的镜像
–file-f指定dockerfile文件,不指定的话,默认会读取上下文路径( . )下的 dockerfile
–tag-t指定构建的镜像名和 tag

例6

有时镜像拉取太慢,可以换成国内源,这样拉取速度更快。

  1. 编辑daemon.json文件的registry-mirrors项
{
  "registry-mirrors": [
    "https://mirror.baidubce.com",
    "http://hub-mirror.c.163.com"
  ],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "20GB"
    }
  }
}
  1. 重启docker,查看更改结果
docker info

说明

例7

前提

  • buildx,要确保 Docker 版本不低于 19.03
  1. 安装buildx

下载地址:https://github.com/docker/buildx/releases/latest
根据操作系统选择对应的二进制文件。

重命名二进制文件并将其复制到操作系统对应的目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygVjoFO1-1650261374881)()]

检测安装结果

docker buildx version
  1. 开启 binfmt_misc

开启 binfmt_misc 来运行非本地架构的 Docker 镜像,使用的是 Mac 或者 Windows 版本 Docker 桌面版binfmt_misc 默认开启

其他平台需进行安装

docker run --privileged --rm tonistiigi/binfmt --install all
  1. 切换构建器

Docker 会使用默认构建器,是不支持多架构构建。需要创建新的支持多架构的构建器

docker buildx create --use --name mybuilder
  1. 构建镜像

准备Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "HunanZondy.Realestate.Register.Host.dll"]

执行构建指令

docker buildx build -t <image-name> --platform=linux/arm64 -o type=docker .
  • 这个 . 是在指定上下文的目录,docker build 命令得知这个路径后,会将路径下的所有内容打包上传给 Docker 引擎。Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。

例8

将容器做了很多自定义修改后,需要打包成一个镜像方便下次使用

# 将e8acc861cc50容器做成名为fastreport.aspnetcore的镜像
docker commit e8acc861cc50 fastreport.aspnetcore
# 保存为tar归档文件
docker save -o fastreport.aspnetcore.tar fastreport.aspnetcore

使用的时候加载tar文件

docker load -i fastreport.aspnetcore.tar
# 查看是否加载成功
docker images | grep fastreport.aspnetcore

例9

echo "删除镜像 Realestate..."
docker rmi registry.cn-hangzhou.aliyuncs.com/xxx/beta:hunanzondy.realestate

echo '构建镜像 Realestate...'
docker tag hunanzondy.realestate registry.cn-hangzhou.aliyuncs.com/xxx/beta:hunanzondy.realestate

echo '推送镜像 Realestate...'
docker push registry.cn-hangzhou.aliyuncs.com/xxx/beta:hunanzondy.realestate

我用的书:《第一本Docker书》
https://gitee.com/sheng_wei_zhang/auto_upload_video_to_jinritoutiao

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值