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
...