4、Docker 镜像构建
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 | 进程要一直运行下去 |
下面来开始
准备工作:
- Centos 镜像
- nginx源码安装包
- Centos7国内源的repo文件,(阿里云或者163的,下载下来即可)
- 创建号目录
/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 镜像构建的更多相关文章
- Docker镜像构建(五)
Docker 镜像介绍 Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建) 手动构建docker镜像 案例:我们基于centos镜像进行构建,制作自己的nginx镜 ...
- Docker镜像构建原理解析(不装docker也能构建镜像)
在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...
- Docker镜像构建的两种方式
关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行 ...
- Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器
我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构 ...
- Docker镜像构建的两种方式(六)--技术流ken
镜像构建介绍 在什么情况下我们需要自己构建镜像那? (1)当我们找不到现有的镜像,比如自己开发的应用程序 (2)需要在镜像中加入特定的功能 docker构建镜像有两种方式:docker commit命 ...
- Docker镜像构建
一.简介 在构建容器化应用时,相当重要的步骤莫过于镜像制作,本文将介绍镜像制作方法以及镜像制作的建议.通常镜像的制作有两种方式: 使用现有的容器使用docker commit 生成镜像 使用Docke ...
- (转)Docker镜像构建上下文(Context)
镜像构建上下文(Context) Docker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...
- sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git cl ...
- Docker镜像构建上下文(Context)
镜像构建上下文(Context) Dicker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...
随机推荐
- Spring Cloud gateway 网关四 动态路由
微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...
- linux 查看磁盘信息
一.查看磁盘和分区 ACCB947E:Home zhangsan$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mount ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
惯例,化简题意(看长短决定难度) 一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个 ...
- 百度艾尼(ERNIE)常见问题汇总及解答
一.ERNIE安装配置类问题 Q1:最适合ERNIE2.0的PaddlePaddle版本是?A1:PaddlePaddle版本建议升级到1.5.0及以上版本. Q2:ERNIE可以在哪些系统上使用?A ...
- 「动态规划」-数位dp专题
数位dp,今天学长讲的稍玄学,课下花了一会时间仔细看了一下,发现板子是挺好理解的,就在这里写一些: 数位dp主要就是搞一些在区间中,区间内的数满足题目中的条件的数的个数的一类题,题目一般都好理解,这时 ...
- 20190725 NOIP模拟8
今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...
- (C#)WPF:Grid面板介绍
Grid:网格面板 Grid和其他各个Panel比较起来,功能最多也最为复杂.要使用Grid,首先要向RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefi ...
- NetCore下搭建websocket集群方案
介绍 最近在做一个基于netcore的实时消息服务.最初选用的是ASP.NET Core SignalR,但是后来发现目前它并没有支持IOS的客户端,所以自己只好又基于websocket重新搭建了一套 ...
- 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...
- SpringBoot 正式环境必不可少的外部化配置
前言 <[源码解析]凭什么?spring boot 一个 jar 就能开发 web 项目> 中有读者反应: 部署后运维很不方便,比较修改一个 IP 配置,需要重新打包. 这一点我是深有体会 ...