Docker镜像制作

114 阅读2分钟

目标

基于基镜像【adoptopenjdk-8u222-b10-jdk-hotspot-bionic:x86】 将【appcloud】下的应用,制作成名称为【appcloud】,tag为【v1.0.0】的镜像,并推送到registry.myserver.com下的project仓库中

示例目录结构

示例目录结构

appcloud:应用目录 dockerfile:镜像制作配置文件 .dockerignore:排除打镜像时候处理的文件

dockerfile

# 定义使用的基础镜像
FROM adoptopenjdk-8u222-b10-jdk-hotspot-bionic:x86 
# 定义容器运行时的应用目录
WORKDIR /app 
# 拷贝模板机上的文件到容器应用目录下
COPY appcloud/bin /app/bin 
COPY appcloud/components /app/components 
COPY appcloud/metadata /app/metadata 
COPY appcloud/server /app/server 
COPY appcloud/startup.sh /app/startup.sh 
COPY appcloud/web /app/web   
# 对容器启动时候的脚本赋权
RUN chmod a+x startup.sh 
# 指定容器启动时运行的脚本文件
ENTRYPOINT ["./startup.sh"]

.dockerignore

创建.dockerignore文件,排除打镜像时候处理的文件

appcloud/tools/
appcloud/gclog
appcloud/log.path*
appcloud/server/log/*.log 
appcloud/server/log/*.gz 
appcloud/nohup.out 

docker load

#导入基镜像,到tar文件的目录下执行
docker load < adoptopenjdk-8u222-b10-jdk-hotspot-bionic-x86.tar

docker build

#创建镜像,不要漏掉最后面的点
docker build -f ./dockerfile -t ImageName:tag . 
# 示例,制作名为【registry.myserver.com/project/appcloud】,tag为【v1.0.0】的镜像
docker build -f ./dockerfile -t registry.myserver.com/project/appcloud:v1.0.0 .

docker images

#展示docker环境中的镜像列表,用来查看是否创建成功
docker images

docker run

# docker中进行镜像的启动验证
docker run -d -p 80:80 --privileged=true --name appcloudtest registry.myserver.com/project/appcloud:v1.0.0
# -d 后台运行
# -p 端口映射
# --privileged=true  赋权
# -name 启动的容器名称
# 最后内容:启动容器的镜像

docker login

# 登录镜像仓库
docker login registry.myserver.com
Username: username
Password:

docker tag

# 镜像仓库对镜像名称有要求,一般是仓库地址:端口/项目名/镜像名:tag
# 如果build的镜像名称不符合要求,推送会失败,所以通过 docker tag对镜像改名
# docker tag  镜像ID  仓库地址:端口/项目名/镜像名:版本tag
# 示例
docker tag 663f13bea92d registry.myserver.com/project/appcloud:v1.0.0

docker push

# 镜像推送到registry.myserver.com仓库
docker push registry.myserver.com/project/appcloud:v1.0.0

docker save

# 如果没有镜像仓库,或者无法连接的时候,可以将镜像导出为离线文件,拷贝到对应容器环境中导入使用
# 执行后,会在执行目录下,生成一个name.tar文件,就是离线的镜像文件
docker save -o name.tar registry.myserver.com/project/appcloud:v1.0.0

磁盘处理

#空间占用查看
docker system df
#Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
#Containers:运行的容器占用的空间,表示每个容器的读写层的空间。
#Local Volumes:容器挂载本地数据卷的空间。
#Build Cache:镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。

#删除不用的镜像
docker rmi -f name:tag
#删除镜像构建时候的缓存
docker builder prune
#删除不用的数据卷
docker volume prune
#一键清理
docker system prune