Dokcerfile制作:

Dockerfile 是一个用来构建镜像的文本文件,Docker通过读取Dockerfile中的指令自动生成镜像。

1. Dockerfile核心指令:

FROM:用于指定基础镜像。
MAINTAINER:	用于指定作者信息。
ENV:	用于定义环境变量。
USER:	用于指定容器中运行的进程的管理用户。
WORKDIR:	用于指定容器中运行的命令所在的路径。
ADD:	用于将物理机的文件上传到镜像中,可以直接对压缩包进行解压缩。
COPY:	用于将物理机的文件上传到镜像中,但是不可以直接对压缩包进行解压缩。
RUN:	 用于指定在构建镜像中运行的命令。
CMD:	 用于指定在容器启动时默认执行的命令(指定多个只有最后一个生效),如果在启动容器时,额外指定命令,则CMD命令会被覆盖。
ENTRYPOINT:	用于指定容器启动时执行的命令,额外指定的命令不会覆盖ENTRYPOINT的指令,并成为ENTRYPOINT的参数。
EXPOSE:	用于声明容器开放的端口,该端口一般用于某个服务,后期通过映射后,可以直接访问。

2. 制作镜像:

2.1 基于nginx镜像制作新镜像:
### 基于nginx官方镜像,制作一个新镜像。
### 创建Dockerfile文件:
[root@www.lutixia.cn ~]# mkdir images -p && cd images
[root@www.lutixia.cn images]# cat > Dockerfile  <<EOF
# 指定基础镜像
FROM nginx:1.18.0
# 添加作者信息(可选)
MAINTAINER Author:lutixia Website:www.lutixia.cn
# 替换配置文件:
ADD default.conf /etc/nginx/conf.d/
# 替换首页文件:
COPY index.html  /usr/share/nginx/html/
# 启动nginx
CMD nginx -g "daemon off;"
EOF

### 创建配置文件:
[root@www.lutixia.cn images]# cat > default.conf <<EOF
server {
    listen       80;
    server_name  www.lutixia.cn;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
EOF
### 创建首页文件:
[root@www.lutixia.cn images]# cat > index.html  <<EOF
this is www.lutixia.cn page
EOF

### 检查文件是否正常齐全:
[root@www.lutixia.cn images]# ls
default.conf  Dockerfile  index.html

### 开始构建:
[root@www.lutixia.cn images]# docker build -t dockerfile_nginx:v1 .
或者
[root@www.lutixia.cn images]# docker build -t dockerfile_nginx:v1 /root/images/
build:	构建镜像。
-t:		给镜像打tag标签
.		表示当前目录,也可以指定绝对路径 

### 查看镜像:
[root@www.lutixia.cn images]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
dockerfile_nginx   v1        555dad98c818   11 minutes ago   133MB
lutixia/nginx      v1        1511d1b53559   19 hours ago     133MB
nginx              latest    08b152afcfae   2 days ago       133MB
nginx              1.18.0    c2c45d506085   3 months ago     133MB
centos             7         8652b9f0cb4c   8 months ago     204MB

### 基于新镜像启动容器:
[root@www.lutixia.cn images]# docker run -d --name nginx_v1 -p 80:80 dockerfile_nginx:v1
ff1002be87361553bebc7c79dc63d95e814abb91cf2d46cd54f0d2e703017425
### 本地做hosts解析:
[root@www.lutixia.cn images]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.75.121  www.lutixia.cn

### 通过域名访问:
[root@www.lutixia.cn images]# curl www.lutixia.cn
this is www.lutixia.cn page
2.2 基于centos 7镜像制作nginx镜像:
# 基于centos 7镜像制作nginx镜像,nginx的源码包直接从网上下载:
[root@www.lutixia.cn ~]# mkdir centos  -p  && cd centos

### 制作Dockerfile:
[root@www.lutixia.cn centos]# echo '
FROM centos:7
MAINTAINER Author:lutixia Website:www.lutixia.cn
USER root
ENV NGINX_VERSION=1.18.0
WORKDIR /usr/src/
RUN yum install gcc gcc-c++ make wget pcre-devel zlib-devel -y &&  \
        wget -c https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz && \
        tar xf nginx-$NGINX_VERSION.tar.gz && \
        cd nginx-$NGINX_VERSION && \
        ./configure --prefix=/usr/local/nginx && \
        make && make install && \
        rm -rf nginx-$NGINX_VERSION.tar.gz
EXPOSE 80
CMD /usr/local/nginx/sbin/nginx -g "daemon off;"
'  > Dockerfile

### 开始构建:
[root@www.lutixia.cn centos]# docker build -t dockerfile_nginx:v2 .

### 查看镜像:
[root@www.lutixia.cn centos]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
dockerfile_nginx   v2        92c04659488f   7 seconds ago   453MB
dockerfile_nginx   v1        555dad98c818   3 hours ago     133MB
lutixia/nginx      v1        1511d1b53559   22 hours ago    133MB
nginx              latest    08b152afcfae   2 days ago      133MB
nginx              1.18.0    c2c45d506085   3 months ago    133MB
centos             7         8652b9f0cb4c   8 months ago    204MB

### 基于刚构建的镜像运行容器:
[root@www.lutixia.cn centos]# docker run -d --name nginx_v2 -p 8080:80 dockerfile_nginx:v2
ac4a90496234de90edf2ea0b3a2f0c018584a8ea551c087ff8f2b84718cf85e1
# 访问测试,状态码为200,则表示成功!
[root@www.lutixia.cn centos]# curl 192.168.75.121:8080 -I
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 25 Jul 2021 07:43:08 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 25 Jul 2021 07:40:52 GMT
Connection: keep-alive
ETag: "60fd1584-264"
Accept-Ranges: bytes
2.3 基于centos 7镜像制作nginx镜像二:
# nginx源码包从物理直接上传:
[root@www.lutixia.cn centos]# echo '
FROM centos:7
MAINTAINER author:lutixia website:www.lutixia.cn
ENV NGINX_VERSION=1.18.0
RUN yum install gcc gcc-c++ make wget pcre-devel zlib-devel -y
WORKDIR /usr/src/
ADD nginx-${NGINX_VERSION}.tar.gz .
RUN cd nginx-${NGINX_VERSION} && \
    ./configure --prefix=/usr/local/nginx && \
    make && make install && \
    rm -rf nginx-${NGINX_VERSION}.tar.gz
EXPOSE 80
CMD /usr/local/nginx/sbin/nginx -g "daemon off;" 
' > Dockerfile

### 准备好nginx的源码包:
[root@www.lutixia.cn centos]# wget  -c https://nginx.org/download/nginx-1.18.0.tar.gz
[root@www.lutixia.cn centos]# ls
Dockerfile  nginx-1.18.0.tar.gz

### 开始构建:
[root@www.lutixia.cn centos]# docker build -t dockerfile_nginx:v3 .

### 基于新镜像运行容器:
[root@www.lutixia.cn centos]# docker run -d --name nginx_v3 -p 8081:80 dockerfile_nginx:v3
c31fc55643d7da53210c1839e2040f1090ae0972702313b7e4c839a14ce7b8e0
# 访问新容器的web服务:
[root@www.lutixia.cn centos]# curl 192.168.75.121:8081 -I
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 25 Jul 2021 08:04:56 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 25 Jul 2021 07:58:40 GMT
Connection: keep-alive
ETag: "60fd19b0-264"
Accept-Ranges: bytes

欢迎点赞,收藏,你的喜欢就是我原创的动力,Docker系列将会持续更新。

针对部分知友咨询的镜像下载,常用软件下载,以及Linux相关的电子书,可以到该站点下载。

Publish Over SSH Exec command 制作docker images docker生成dockerfile_nginx