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/
  8. conf html logs sbin

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

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

这样就安装完成了

手动构建镜像

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

  1. [root@node ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. b82585fe6777 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
  5. sha256:a80ecf40e4d253416b61a69a8572e856d621b0ca02423e1de4afedea01626670
  6. [root@node ~]# docker images
  7. REPOSITORY TAG IMAGE ID CREATED SIZE
  8. sijiayong/my-nginx v1 a80ecf40e4d2 5 seconds ago 328 MB
  9. docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB
  10. docker.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
  2. 417102138d7a516c1c5ce236c8647f1f64199d8e7ca89358f6d457432bf7501f
  3. [root@node ~]#
  4. [root@node ~]#
  5. [root@node ~]# docker ps -l
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. 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的时候,会找不到

  1. [root@node nginx]# pwd
  2. /opt/docker-file/nginx
  3. [root@node nginx]# ls
  4. CentOS7-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. # Base images
  10. FROM centos
  11. # weihuzhe
  12. MAINTAINER sijiayong000@163.com
  13. # ADD file
  14. ADD nginx-1.12.2.tar.gz /usr/local/src
  15. # RUN
  16. RUN rm -rf /etc/yum.repos.d/*
  17. ADD CentOS7-Base-163.repo /etc/yum.repos.d
  18. RUN yum install wget gcc gcc-c++ make openssl-devel zlib-devel pcre-devel -y
  19. RUN useradd -s /sbin/nologin -M www
  20. # WORKDIR
  21. WORKDIR /usr/local/src/nginx-1.12.2
  22. RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre && make && make install
  23. RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf
  24. #ENV PATH /usr/local/nginx/sbin:$PATH
  25. # EXPOST
  26. EXPOSE 80
  27. CMD ["/usr/local/nginx/sbin/nginx"]

然后来构建:

  1. [root@node ~]# docker build -t nginx-file:v1 /opt/docker-file/nginx/
  2. ...
  3. 这中间内容太多
  4. Removing intermediate container 2b71cba52a7a
  5. Step 11/12 : EXPOSE 80
  6. ---> Running in 0405f2f283f9
  7. ---> 858ab9af7659
  8. Removing intermediate container 0405f2f283f9
  9. Step 12/12 : CMD /usr/local/nginx/sbin/nginx
  10. ---> Running in 83e8ed856aee
  11. ---> 592d69098f3a
  12. Removing intermediate container 83e8ed856aee
  13. Successfully built 592d69098f3a
  14. [root@node ~]# docker images
  15. REPOSITORY TAG IMAGE ID CREATED SIZE
  16. nginx-file v1 592d69098f3a 17 hours ago 399 MB
  17. sijiayong/my-nginx v1 a80ecf40e4d2 19 hours ago 328 MB
  18. docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB
  19. docker.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
  21. 8d632d8079a4d72f0034a4982c84997b321e082c7bb5a453fed7ebeb2a3e7e3d
  22. [root@node nginx]# docker ps -l
  23. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  24. 8d632d8079a4 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
  28. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  29. root 1 0.2 0.1 45944 5580 ? Ss+ 10:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx
  30. www 6 0.0 0.0 46380 3544 ? S+ 10:02 0:00 nginx: worker process
  31. root 7 0.1 0.0 15264 3268 ? S 10:02 0:00 -bash
  32. 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. 《JavaScript设计模式与开发实践》-- 策略模式

    详情个人博客:https://shengchangwei.github.io/js-shejimoshi-celue/ 策略模式 1.定义 策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们 ...

  2. SpringCloud 中集成Sentinel+Feign实现服务熔断降级

    Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳 ...

  3. 聚类(一)——Kmeans

    Clustering 聚类K-means 聚类是机器学习和数据挖掘领域的主要研究方向之一,它是一种无监督学习算法,小编研究生时期的主要研究方向是“数据流自适应聚类算法”,所以对聚类算法有比较深刻的理解 ...

  4. 网络安全-主动信息收集篇第二章-二层网络扫描之arping

    arping二层网络发现 介绍工具:arping arping主要查看IP的MAC地址 缺点:工具本身只能ping一个IP地址,不能ping一个IP段.但是可以通过脚本将整个网络中的IP进行扫描. 脚 ...

  5. 「2019.7.22 考试」AC和WA0一步之遥

    这卷子还是答的挺惨的. 第一题5min写完了,自认为AC(其实WA了80),第二题推了半天CRT的公式老出错结果发现是程序打错了.第三题打模拟150行结果数组没开够,开大就是0->60的转变.状 ...

  6. 参与国际化项目需遵循的java命名规范

    笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们 ...

  7. SQL Server 中 `JSON_MODIFY` 的使用

    SQL Server 中 JSON_MODIFY 的使用 Intro SQL Server 从 2016 开始支持了一些 JSON操作,最近的项目里也是好多地方直接用字段直接存成了 JSON,需要了解 ...

  8. 【vue】在VS Code中调试Jest单元测试

    在VS Code中调试Jest单元测试 添加调试任务 打开 vscode launch.json 文件,在 configurations 内加入下面代码 "configurations&qu ...

  9. Java ------ 工厂模式、单例模式

    工厂模式 简单工厂模式: 1.创建Car接口 public interface Car { public void drive(); } 2.创建两个实体类,分别实现Car接口 public clas ...

  10. Forsaken Mail创建临时邮箱系统| 手把手教程

    场景需求 不需要长时间使用的邮箱 需要大量创建临时邮箱 使用匿名邮箱 环境说明 **` Forsaken Mail是一个临时邮箱系统,可以供任何人接受邮件,即收即毁,支持自定义邮箱地址前缀,这里就说下 ...