4、Docker 镜像构建

Docker 镜像构建

构建分为两种

  • 手动构建
  • 自动构建dockerfile

手动构建

首先启动一个Centos 容器,然后在容器中安装一个nginx

1[root@node ~]# docker run -it --name nginx-man centos 2[root@b82585fe6777 /]#

安装Nginx

这一步就很简单了,贴一下命令

1[root@b82585fe6777 ~]# yum install wget gcc gcc-c++ openssl-devel zlib-devel pcre-devel -y 2[root@b82585fe6777 ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz 3[root@b82585fe6777 ~]# tar xf nginx-1.12.2.tar.gz 4[root@b82585fe6777 ~]# cd nginx-1.12.2 5[root@b82585fe6777 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre 6[root@b82585fe6777 nginx-1.12.2]# make && make install 7[root@b82585fe6777 nginx-1.12.2]# ls /usr/local/nginx/ 8conf html logs sbin

这样就还差一步,配置nginx配置文件,使nginx运行在前台

1# 在nginx主配置文件的最上面,增加下面的内容即可 2[root@b82585fe6777 conf]# vi nginx.conf 3 4daemon off;

这样就安装完成了

手动构建镜像

现在开始把刚刚已经安装好的nginx的容器,构建成镜像

1[root@node ~]# docker ps -a 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b82585fe6777 centos "/bin/bash" About an hour ago Exited (0) About an hour ago nginx-man 4[root@node ~]# docker commit -m 'my nginx' b82585fe6777 sijiayong/my-nginx:v1 5sha256:a80ecf40e4d253416b61a69a8572e856d621b0ca02423e1de4afedea01626670 6[root@node ~]# docker images 7REPOSITORY TAG IMAGE ID CREATED SIZE 8sijiayong/my-nginx v1 a80ecf40e4d2 5 seconds ago 328 MB 9docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB 10docker.io/nginx latest c82521676580 4 weeks ago 109 MB

这里看到,手动构建完成,可以看到一个sijiayong/my-nginx的镜像。

启动刚刚手动构建的容器

1[root@node ~]# docker run -d -p 99:80 --name mynginx sijiayong/my-nginx:v1 /usr/local/nginx/sbin/nginx 2417102138d7a516c1c5ce236c8647f1f64199d8e7ca89358f6d457432bf7501f 3[root@node ~]# 4[root@node ~]# 5[root@node ~]# docker ps -l 6CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7417102138d7a sijiayong/my-nginx:v1 "/usr/local/nginx/..." 8 seconds ago Up 8 seconds 0.0.0.0:99->80/tcp mynginx

已经起来了,下面来测试访问:


Dockerfile自动构建

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

Dockerfile文件内容:

字段

解释

FROM

基础镜像

MAINTAINER

维护者信息

RUN

把命令前面加上RUN

ADD

COPY文件,会自动解压

WORKDIR

当前目录

VOLUME

目录挂在

EXPOSE

端口

RUN

进程要一直运行下去

下面来开始

准备工作:

  1. Centos 镜像
  2. nginx源码安装包
  3. Centos7国内源的repo文件,(阿里云或者163的,下载下来即可)
  4. 创建号目录/opt/docker-file/nginx

需要把nginx源码包和yum源repo文件都放在创建好的nginx目录下,否则在build的时候,会找不到

1[root@node nginx]# pwd 2/opt/docker-file/nginx 3[root@node nginx]# ls 4CentOS7-Base-163.repo Dockerfile nginx-1.12.2.tar.gz 5[root@node nginx]# cat Dockerfile 6# This is My first Dockerfile 7# Version 1.0 8# Author: sijiayong 9 10# Base images 11FROM centos 12 13# weihuzhe 14MAINTAINER sijiayong000@163.com 15 16# ADD file 17ADD nginx-1.12.2.tar.gz /usr/local/src 18 19# RUN 20RUN rm -rf /etc/yum.repos.d/* 21ADD CentOS7-Base-163.repo /etc/yum.repos.d 22 23RUN yum install wget gcc gcc-c++ make openssl-devel zlib-devel pcre-devel -y 24RUN useradd -s /sbin/nologin -M www 25 26# WORKDIR 27WORKDIR /usr/local/src/nginx-1.12.2 28 29RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre && make && make install 30RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf 31 32#ENV PATH /usr/local/nginx/sbin:$PATH 33 34# EXPOST 35EXPOSE 80 36 37CMD ["/usr/local/nginx/sbin/nginx"]

然后来构建:

1[root@node ~]# docker build -t nginx-file:v1 /opt/docker-file/nginx/ 2... 3这中间内容太多 4Removing intermediate container 2b71cba52a7a 5Step 11/12 : EXPOSE 80 6 ---> Running in 0405f2f283f9 7 ---> 858ab9af7659 8Removing intermediate container 0405f2f283f9 9Step 12/12 : CMD /usr/local/nginx/sbin/nginx 10 ---> Running in 83e8ed856aee 11 ---> 592d69098f3a 12Removing intermediate container 83e8ed856aee 13Successfully built 592d69098f3a 14[root@node ~]# docker images 15REPOSITORY TAG IMAGE ID CREATED SIZE 16nginx-file v1 592d69098f3a 17 hours ago 399 MB 17sijiayong/my-nginx v1 a80ecf40e4d2 19 hours ago 328 MB 18docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB 19docker.io/nginx latest c82521676580 4 weeks ago 109 MB 20[root@node nginx]# docker run -d -it --name nginx-test -h nginx -p 80:80 nginx-file:v1 218d632d8079a4d72f0034a4982c84997b321e082c7bb5a453fed7ebeb2a3e7e3d 22[root@node nginx]# docker ps -l 23CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 248d632d8079a4 nginx-file:v1 "/usr/local/nginx/..." 4 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp nginx-test 25[root@node nginx]# cd 26[root@node ~]# ./in.sh nginx-test 27[root@nginx /]# ps aux 28USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 29root 1 0.2 0.1 45944 5580 ? Ss+ 10:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx 30www 6 0.0 0.0 46380 3544 ? S+ 10:02 0:00 nginx: worker process 31root 7 0.1 0.0 15264 3268 ? S 10:02 0:00 -bash 32root 20 0.0 0.0 55152 3936 ? R+ 10:02 0:00 ps aux

查看

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )