4、docker镜像的制作

本文介绍了使用DockerFile制作docker镜像的方法,以编译NGINX为例,阐述了编写Dockerfile、准备源码包与配置文件、执行镜像构建等步骤。DockerFile由一条条命令组成,能直观展示镜像产生过程,可避免重复手动制作镜像的麻烦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker镜像的制作

DockerFile 可以说是一种可以被 Docker 程序解释的脚本,DockerFile 是由一条条的命令组成的,每条命令对应linux 下面的一条命令,Docker 程序将这些 DockerFile 指令再翻译成真正的 linux 命令,其有自己的书写方式和支持的命令,Docker 程序读取 DockerFile 并根据指令生成 Docker 镜像,相比手动制作镜像的方式,DockerFile 更能直观的展示镜像是怎么产生的,有了写好的各种各样 DockerFile 文件,当后期某个镜像有额外的需求时,只要在之前的DockerFile 添加或者修改相应的操作即可重新生成新的 Docke 镜像,避免了重复手动制作镜像的麻烦,

常用的指令

FROM #指定基础镜像

FROM centos:7.9.2009

MAINTAINER #定义镜像作者信息

MAINTAINER "Songwei 583341445"

ENV #定义容器环境变量

ENV name=zhangsan

ENV age=18

RUN #在容器中执行shell命令

RUN yum install epel-release -y

RUN yum -y install vim && yum -y install nginx

USER #指定该容器运行时的用户名和 UID,后续的 RUN 命令也会使用这面指定的用户执行

USER nginx

ADD #添加本地文件到容器,tar包会自动解压

ADD code.tar.gz /data/tomcat/webapps/

COPY #添加本地文件到容器,需要手动解压

COPY nginx.conf /apps/nginx/conf/nginx/nginx.conf

EXPOSE #定义容器暴露端口

EXPOSE 80 443

CMD #在本地容器中运行命令,一般是持续运行,不导致容器退出

CMD ["/usr/bin/run_tomcat.sh","mysqld"]

编译NGINX

编写Dockerfile

# vim Dockerfile 
# bianyi nginx
#
#
FROM centos:7.9.2009
MAINTAINER "Songwei 583341445@qq.com"
RUN yum install -y epel-release
RUN yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed
ADD nginx-1.18.0.tar.gz /usr/local/src/   
RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install
RUN useradd -s /sbin/nologin nginx
COPY nginx.conf /apps/nginx/conf
RUN mkdir -p /data/html && echo "configure-nginx:v2" >/data/html/index.html
RUN chown -R nginx:nginx /data/html /apps/nginx 
RUN ln -sv /apps/nginx/sbin/nginx /usr/sbin/
#USER nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]

准备源码包与配置文件

# ls
Dockerfile  nginx-1.18.0.tar.gz  nginx.conf
# vim nginx.conf
........
user  nginx;
........
        location / {
            root   /data/html;
            index  index.html index.htm;
        }
........

执行镜像构建

#进入到Dockerfile目录
# docker build -t 192.168.75.79/nginx/nginx:v2 .

构建完成

docker build -t 192.168.75.79/nginx/nginx:v2 .
[+] Building 0.1s (15/15) FINISHED                                                                                                    
 => [internal] load build definition from Dockerfile                                                                             0.0s
 => => transferring dockerfile: 32B                                                                                              0.0s
 => [internal] load .dockerignore                                                                                                0.0s
 => => transferring context: 2B                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/centos:7.9.2009                                                               0.0s
 => [1/10] FROM docker.io/library/centos:7.9.2009                                                                                0.0s
 => [internal] load build context                                                                                                0.0s
 => => transferring context: 72B                                                                                                 0.0s
 => CACHED [2/10] RUN yum install -y epel-release                                                                                0.0s
 => CACHED [3/10] RUN yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre   0.0s
 => CACHED [4/10] ADD nginx-1.18.0.tar.gz /usr/local/src/                                                                        0.0s
 => CACHED [5/10] RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install                 0.0s
 => CACHED [6/10] RUN useradd -s /sbin/nologin nginx                                                                             0.0s
 => CACHED [7/10] COPY nginx.conf /apps/nginx/conf                                                                               0.0s
 => CACHED [8/10] RUN mkdir -p /data/html && echo "configure-nginx:v2" >/data/html/index.html                                    0.0s
 => CACHED [9/10] RUN chown -R nginx:nginx /data/html /apps/nginx                                                                0.0s
 => CACHED [10/10] RUN ln -sv /apps/nginx/sbin/nginx /usr/sbin/                                                                  0.0s
 => exporting to image                                                                                                           0.0s
 => => exporting layers                                                                                                          0.0s
 => => writing image sha256:857aea42728bde3f1288b3e31d505510e61ab7bae681b0a926a5de5b6bb21434                                     0.0s
 => => naming to 192.168.75.79/nginx/nginx:v2                                                             

查看本地镜像

# docker images
REPOSITORY                  TAG        IMAGE ID       CREATED             SIZE
192.168.75.79/nginx/nginx   v2         857aea42728b   33 minutes ago      893MB #刚刚构建成功
192.168.75.79/nginx/nginx   v1         6ef1b08fe018   About an hour ago   771MB
1.1.1.1/nginx/nginx         8.88       e5ad6e029e21   29 hours ago        185MB
nginx                       latest     605c77e624dd   19 months ago       141MB
httpd                       latest     dabbfbe0c57b   19 months ago       144MB
debian                      latest     6f4986d78878   19 months ago       124MB
alpine                      latest     c059bfaa849c   20 months ago       5.59MB
ubuntu                      latest     ba6acccedd29   22 months ago       72.8MB
centos                      7.9.2009   eeb6ee3f44bd   23 months ago       204MB
centos                      latest     5d0da3dc9764   23 months ago       231MB
nginx                       1.18.0     c2c45d506085   2 years ago         133MB
nginx                       1.8.1      0d493297b409   7 years ago         133MB

启动容器

# docker run -it -d --name nginx-v587 -p 9093:80 192.168.75.79/nginx/nginx:v2



### 启动容器

```bash
# docker run -it -d --name nginx-v587 -p 9093:80 192.168.75.79/nginx/nginx:v2

已经成功运行了。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值