简述
Docker镜像的制作一共有两种方法,一种是手动构建,另一种是使用Dockerfile自动构建Docker镜像。本例使用两种方法,基于centos镜像重新构建两个nginx镜像。
手动构建Docker镜像
基于centos 创建容器
run -it --name yum_nginx centos
进入容器安装需要用到的软件包
yum install openssl openssl-devel zlib zlib-devel gcc-c++ pcre pcre-devel wget -y
下载nginx源码
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.14.2.tar.gz
解压源码
tar -xvf nginx-1.14.2.tar.gz
添加nginx用户
useradd -M nginx -s /sbin/nologin
编译源码
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-pcre
make && make install
修改配置文件,让nginx在前台运行,放置容器主进程退出后,nginx也终止运行
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
退出容器,并让容器处于退出状态
构建镜像
docker commit -m "my nginx" ac7b398c89a5 jiangpeisi/my-nginx:v1
查看构建的镜像
docker images
使用新构建镜像创建容器
docker run -d -p 8080:80 jiangpeisi/my-nginx:v1 /usr/local/nginx/sbin/nginx
links 47.107.103.142:8080
使用Dockerfile自动创建镜像
创建Dockerfile目录
mkdir /opt/nginx/
下载需要用到的文件
wget http://nginx.org/download/nginx-1.14.2.tar.gz #下载到Dockerfile目录下
创建Dockerfile
vim /opt/nginx/Dockerfile #Dockerfile一定要写正确
#This is my first Dockerfile
#Version 1.0
#Base images
FROM centos
#MAINTAINER
MAINTAINER Jiang Pei Si
#ADD
ADD nginx-1.14.2.tar.gz /usr/local/src
#RUN
RUN yum install openssl openssl-devel zlib zlib-devel gcc-c++ pcre pcre-devel wget -y
RUN useradd -M nginx -s /sbin/nologin
#WORKDIR
WORKDIR /usr/local/src/nginx-1.14.2
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-pcre
RUN make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
EXPOSE 80
ENV PATH /usr/local/nginx/sbin:$PATH
CMD ["nginx"]
构建镜像
docker build -t my-nginx:v1 /opt/nginx/
使用新构造的镜像创建容器
docker run -d -p 8088:80 my-nginx:v1
links 47.107.103.142:8088
补充
docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出。
dockerrun的时候把command做为容器内部命令,如果你使用nginx,那么nginx程序将后台运行,这个时候nginx并不是pid为1的程序,而是执行的bash,这个bash执行了nginx指令后就挂了,所以容器也就退出了
daemon off nginx可以在没有主进程的情况下在前台运行