小于博客 小于博客
首页
  • Java学习笔记
  • Docker专区
  • 实战教程
  • Shell
  • 内存数据库
  • Vue学习笔记
  • Nginx
  • Php
  • CentOS
  • Docker
  • Gitlab
  • GitHub
  • MySql
  • MongoDB
  • OpenVPN
  • 配置文件详解
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 电影音乐
  • 效率工具
  • 博客相关
  • 最佳实践
  • 迎刃而解
  • 学习周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

小于博客

行者常至,为者常成
首页
  • Java学习笔记
  • Docker专区
  • 实战教程
  • Shell
  • 内存数据库
  • Vue学习笔记
  • Nginx
  • Php
  • CentOS
  • Docker
  • Gitlab
  • GitHub
  • MySql
  • MongoDB
  • OpenVPN
  • 配置文件详解
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 电影音乐
  • 效率工具
  • 博客相关
  • 最佳实践
  • 迎刃而解
  • 学习周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nginx

  • Php

  • CentOS

  • Docker

    • docker的几种安装方式
    • docker配置加速器的几种方案
    • docker搭建官方版私有仓库(了解)
    • Docker笔记之企业级仓库harbor搭建
    • 认识了解Dockerfile
    • 利用Dockerfile创建一些基础镜像
      • 1,构建 CentOS7.4。
        • 1,Dockerfile。
        • 2,两个 yum 源。
        • 3,supervisor 配置文件。
      • 2,构建 jdk 基础镜像。
        • 1,Dockerfile。
      • 3,构建 tomcat 镜像。
        • 1,Dockerfile。
        • 2,tomcat.ini。
      • 4,构建 Jenkins 镜像。
        • 1,Dockerfile。
    • Docker笔记之与镜像相关的命令整理
    • 从docker容器时间问题探究到Namespace问题
    • Docker笔记之制作kafka镜像
    • Docker笔记之制作lnmp镜像
    • Docker笔记之使用apline镜像
    • Docker笔记之修改默认数据存储目录
    • Docker笔记之修改默认网段
    • docker磁盘或者镜像清理相关内容
    • centos镜像添加chrome浏览器以及中文字体
    • 利用buildx构建支持多CPU架构平台的docker镜像
    • docker exec命令中含有通配符执行失败的问题
    • Docker 调试构建失败的 Dockerfile 的方法
    • Docker容器如何优雅地访问宿主机网络
  • GitLab

  • GitHub

  • Mysql

  • MongoDB

  • OpenVPN

  • 配置文件详解

  • Other

  • 运维观止
  • Docker
小于博客
2018-11-09
目录

利用Dockerfile创建一些基础镜像

在学习 docker 的过程中,我们会经常与镜像打交道,同时也要经常与网络打交道,下载远程镜像的快慢几乎都是靠人品来支撑,这样以来,学习的效率会大大降低,而且远程的一些镜像,很多时候未必适合自己使用的需求,因此,制作一些基础镜像用于日常使用,就显得非常必要了。

本文当中所需要用到的一些 Dockerfile,我已经上传在个人的 GitHub,可以下载参考,以助于理解。

docker_learn

dockerfile学习

- name: docker_learn
  desc: dockerfile学习
  avatar: https://avatars2.githubusercontent.com/u/416130?s=460&u=8753e86600e300a9811cdc539aa158deec2e2724&v=4 # 可选
  link: https://github.com/eryajf/docker_learn # 可选
  bgColor: "#0074ff" # 可选,默认var(--bodyBg)。颜色值有#号时请添加单引号
  textColor: "#fff" # 可选,默认var(--textColor)
1
2
3
4
5
6

# 1,构建 CentOS7.4。

需要用到四个文件。

[root@localhost centos7]$ls
aliyun-epel.repo  aliyun-mirror.repo  Dockerfile  supervisord.conf
1
2

# 1,Dockerfile。

#
# Dockerizing CentOS7: Dockerfile for building CentOS images
#
#需要一个基础镜像,这里从国内的daocloud下载,速度比较快。
FROM       daocloud.io/library/centos:centos7.4.1708

#维护者
MAINTAINER eryajf <Linuxlql@163.com>

#设置一个时区的环境变量
ENV TZ "Asia/Shanghai"

#虚拟终端
ENV TERM xterm

#dockerfile中有2条命令可以复制文件,1.COPY 2.ADD, ADD比COPY多2个功能,可以写成连接 直接COPY到container,如果是压缩文件,add能自动解压
ADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo
ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo

RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
    yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
    yum install -y --enablerepo=epel pwgen python-pip python-setuptools.noarch lrzsz ntp docker-client && \
    yum clean all

#配置supervisor 进程管理工具,运行单个进程可以不使用
RUN easy_install supervisor && \
    mkdir -m 755 -p /etc/supervisor && \
    mkdir -m 755 /etc/supervisor/conf.d
ADD supervisord.conf /etc/supervisor/supervisord.conf

EXPOSE 22

ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 2,两个 yum 源。

其一:

[root@localhost centos7]$cat aliyun-epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

其二:

[root@localhost centos7]$cat aliyun-mirror.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 3,supervisor 配置文件。

[root@localhost centos7]$cat supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file

[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[include]
files = /etc/supervisor/conf.d/*.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

过多关于 supervisor 配置的问题,这里就不多做解释了,不过如果想要熟悉使用它,还是需要对它进行了解一番的,欲想了解,可以看我的另一篇文章:使用 supervisor 管理 Linux 系统应用进程 (opens new window)。

开始构建。

docker build -t idocker.io/eryajf/centos:7.4 .
1

注意最后边那个点。

构建的时候,就将名称定义为自己私服地址。

构建完成查看一下:

[root@localhost ~]$docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
idocker.io/eryajf/centos   7.4                 13fb619afd8c        21 hours ago        519 MB
1
2
3

之后可以 push 到自己的私服当中。

docker push idocker.io/eryajf/centos:7.4
1

启动:

docker run -d --name centos idocker.io/eryajf/centos:7.4
1

# 2,构建 jdk 基础镜像。

这个镜像事实上在 dockerhub 上有官方发布的,只不过其底层镜像都是基于 deebin 的,并不适合日常使用,因此这里就自己来制作一下。

需要两个文件。

[root@localhost jdk8]$ls
Dockerfile  jdk.tar.gz
1
2

# 1,Dockerfile。

FROM       idocker.io/eryajf/centos:7.4
MAINTAINER eryajf <Linuxlql@163.com>

# Install jdk
ADD  jdk.tar.gz   /usr/local/

ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV PATH $PATH:$JAVA_HOME/bin
1
2
3
4
5
6
7
8

剩下那个是 jdk 的包,可以在官网进行下载 (opens new window)。

构建。

docker build -t idocker.io/eryajf/jdk:1.8 .
1

启动验证。

[root@localhost ~]$docker run -d --name jdk idocker.io/eryajf/jdk:1.8
17c9180d892f2406bb256113ec241843ac1e18f7e20aeb52de67ad8eaef2c724
[root@localhost ~]$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
17c9180d892f        36a4fcd3d962        "/usr/bin/supervis..."   2 seconds ago       Up 1 second         22/tcp              jdk
[root@localhost ~]$docker exec -it jdk bash
[root@17c9180d892f /]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
1
2
3
4
5
6
7
8
9
10

# 3,构建 tomcat 镜像。

需要用到如下三个文件。

[root@localhost tomcat]$ls
Dockerfile  tomcat.ini  tomcat.tar.gz
1
2

# 1,Dockerfile。

[root@localhost tomcat]$cat Dockerfile
FROM       idocker.io/eryajf/jdk:1.8
MAINTAINER eryajf <Linuxlql@163.com>


# Install jdk
ADD  tomcat.tar.gz   /usr/local/
ADD  tomcat.ini /etc/supervisor/conf.d
1
2
3
4
5
6
7
8

# 2,tomcat.ini。

[root@localhost tomcat]$cat tomcat.ini
[program:tomcat]
environment=JAVA_HOME="/usr/local/jdk1.8.0_144",JAVA_BIN="/usr/local/jdk1.8.0_144/bin"
command=/usr/local/tomcat/bin/catalina.sh run
autostart=true
autorestart=true
startsecs=60
priority=1
stopasgroup=true
killasgroup=true
stderr_logfile=/usr/local/tomcat/logs/catalina.out
1
2
3
4
5
6
7
8
9
10
11

构建镜像。

docker build -t idocker.io/eryajf/tomcat:8.5 .
1

启动。

docker run -d -p 8080:8080 --name tomcat idocker.io/eryajf/tomcat:8.5
1

# 4,构建 Jenkins 镜像。

之前使用过从 dockerhub 上下载的 Jenkins 官方发布的镜像,然而那些镜像的底层也都不是 centos 系统的,因此打算自己制作一个 Jenkins 镜像,以便于使用。

所需原料如下:

[root@localhost jenkins]$ls
Dockerfile  maven.tar.gz  ROOT.war
1
2

其中 maven 是配置好了的,ROOT.war 是 Jenkins 的包。

# 1,Dockerfile。

[root@localhost jenkins]$cat Dockerfile
FROM       idocker.io/eryajf/tomcat:8.5
MAINTAINER eryajf <Linuxlql@163.com>

ADD  maven.tar.gz /usr/local/
COPY ROOT.war /usr/local/tomcat/webapps/

ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV MAVEN_HOME=/usr/local/maven
ENV JENKINS_HOME=/home/.jenkins_home
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
1
2
3
4
5
6
7
8
9
10
11

构建。

docker build -t idocker.io/eryajf/jenkins:2.138 .
1

启动验证。

docker run -d -p 8080:8080 --name jenkins idocker.io/eryajf/jenkins:2.138
1

这种启动方式只能够正常的将 Jenkins 启动起来,但是如果想要继续利用 Jenkins 进行持续集成,那么就需要将宿主机当中的 docker 命令挂载到容器当中,这时可以使用如下命令:

docker run -d -p 8080:8080 --name jenkins -v /home/.jenkins_home:/home/.jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /etc/sysconfig/docker:/etc/sysconfig/docker  idocker.io/eryajf/jenkins:2.138
1

启动之后就可以在在这个基础上使用 Jenkins 了,而且无论什么时候,就算这个容器挂掉了,只要挂载的数据目录还在,那么随时都可以通过如上这条指令将原有的 Jenkins 容器恢复出来。

#docker#dockerfile
上次更新: 2024/02/03, 13:17:04

← 认识了解Dockerfile Docker笔记之与镜像相关的命令整理→

最近更新
01
SpringBoot 快速实现 api 加密!
03-21
02
SpringBoot整合SQLite
03-07
03
SpringBoot配置使用H2数据库的简单教程
02-21
更多文章>
Theme by Vdoing | Copyright © 2017-2024 | 点击查看十年之约 | 豫ICP备2022014539号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式