Docker构建镜像

216 阅读3分钟

创建镜像有三种方法

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于Dockerfile创建

镜像的生命周期

image.png

将现有容器通过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标记创建不同版本的镜像以及创建不同版本的容器

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

下载 ubuntu 镜像,并启动

docker pull ubuntu 
docker run -it -p 80 --name u_nginx ubuntu bash

在容器里面做配置操作

root@a35bb25b8998:/etc/apt# sed -ri.bak  's#\/\/.*.ubuntu.com#\/\/mirrors.aliyun.com#' /etc/apt/sources.list
#修改  apt源

![image.png](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/af04662566584882bbaae1b865e75364~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5oiR5ZKMMTAwMeS4queyieS4neeahOaVheS6iw==:q75.awebp?rk3s=f64ab15b&x-expires=1772070556&x-signature=6qjJ8XZtaoCGTWOYNH6W8yCxuvQ%3D)
root@a35bb25b8998:/etc/apt# cat /etc/apt/sources.list
root@a35bb25b8998:/etc/apt# apt update
# 更新源

root@a35bb25b8998:/etc/apt# apt install  nginx -y
#安装nginx  需要选择时区    6    亚洲  70  上海

root@a35bb25b8998:/etc/apt# echo nginx web in docker  > /var/www/html/index.html

提交为一个新镜像 docker commit

docker commit -a 'zhou' -m 'ubuntu-nginx' u_nginx   u20.04_nginx:1.18-v1.0
sha256:b48c02ec0a7609117d1b1b9a048e70b30972665644b105ad8b4cbe64af741b3a
[root@ubuntu2204 ~]#docker images
REPOSITORY     TAG         IMAGE ID       CREATED             SIZE
u20.04_nginx   1.18-v1.0   b48c02ec0a76   21 seconds ago      182MB

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

[root@ubuntu2204 ~]#docker run -d  -p 80 --name n-web  u20.04_nginx:1.18-v1.0  nginx -g "daemon off;"
066b5e5ae52936928f634808c5dea8a62ce98befec5fd9b66f5453e25c5ac642

[root@ubuntu2204 ~]#docker port  n-web
80/tcp -> 0.0.0.0:32770
80/tcp -> [::]:32770


[root@localhost ~]#curl 192.168.91.11:32770
nginx web in docker

第二种:将运行中的容器导入为模板,然后再进行导入

image.png

image.png 翻车。。。。

三、基于Dockerfile创建

Dockerfile 镜像制作和使用流程

image.png

Dockerfile 操作常用的指令

image.png

Dockerfile 指令说明
FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

Dockerfile 案例

mkdir /data/dockerfile/system/centos/centos7 -p
cd /data/dockerfile/system/centos/centos7/
vim Dockerfile

image.png

image.png

image.png