基于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