镜像操作命令
创建tomcat镜像
Nginx镜像
[root@docker ~]# mkdir docker
[root@docker ~]# mkdir nginx && cd nginx/ #拷贝nginx-1.12.2.tar.gz包到目录下
[root@docker nginx]# vim Dockerfile
FROM centos:7 ##基于基础环境
MAINTAINER this is nginx image ##镜像信息
RUN yum -y update && yum -y install pcre-devel zlib-devel gcc gcc-c++ make &> /dev/nulll #依赖环境
RUN useradd -M -s /sbin/nologin nginx ##创建nginx用户
ADD nginx-1.12.2.tar.gz /usr/local/src ##解压包
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure --prefix=/usr/local/nginx \ ##指定工作目录
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install &> /dev/null
ENV PATH /usr/local/nginx/sbin:$PATH ##设置环境变量
EXPOSE 80 ##暴露端口
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
CMD nginx ##执行默认命令开启nginx
####CMD和ENTRYPOINT的区别
1、ENRYPOINT指开启容器前镜像就已经执行了括号内的命令
2、CMD是开启容器时,要执行的指令,设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换
3、基于Dockerfile内有CMD或者ENTRYPOINT创建镜像时,docker run 后面就不要加指令(/bin/bash)了,会覆盖掉Dockerfile中的指令或者语法报错
[root@docker nginx]# docker build -f Dockerfile -t nginx:test .
####基于dockerfile文件构建镜像,可以另开一个终端执行“watch -n 1 docker ps -a”可以看到,dockerfile中每条命令都会生成一个镜像,生成一个容器执行,表现了dockerfile的镜像分层原理
[root@docker nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test c94e53da8234 13 seconds ago 539MB
<none> <none> 6bdbbd0cb566 2 minutes ago 524MB
centos 7 8652b9f0cb4c 9 months ago 204MB
[root@docker nginx]# docker run -d -P nginx:test
291c42a12debf73303cee4fd258cf91eb832aec8cfa45f5b1b9d60403cf216dd
[root@docker nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
291c42a12deb nginx:test "/bin/sh -c nginx" About a minute ago Up About a minute 0.0.0.0:49153->80/tcp, :::49153->80/tcp zen_mendel