Docker 镜像构建

构建分为两种

  • 手动构建
  • 自动构建dockerfile

手动构建

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

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

安装Nginx

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

[root@b82585fe6777 ~]# yum install wget gcc gcc-c++ openssl-devel zlib-devel pcre-devel -y
[root@b82585fe6777 ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
[root@b82585fe6777 ~]# tar xf nginx-1.12.2.tar.gz
[root@b82585fe6777 ~]# cd nginx-1.12.2
[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
[root@b82585fe6777 nginx-1.12.2]# make && make install
[root@b82585fe6777 nginx-1.12.2]# ls /usr/local/nginx/
conf html logs sbin

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

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

这样就安装完成了

手动构建镜像

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

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

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

启动刚刚手动构建的容器

[root@node ~]# docker run -d -p 99:80 --name mynginx sijiayong/my-nginx:v1 /usr/local/nginx/sbin/nginx
417102138d7a516c1c5ce236c8647f1f64199d8e7ca89358f6d457432bf7501f
[root@node ~]#
[root@node ~]#
[root@node ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
417102138d7a 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的时候,会找不到

[root@node nginx]# pwd
/opt/docker-file/nginx
[root@node nginx]# ls
CentOS7-Base-163.repo Dockerfile nginx-1.12.2.tar.gz
[root@node nginx]# cat Dockerfile
# This is My first Dockerfile
# Version 1.0
# Author: sijiayong # Base images
FROM centos # weihuzhe
MAINTAINER sijiayong000@163.com # ADD file
ADD nginx-1.12.2.tar.gz /usr/local/src # RUN
RUN rm -rf /etc/yum.repos.d/*
ADD CentOS7-Base-163.repo /etc/yum.repos.d RUN yum install wget gcc gcc-c++ make openssl-devel zlib-devel pcre-devel -y
RUN useradd -s /sbin/nologin -M www # WORKDIR
WORKDIR /usr/local/src/nginx-1.12.2 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre && make && make install
RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf #ENV PATH /usr/local/nginx/sbin:$PATH # EXPOST
EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx"]

然后来构建:

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

查看

4、Docker 镜像构建的更多相关文章

  1. Docker镜像构建(五)

    Docker 镜像介绍 Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建) 手动构建docker镜像 案例:我们基于centos镜像进行构建,制作自己的nginx镜 ...

  2. Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...

  3. Docker镜像构建的两种方式

    关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行 ...

  4. Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器

    我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构 ...

  5. Docker镜像构建的两种方式(六)--技术流ken

    镜像构建介绍 在什么情况下我们需要自己构建镜像那? (1)当我们找不到现有的镜像,比如自己开发的应用程序 (2)需要在镜像中加入特定的功能 docker构建镜像有两种方式:docker commit命 ...

  6. Docker镜像构建

    一.简介 在构建容器化应用时,相当重要的步骤莫过于镜像制作,本文将介绍镜像制作方法以及镜像制作的建议.通常镜像的制作有两种方式: 使用现有的容器使用docker commit 生成镜像 使用Docke ...

  7. (转)Docker镜像构建上下文(Context)

    镜像构建上下文(Context) Docker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...

  8. sqler sql 转rest api 的docker 镜像构建(续)使用源码编译

    sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git cl ...

  9. Docker镜像构建上下文(Context)

    镜像构建上下文(Context) Dicker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...

随机推荐

  1. 死磕 java线程系列之线程池深入解析——定时任务执行流程

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:本文基于ScheduledThreadPoolExecutor定时线程池类. 简介 前面我们一起学习了普通 ...

  2. 《Effective Java》 读书笔记(五)使用依赖注入取代原本的资源依赖

    相信接触过Spring的同学,对于依赖注入并不陌生. 刚开始在听说这个名字的时候,一直不明白到底什么叫依赖注入,后来才发现,依赖注入一直都存在我们日常代码中,只是我们没有刻意的把它提出来,然后再取这样 ...

  3. 【XSY2564】sequence

    Description [题目描述] 给定一个长度为n的由['0'..'9']组成的字符串s,v[i,j]表示由字符串s第i到第j位组成的十进制数字. 将它的某一个上升序列定义为:将这个字符串切割成m ...

  4. MIT线性代数:12.图和网络

  5. Mybatis:CRUD操作

    提示: Mapper配置文件的命名空间为对应接口包名+接口名字,这个经常会忘记和搞错的!! select标签 在接口中编写三个查询方法 //获取全部用户List<User> selectU ...

  6. Cocos引擎现身 IndiePrize 全球游戏开发者大会!Cocos的两大男神成为压轴嘉宾

    2019全球游戏开发者大会今天11月10日,在深圳南山海上世界文化艺术中心拉开帷幕.除了号称精品游戏"奥斯卡"的IndiePrize将在现场展开最终角逐,更有来自美国.俄罗斯.澳大 ...

  7. [考试反思]1107csp-s模拟测试104: 速度

    20分钟能做什么? 不粘排行榜,没意义,第一机房集体重启,我侥幸找回了两个文件才有分. 实际得分应该是70+100+60,第二机房rank1...放在第一机房就不知道了 T1:中间值 比较喜欢题解的第 ...

  8. CSPS模拟 83

    紧张起来,集训已过半! 稍微有点惆怅.. T1 什么玩意,神仙树形dp? 没思路,先去T2. (遇到难题就绕过去是真的爽啊) T2 $n^2$暴力很好打 组合数是不是有规律? 找一下规律,发现十分眼熟 ...

  9. MinIO 参数解析与限制

    MinIO 参数解析与限制 MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中. 以下部分提供每个字段的详细说明以及如何自定义它们 ...

  10. 学习笔记 : python 文件操作

    1.如果文件路径带有   \ 比如  open('c:\python\test.txt') 会报:SyntaxError: (unicode error) 'unicodeescape' codec ...