Docker镜像简单入门
定义
镜像是一种轻量级、可执行的独立软件包
作用
- 打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
- docker镜像就好比是一个模板,可以通过这个模板来创建容器服务
- 通过一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
使用
| 拉取镜像 | 例2 |
| 删除镜像 | 例3 例4 |
| 查看镜像 | 例1 |
| 构建镜像 | 构建指令 构建脚本 例5 |
| 构建多架构镜像 | 例7 |
| 更改镜像 | 例6 |
| 打包镜像 | 例8 |
| 推送 | 例9 |
- Dockerfile 是一个用来构建镜像的文本文件
构建指令
| 指令 | 说明 | 格式 | 示例 |
|---|---|---|---|
| FROM | 以哪个镜像为基础开始构建,必须为第一个命令 | FROM FROM : FROM @ | FROM mysql:5.6 |
| MAINTAINER | 作者信息 | ||
| RUN | 运行一条命令 | ||
| CMD | docker 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 $imageNameecho '复制 Dockerfile...'
Copy-Item -Path $dockerfileSource -Destination $dockerfileDesPathecho '构建镜像...'
docker buildx build -t $imageName --platform=linux/arm64 -o type=docker $contextDirecho '运行容器...'
docker run -it --restart=always --name=$containerName -d $imageNameecho "删除远程镜像 ..."
docker rmi $remogeImageNameecho '构建远程镜像 ...'
docker tag $imageName $remogeImageNameecho '推送远程镜像 ...'
docker push $remogeImageNamepause
例1
查看已经下载的镜像
docker images
例2
拉取镜像
docker pull mysql
例3
删除所有镜像
docker rmi -f $(docker images -aq)
例4
指定id删除镜像
docker rmi -f c60d96bd2b77
例5
-
编辑Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime WORKDIR /app EXPOSE 80 COPY . . ENTRYPOINT ["dotnet", "HunanZondy.Realestate.Register.Host.dll"] -
执行构建
docker build -t hunanzondy.realestate .\HunanZondy.RealEstate\ -
构建的镜像指定多个 tag
docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest
| –platform | linux/arm64,linux/amd64 | 当指定多个架构时,只能使用 --push 推送到远程仓库,无法 --load,推送成功后再通过 docker pull --platform 来拉取指定架构的镜像 |
| –file | -f | 指定dockerfile文件,不指定的话,默认会读取上下文路径( . )下的 dockerfile |
| –tag | -t | 指定构建的镜像名和 tag |
例6
有时镜像拉取太慢,可以换成国内源,这样拉取速度更快。
- 编辑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"}}
}
- 重启docker,查看更改结果
docker info
说明
- centos7中daemon.json位置:/etc/docker/daemon.json
- 网易云 https://hub-mirror.c.163.com
- 百度云 https://mirror.baidubce.com
- DaoCloud http://f1361db2.m.daocloud.io
- 阿里云 https://ustc-edu-cn.mirror.aliyuncs.com
- Github https://ghcr.io
例7
前提
- 用
buildx,要确保 Docker 版本不低于19.03
下载地址:https://github.com/docker/buildx/releases/latest
根据操作系统选择对应的二进制文件。
重命名二进制文件并将其复制到操作系统对应的目录
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygVjoFO1-1650261374881)()]](https://img-blog.csdnimg.cn/a46f33e5ce7c4366b0aef0aa890dda29.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAMTA35Zu96YGT6YGT6ZW_,size_20,color_FFFFFF,t_70,g_se,x_16)
检测安装结果
docker buildx version
开启 binfmt_misc 来运行非本地架构的 Docker 镜像,使用的是 Mac 或者 Windows 版本 Docker 桌面版binfmt_misc 默认开启
其他平台需进行安装
docker run --privileged --rm tonistiigi/binfmt --install all
Docker 会使用默认构建器,是不支持多架构构建。需要创建新的支持多架构的构建器
docker buildx create --use --name mybuilder
准备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.realestateecho '构建镜像 Realestate...'
docker tag hunanzondy.realestate registry.cn-hangzhou.aliyuncs.com/xxx/beta:hunanzondy.realestateecho '推送镜像 Realestate...'
docker push registry.cn-hangzhou.aliyuncs.com/xxx/beta:hunanzondy.realestate
我用的书:《第一本Docker书》
https://gitee.com/sheng_wei_zhang/auto_upload_video_to_jinritoutiao
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
