创建镜像有三种方法
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建
镜像的生命周期
将现有容器通过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源

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
第二种:将运行中的容器导入为模板,然后再进行导入
翻车。。。。
三、基于Dockerfile创建
Dockerfile 镜像制作和使用流程
Dockerfile 操作常用的指令
| 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