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. 爬虫基本库的使用---requests库

    使用requests---实现Cookies.登录验证.代理设置等操作 处理网页验证和Cookies时,需要写Opener和Handler来处理,为了更方便地实现这些操作,就有了更强大的库reques ...

  2. 详细梳理ajax跨域4种解决方案

    前言 自动接触前端,跨域这个词就一直萦绕在耳畔.因为一般接手的项目都已经做好了这方面的处理,而且之前一直感觉对这方面模棱两可,所以今天就抽个时间梳理一下. 为什么需要跨域 跨域这个概念来自一个叫 &q ...

  3. 爬取bing背景图片

    因为工作环境的原因,没办法用梯子,也不喜欢用某度,只能用bing,发现背景图片蛮好看的,刚好最近在学习摄影,需要提高审美,就想着把bing背景图片都爬去下来做桌面背景.写的代码比较入门,只是做个记录, ...

  4. restapi(9)- caching, akka-http 缓存

    restapi作为前后端交互的枢纽:面对大批量的前端请求,需要确保回复的及时性.使用缓存是一项有效工具.我们可以把多数前端请求的回复response存入缓存,特别是一些需要大量计算才能获取的回复值,更 ...

  5. VNC的安装以及使用

    VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UNIX 和  ...

  6. salesforce lightning零基础学习(十四) Toast 浅入浅出

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:showToast/specification h ...

  7. jquery layui的巨坑

    jquery layui的巨坑 layui 模块不能写在ajax里 因为 layui只能执行一次 第二次会没效果 再执行需要刷新页面再执行

  8. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作(续)

    说明:前期的安装,请转向https://www.cnblogs.com/lq-93/p/11824039.html (4).查看gitlab镜像是否启动成功 docker inspect  容器id  ...

  9. 对学习Python自然语言处理的一点儿感悟

    研究生阶段,如果一开始找不到知识点,那就结合导师的研究课题以及这个课题设计到的知识领域,扎好基础知识能力.以我研究的自然语言处理领域为例,如果一开始不知道研究点,且又要安排学习计划,那么我会在选择: ...

  10. table的列固定

    <body onload="showFix(true,false,initTableId);"> <!doctype html> <html lang ...