首页 > 其他分享 >docker镜像制作和管理

docker镜像制作和管理

时间:2024-08-01 16:56:24浏览次数:15  
标签:容器 run -- yum 镜像 docker 制作

一、制作镜像方式

Docker 镜像制作类似于虚拟机的镜像(模版)制作,即按照公司的实际业务需求将需要安装的软件、相关配置等基础环境配置完成,然后将其做成镜像,最后再批量从镜像批量生成容器实例,这样可以极大的简化相同环境的部署工作.

Docker的镜像制作分为手动制作(基于容器)和自动制作(基于DockerFile),企业通常都是基于Dockerfile制作镜像

总结:

  1. 下载官方或者别人制作好的 镜像进行修改

  2. 利用dockerfile 生成自己的镜像

docker commit #通过修改现有容器,将之手动构建为镜像
docker build  #通过Dockerfile文件,批量构建为镜像

二、将现有容器通过docker commit手动构建镜像

1.基于容器手动制作镜像步骤

docker commit 格式

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

# REPOSITORY  软件名
# TAG         版本号

#选项  OPTIONS
-a, --author string     Author (e.g., "John Hannibal Smith <hannibal@ateam.com>")
-c, --change list       Apply Dockerfile instruction to the created image
-m, --message string    Commit message
-p, --pause             Pause container during commit (default true)


#说明:
制作镜像和CONTAINER状态无关,停止状态也可以制作镜像
如果没有指定[REPOSITORY[:TAG]],REPOSITORY和TAG都为<none>
提交的时候标记TAG号: 生产当中常用,后期可以根据TAG标记创建不同版本的镜像以及创建不同版本的容器

基于容器手动制作镜像步骤具体如下

  1. 下载一个系统的官方基础镜像,如: CentOS 或 Ubuntu

  2. 基于基础镜像启动一个容器,并进入到容器

  3. 在容器里面做配置操作

    • 安装基础命令

    • 配置运行环境

    • 安装服务和配置服务

    • 放业务程序代码

  4. 提交为一个新镜像 docker commit

  5. 基于自己的的镜像创建容器并测试访问

2.实战案例:基于 busybox 制作httpd镜像

docker run -it --name b1  busybox
#启动  busybox 容器
/ # hostname   -i
/ # httpd --help                                 进入容器查看  httpd 的帮助
/ # mkdir /data/html -p                          新建主站点目录
/ # echo testpage  > /data/html/index.html       新建站点目录
/ # httpd -f  -h  /data/html/                   -f 前台启动  -h 指定主站点

docker commit -a "hx" -c 'CMD /bin/httpd -fv -h /data/html' -c "EXPOSE 80" b1 httpd-busybox:v1.0
#  -a 作者     -c 执行的命令   -c 暴露端口    b1 镜像 打上标签

 启动制作好的容器

docker run -d --rm --name web1 -P httpd-busybox:v1.0

2.实战案例: 基于官方镜像生成的容器制作tomca镜像

下载启动tomcat 容器

docker run -d -p 8080:8080 tomcat 
#下载启动 tomcat  容器

 修改容器

docker ps -a
#  先查看的  id

docker exec -it af bash
# 进入容器

cp -a webapps.dist/* webapps/
#复制页面文件

 打包成镜像

docker commit -m "add webapps app" -a "hx" af9b84262c6f  tomcat:0731

 启动镜像

docker run -d --name t1  -p 8081:8080 tomcat:0731

3.实战案例:基于CentOS的基础镜像利用yum 安装手动制作nginx的镜像

启动容器

docker run -it --name c1 centos:latest bash
cat /etc/redhat-release

 修正时区 yum 源

ls -l /etc/localtime
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

wget http://mirrors.aliyun.com/repo/Centos-8.repo
#在宿主机中下载 yum 文件

docker cp Centos-8.repo 086642a4647b:/
#使用  docker  cp  命令将文件拷贝进 容器 

#修改yum源
cd /etc/yum.repos.d/
rm -rf *
cd /
mv Centos-8.repo /etc/yum.repos.d/
yum install wget -y
#进入容器测试

 安装nginx, 修改配置文件

yum install  nginx  net-tools

vi /etc/nginx/nginx.conf
daemon off;
#前台执行

#生成页面
echo "nginx page in docker"  > /usr/share/nginx/html/index.html

 打包成镜像

docker commit -a 'hx'  -m 'yum nginx' -c "EXPOSE 80 443"  c1  centos:nginx-v1 nginx

三、利用DockerFile文件执行docker build自动构建镜像

1.Dockerfile 操作指令

常用的操作指令

常用指令含义
FROM 指定基础镜像(是Dockerfile的第一行指令)
MAINTAINER 指定镜像维护人信息(可选)
RUN 指定Linux命令,如果要执行连续多条命令时建议用 ; 或 && 或 <<EOF 串起来使用
EXPOSE 指定容器应用的端口
ENV 设置镜像的环境变量
ADD/COPY 复制文件/目录到镜像里
VOLUME 指定容器的匿名数据卷
USER 指定容器的运行用户
WORKDIR 指定后续镜像层的工作目录
ARG 指定构建镜像时传入的参数变量,docker build --build-arg 变量=值
CMD/ENTRYPOINT 指定容器启动时执行的命令

CMD和ENTRYPOINT的区别

共同点:都可以用来指定容器启动命令。

区别:ENTRYPOINT指定的容器启动命令优先级更高。

如果CMD和ENTRYPOINT同时存在,那么CMD指定的内容将作为ENTRYPOINT指定的容器启动命令的选项或参数使用。

容器启动时运行的命令优先级
docker run --entrypoint=“命令” > 镜像里的ENTRYPOINT指定的命令 > docker run … 镜像 命令 > 镜像里的CMD指定的命令

ADD和COPY的区别

共同点:都可以将本地的文件/目录复制到镜像里。

区别:ADD还可以通过URL下载文件复制到镜像里,还能将本地的压缩包解压后复制到镜像里。

URL下载和压缩包解压特性不能同时使用。

2.基于Dockerfile构建镜像的步骤

在编写 Dockerfile 时,有严格的格式需要遵循。

1)第一行 用FROM指令指明所用的基础镜像;

2)之后用MAINTAINER指令说明维护镜像的用户信息;

3)然后用镜像操作相关指令,比如RUN EXPOSE ENV ADD COPY 等指令,编写构建镜像的过程。每运行一条指令,都会给基础镜像添加新的一层;

4)结尾使用CMD/ENTRYPOINT指令指定容器启动时执行的命令;

5)最后使用docker build -t 新镜像名:标签 . [-f Dockerfile文件路径]命令构建镜像。

3.基于Dockerfile创建镜像应用实例

Step1 建立工作目录

mkdir  /opt/apache
cd  /opt/apache

Step2 创建并编写Dockerfile文件

vim Dockerfile

#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <hmj>

#更换镜像
RUN rm -rf /etc/yum.repos.d
ADD qh.repo /etc/yum.repos.d/

#镜像操作指令安装apache软件
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html

##方法一
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

##方法二
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]

Step3 编写执行脚本

vim  run.sh

rm -rf /run/httpd/*                            #清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND            #指定为前台运行

#因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。

Step4 创建测试页面

echo "this is test web from hx " > index.html
ls

Step5 使用Dockerfile生成镜像

docker build -t httpd:centos .           
#注意别忘了末尾有"."

Step6 使用新的镜像运行容器并测试

 1.使用新镜像运行容器

docker run -it -d --rm -p 8888:80 httpd:centos2
docker ps -a 

 2.测试

四、如何去缩小构建镜像的大小?

1)尽可能的采用小体积的基础镜像;

2)尽可能的减少Dockerfile指令的数量;

3)在RUN指令里添加安装软件后清空yum/apt缓存、软件包的命令;

4)使用多级(多阶段)构建的方法 

FROM 第一阶段的基础镜像 AS 别名
......
FROM 第二阶段的基础镜像
COPY --from=别名  第一阶段构建的文件/目录  当前阶段的路径
 .....
CMD/ENTRYPOINT 指定容器启动时执行的命令

 

标签:容器,run,--,yum,镜像,docker,制作
From: https://www.cnblogs.com/hxqwe/p/18335062

相关文章

  • 拖拽式操作也能制作中国式报表了?
    报表作为企业经营和决策的重要工具,其重要性不言而喻。 中国式报表,不仅要求数据的精准呈现,还需要在格式上保持高度的灵活性,以满足不同场景下的需求。中国式报表以独特的复杂性和信息量大而著称,而这种复杂性也带来了制作和维护上的挑战,使得许多企业在处理中国式报表时感到力不从......
  • docker方式安装redis集群
    创建一个Redis集群,你需要按照一定的步骤来配置Docker容器和Redis实例。以下是详细的步骤来帮助你完成这个过程,并创建一个包含六台服务器的Redis集群。准备工作确保你已经安装了Docker和DockerCompose(可选但推荐)。创建Redis集群创建目录结构在主机上创建必要的......
  • centos在线安装部署2024年最新的docker版本
    1.yum包更新到最新sudoyumupdate-y2.安装依赖软件包sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm23.添加阿里的镜像,下载镜像速度比较快sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-c......
  • 抖音私信如何跳转微信,抖音卡片制作教程
       在社交媒体平台中,抖音和微信都是非常受欢迎的应用程序。抖音是一款短视频分享平台,而微信是一款社交聊天应用。有时候,我们可能希望将抖音视频分享到微信上,但是却无法直接在抖音上找到跳转微信的功能。所以在本文中,我们将探讨如何生成抖音跳转微信链接的方法。首先,我们需要......
  • wsl ubuntu20.4 安装docker
    docker网站被禁处理办法sudocurl-fsSLhttps://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg-o/etc/apt/keyrings/docker.ascsudochmoda+r/etc/apt/keyrings/docker.ascecho\"deb[arch=$(dpkg--print-architecture)signed-by=/etc/apt/keyrings/docker.......
  • 制作java代码 Dockerfile
    DockerfileFROMmaven:3.6.2-jdk-8-slimASbuilderCOPYdigit/digit-life-service/build/WORKDIR/build/RUN--mount=type=cache,target=/root/.m2mvncleaninstall-Ptest-Dmaven.test.skip=trueFROMopenjdk:8-slimWORKDIR/appsCOPY--from=builder/bui......
  • Win11系统Docker部署Blazor程序
    1.开发环境Windows11家庭版,默认支持WSL22.Docker安装安装DockerDesktop需要启用Win11的Linux子系统和虚拟机。以管理员身份运行命令行程序,执行如下命令:启用适用于Linux的Windows子系统dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsyst......
  • CPU指令集——bayer抽取r、g、b三通道(含镜像)-宽度为16或32整数倍版本
    #include<intrin.h>//forsse#include<string.h>//formemcpyenumBayerFormat{bayerRG,bayerGR,bayerBG,bayerGB};enumMirror{mirrorNo,//不镜像mirrorTB,//上下镜像mirrorLR,//左右镜像......
  • kubeasz 制作k8s 集群离线安装包
    转载:kubeasz制作k8s集群离线安装包kubeasz制作k8s集群离线安装包大家好,欢迎来到运维有术本文介绍了,利用ezdown制作kubeasz离线部署k8s集群所需的离线安装包。使用kubeasz离线安装k8s集群需要下载四个部分:kubeasz项目代码二进制文件(k8s、etcd、container......
  • Docker网络版安装
    一:准备工作通过uname-r命令查看你当前的内核版本Docker要求CentOS系统的内核版本在3.10以上,查看本页面的前提条件来验证你的CentOS版本是否支持Docker。二:部署安装1:使用root权限登录Centos。确保yum包更新到最新。yum-yupdate2:卸载旧版本(如果安装过旧......