docker《三》---镜像制作

一、 手动制作yum版nginx镜像

Docker镜像制作类似于虚拟机的模板制作,即按照公司的实际业务务求将需要安装的软件、相关配置等基础环境配置完成,然后将虚拟机再提交为模板,最后再批量从模板批量创建新的虚拟机,这样可以极大的简化业务中相同环境的虚拟机运行环境的部署工作,Docker的镜像制作分为手动制作和自动制作(基于DockerFile),企业通常都是基于Dockerfile制作镜像

1.1 下载镜像并初始化系统

#拉取基础镜像并启动
root@docker-node1:~# docker pull centos:centos7
root@docker-node1:~# docker run -it centos:centos7 /bin/bash

#更换容器yum源
[root@85c4534b854c /]# yum install wget -y
[root@85c4534b854c /]# cd /etc/yum.repos.d/
[root@85c4534b854c yum.repos.d]# rm -rf ./*
[root@85c4534b854c yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@85c4534b854c yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

在容器安装nginx

[root@85c4534b854c ~] yum install nginx -y
[root@85c4534b854c ~] chown nginx.nginx /usr/share/nginx -R
#安装常用命令
[root@85c4534b854c ~] yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
/usr/share/nginx/html
#添加测试页面
[root@85c4534b854c ~] vim  /usr/share/nginx/html/index.html
test

关闭nginx后台运行

#在nginx配置文件添加daemon off; 关闭nginx后台运行
[root@85c4534b854c ~]# vim /etc/nginx/nginx.conf
daemon off;

1.2 提交为镜像

root@docker-node1:~# docker commit -a "123456@qq.com" -m "yum nginx v1" 85c4534b854c centos-nginx:v1
root@docker-node1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos-nginx        v1                  6e85cf470acb        3 seconds ago       478MB
centos              centos7             8652b9f0cb4c        10 months ago       204MB

1.2 启动验证

root@docker-node1:~# docker run -it -d -p 80:80 --name nginx centos-nginx:v1 /usr/sbin/nginx

访问测试
在这里插入图片描述

二、DockerFile制作镜像

DockerFile可以说是一种可以被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了写好的各种各样DockerFile文件,当后期某个镜像有额外的需求时,只要在之前的DockerFile添加或者修改相应的操作即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦,具体如下:
https://docs.docker.com/engine/reference/builder/

FROM   	#指定基础镜像,必须为第一个命令
LABEL    #用于为镜像添加元数据
STOPSIGNAL #维护者信息
ADD  #将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
COPY  #功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV #设置环境变量
EXPOSE  #指定端口
USER  #指定执行命令的用户
VOLUME  #指定挂载点
WORKDIR  #工作目录
RUN  #构建镜像时执行的命令
CMD  #指定容器运行时执行的命令,可通过docker run指定运行命令覆盖
ENTRYPOINT #指定容器运行时执行的命令,不可被覆盖,后续通过CMD或docker run加的命令会当作参数传递给ENTRYPOINT

2.1 使用dockerfile制作nginx+tomcat镜像

2.1.1 基于官方alpine制作nginx镜像

2.1.1.1 下载基础镜像,并创建Dockerfile目录环境
root@docker-node1:~# docker pull alpine:3.13.6
root@docker-node1:~# cd /opt/

#目录结构按照业务类型或系统类型等方式划分,方便后期镜像比较多的时候进行分类。 
root@docker-node1:/opt# mkdir dockerfile/{web/{nginx,tomcat,jdk},system/{centos,ubuntu,alpine}} -pv
mkdir: created directory 'dockerfile'
mkdir: created directory 'dockerfile/web'
mkdir: created directory 'dockerfile/web/nginx'
mkdir: created directory 'dockerfile/web/tomcat'
mkdir: created directory 'dockerfile/web/jdk'
mkdir: created directory 'dockerfile/system'
mkdir: created directory 'dockerfile/system/{centos.ubuntu.alpine}'
2.1.1.2 编写Dockerfile
root@docker-node1:~# cd /opt/dockerfile/web/nginx/
#编辑Dockerfile文件,注:Dockerfile文件名称不可写错,而且D必须大写
root@docker-node1:/opt/dockerfile/web/nginx# vim Dockerfile
#指定基础镜像
FROM alpine:3.13.6
#添加作者信息
MAINTAINER cwy 123456@qq.com

#替换alpine软件源,并安装基础命令
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
&& apk add iotop gcc libgcc libc-dev libcurl libc-utils pcre-dev zlib-dev libnfs make pcre pcre2 zip unzip net-tools pstree wget libevent libevent-dev iproute2 openssl-dev

#拷贝nginx源码到容器,并编译安装
ADD nginx-1.18.0.tar.gz /opt/
RUN cd /opt/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install && ln -s /apps/nginx/sbin/nginx /usr/bin && addgroup -g 2019 -S nginx && adduser -s /sbin/nologin -S -D -u 2019 -G nginx nginx

#添加配置文件及公司代码
COPY nginx.conf /apps/nginx/conf/nginx.conf
ADD  static.tar.gz /data/nginx/html
RUN  chown nginx.nginx /data/nginx /apps/nginx -R

#将nginx放前台运行
CMD ["nginx","-g","daemon off;"]

2.1.1.3 执行镜像构建
#构建镜像
root@docker-node1:/opt/dockerfile/web/nginx# docker build -t nginx-alpine:v1 ./

#查看镜像
root@docker-node1:/opt/dockerfile/web/nginx# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-alpine        v1                  1e6b3b403914        7 minutes ago       216MB
alpine              3.13.6              12adea71a33b        2 weeks ago         5.61MB

2.1.1.4 运行容器测试
root@docker-node1:~# docker run -it --name nginx -d -p 80:80 nginx-alpine:v1
762885b9ed461da089164294ba7125d86db022cab32b403a6281ef4a42cbd84c
root@docker-node1:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
762885b9ed46        nginx-alpine:v1     "nginx -g 'daemon of…"   9 minutes ago       Up 9 minutes        0.0.0.0:80->80/tcp   nginx
root@docker-node1:~#

2.1.1.5 访问测试

在这里插入图片描述

在这里插入图片描述

2.2.1 基于ubuntu制作tomcat镜像

根据公司需求,基于官方提供的centos、debain、ubuntu、alpine等基础镜像构建JDK(Java环境),然后再基于自定义的JDK镜像构建出业务需要的tomcat镜像

2.2.1.1 制作jdk基础镜像
2.2.1.1.1 编辑DockerfileW文件
#下载官方基础镜像
root@docker-node1:~# docker pull ubuntu:18.04
root@docker-node1:~# cd /opt/dockerfile/web/jdk/

#编辑dockerfile文件
root@docker-node1:/opt/dockerfile/web/jdk# vim Dockerfile
#jdk-8u301 base Image

FROM ubuntu:18.04
MAINTAINER cwy 123456@qq.com

#替换apt源
COPY sources.list /etc/apt/sources.list

#安装jdk
ADD jdk-8u301-linux-x64.tar.gz /usr/local/src
RUN ln -s  /usr/local/src/jdk1.8.0_301 /usr/local/jdk

#配置jdk环境变量
ADD jdk.sh /etc/profile.d/
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin

#修改容器时区
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.2.1.1.2 准备安装包就配置文件
准备好jdk安装包,环境变量文件,及apt源配置文件
root@docker-node1:/opt/dockerfile/web/jdk# ls
Dockerfile  jdk-8u301-linux-x64.tar.gz  jdk.sh  sources.list

#环境变量
root@docker-node1:/opt/dockerfile/web/jdk# cat jdk.sh
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

#apt使用阿里源
root@docker-node1:/opt/dockerfile/web/jdk# cat sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

2.2.1.1.3 构建镜像
root@docker-node1:/opt/dockerfile/web/jdk# docker build -t jdk-8u301-ubuntu:v1 .
2.2.1.1.4 启动容器测试
root@docker-node1:/opt/dockerfile/web/jdk# docker run -it --rm  jdk-8u301-ubuntu:v1 bash
root@f352a862bab0:/# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

2.2.1.2 基于jdk镜像制作tomcat镜像
2.2.1.2.1 编辑Dockerfile文件
root@docker-node1:~# cd /opt/dockerfile/web/tomcat
root@docker-node1:/opt/dockerfile/web/tomcat# vim Dockerfile
#Tomcat base Image

FROM jdk-8u301-ubuntu:v1
MAINTAINER cwy 123456@qq.com

#拷贝安装包
ADD apache-tomcat-8.5.71.tar.gz /apps
RUN ln -s /apps/apache-tomcat-8.5.71 /apps/tomcat && rm -f /apps/apache-tomcat-8.5.71.tar.gz

COPY run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
RUN groupadd www -g 2020 && useradd www -u 2020 -g www && chown -R www.www /apps/

#运行tomcat
CMD ["/apps/tomcat/bin/run_tomcat.sh"]

2.2.1.2.2 准备tomcat安装包及启动脚本
#下载安装包
root@docker-node1:/opt/dockerfile/web/tomcat# wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.71/bin/apache-tomcat-8.5.71.tar.gz
#启动脚本
root@docker-node1:/opt/dockerfile/web/tomcat# ls
apache-tomcat-8.5.71.tar.gz  Dockerfile  run_tomcat.sh
root@docker-node1:/opt/dockerfile/web/tomcat# cat run_tomcat.sh
#!/bin/sh
su - www -c "/apps/tomcat/bin/catalina.sh start"
su - www -c "tail -f /etc/hosts"

2.2.1.2.3 构建镜像
root@docker-node1:/opt/dockerfile/web/tomcat# docker build -t tomcat:v1 .
2.2.1.2.4 启动测试
root@docker-node1:/opt/dockerfile/web/tomcat# docker run -it -d -p 8080:8080  tomcat:v1

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值