docker镜像制作

基于busybox制作默认执行httpd服务的镜像

#下载镜像
[root@docker ~]# docker pull busybox

# 启动镜像   
[root@docker ~]# docker run --name b1 -it busybox

# 创建html目录
/ # mkdir -p /data/html

# 创建索引页面
/ # vi /data/html/index.html

# 生成新的docker images
[root@docker ~]# docker commit -p b1

# 打标签
[root@docker ~]# docker tag e0cc8f6bd590 busybox/httpd:v-0.1

# 查看images默认运行的命令
[root@docker ~]# docker inspect busybox/httpd:v-0.1 | sed -n '/Cmd/{n;p}'

# 修改默认运行的命令  -a 作者  -p 暂停容器
[root@docker ~]# docker commit -a 'ray' -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 busybox/httpd:v-0.0

# 运行
[root@docker ~]# docker run -d --name httpd_1 busybox/httpd:v-0.0

# 查看ip
[root@docker ~]# docker inspect httpd_1 | grep -n 'IPAddress'

# 访问
[root@docker ~]# curl 172.17.0.3 

镜像导入导出

[root@docker ~]# docker save -o busybox.gz busybox/httpd:v-0.0 

[root@docker ~]# docker load -i busybox.gz

Dockerfile自制镜像

[root@docker ~]# mkdir makeImages
[root@docker ~]# cd makeImages/
[root@docker makeImages]# vim  Dockerfile 
FROM busybox:latest
# MAINTAINER "RAY"
LABEL <maintainer>=<'ray'> 
# 环境变量
ENV <DOC_ROOT>=</data/web/html> 
<WEB_SERVER_PACKAGE>=<nginx-1.15-2> 
COPY index.html ${DOC_ROOT:-/data/web/html/}
COPY yum.repos.d /etc/yum.repos.d/
# ADD http://nginx.org/download/nginx-1.15.2.tar.gz /usr/local/src 
# 将tar包展开放至容器/usr/local/src目录下
ADD ${WEB_SERVER_PACKAGE:-nginx-1.15.2}.tar.gz /usr/local/src 
# 指定后续操作的工作目录 
WORKDIR /usr/local/src/ 
# 在images中创建一个挂载点目录 
VOLUME /data/html/
# 为容器打开指定要监听的端口
EXPOSE 80/udp 80/tcp

# 生成镜像
[root@docker makeImages]# docker build -t busybox/httpd:v-0.1 ./

# 启动一个容器执行一条命后然后删除容器
[root@docker makeImages]# docker run --name test --rm busybox/httpd:v-0.1 cat /data/web/html/index.html
# 查看镜像环境变量  -P 选项 可以使用docker port 查看端口    -e 选项可以在启动容器是设置环境变量
[root@docker makeImages]# docker run --name test --rm -P busybox/httpd:v-0.1  printenv

 基于centos制作nginx镜像

FROM centos
LABEL <maintainer>=<'ray'>  app='nginx'
ENV BASE_PATH='/usr/local/nginx' 
        NGINX_PKG='nginx-1.12.2'
RUN yum -y install gcc pcre-devel openssl-devel make
ADD ${NGINX_PKG}.tar.gz .
RUN cd ./$NGINX_PKG && 
        ./configure --prefix=$BASE_PATH 
                    --with-http_ssl_module 
                    --with-stream 
                    --with-http_stub_status_module && 
        /usr/bin/make && /usr/bin/make install && 
        /usr/bin/ln -s $BASE_PATH/sbin/nginx /sbin/
#ADD nginx.conf ${BASE_PATH}/conf/nginx.conf
EXPOSE 80
CMD ["/sbin/nginx","-g","daemon off;"]                                        

 **ENTRYPOINT 与CMD相似,但不会被docker run 执行的命令所覆盖。

如果确定要覆盖ENTRYPOINT的命令,使用 --entrypoint cmd

**

FROM centos 
LABEL <maintainer>=<'ray'>  app='nginx'
ENV BASE_PATH='/usr/local/nginx' 
    NGINX_PKG='nginx-1.12.2'
RUN yum -y install gcc pcre-devel openssl-devel make
ADD ${NGINX_PKG}.tar.gz .
RUN cd ./$NGINX_PKG && 
    ./configure --prefix=$BASE_PATH 
            --with-http_ssl_module 
            --with-stream 
            --with-http_stub_status_module && 
    /usr/bin/make && /usr/bin/make install && 
    /usr/bin/ln -s $BASE_PATH/sbin/nginx /sbin/
ADD entrypoint.sh /bin/ 
EXPOSE 80
CMD ["/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ['/bin/entrypoint.sh']

公有镜像仓库

quay.io

daocloud.io

docker.io                

...

原文地址:https://www.cnblogs.com/ray-mmss/p/10399745.html