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相关的电子书,可以到该站点下载。