GVKun编程网logo

DokcerFile的添加及如何生成一个自定义镜像mycentos(四)(使用dockerfile创建镜像)

17

针对DokcerFile的添加及如何生成一个自定义镜像mycentos和四这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展CentOS7设置开机启动服务,添加自定义系统服务centos7关闭

针对DokcerFile的添加及如何生成一个自定义镜像mycentos这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展CentOS 7设置开机启动服务,添加自定义系统服务 centos 7 关闭防火墙 centos 7.2 centos 7 64位下载、CentOS zookeeper dockerfile、CentOS 环境中使用 Dockerfile 创建 Tomcat+JDK 镜像、centos7中dockerfile方式安装nginx镜像 + 解决报错等相关知识,希望可以帮助到你。

本文目录一览:

DokcerFile的添加及如何生成一个自定义镜像mycentos(四)(使用dockerfile创建镜像)

DokcerFile的添加及如何生成一个自定义镜像mycentos(四)(使用dockerfile创建镜像)

  最近在学习Docker,用commit去生成一个镜像,但是生成后的镜像非常臃肿,所以去学习了一下DockerFile。

前提条件:

  已在虚拟机中成功安装Docker

简单的理解可以如下图所示:

  DockerFile文件:类似原材料

  Docker镜像:组装原材料后,形成交付品

  Docker容器:运行状态

1、什么叫DockerFile

  DockerFile:就是一系列脚本,用命令和参数构成的,主要作用就是用来构建Docker镜像的文件。

2、怎么去写DockerFile(DockerFile文件编写的步骤)

  怎么去写DockerFile,也就是DockerFile文件形成的步骤,主要有3个步骤:编写DockerFile文件、Docker build执行获取镜像、Docker run运行生成容器,最后可以通过Docker history去查看历史执行镜像。

Dockerfile的大致执行流程:

  2.1 docker从基础镜像运行一个容器(在虚拟机中,在hub官网上拉一个centos)

  2.2 执行指令并对容器做出修改

  2.3 执行类似docker commit的操作提交一个新的镜像层

  2.4 Docker在基于刚提交的镜像运行一个新容器

  2.5 执行dockerfile中的下一条指令直到所有指令都执行完成

DockerFile文件执行步骤命令:

1 编写Dockerfile文件
2 构建docker image:Docker build -t 新镜像名:TAG . //注意最后一个点与TAG之间有个空格
3 运行docker 生成容器:docker run -it 新镜像ID //通过docker images找到镜像ID
4 列出镜像的变更历史:docker history 新镜像ID
DockerFile文件执行步骤命令

  3、DockerFile的文件解析

打开官网 https://hub.docker.com/  ,在官网上搜索centos,随意点开一个,查看DockFile。

如下图,Dockerfile文件解析:

  3.1 保留字全部大写+参数 //保留字有FROM、MAINTAINER、COPY、ADD、RUN、ONBUILD、WORKDIR、USER、CMD、ENV、EXPOSE、VOLUME、ENTRYPOINT等待。

  3.2 从上到下,顺序执行

  3.3 #表注释

  3.4 每条指令都会创建一个 新的镜像层,并对镜像进行提交

 

 4、实战-定制需求生成一个自定义镜像

Base镜像(scratch):docker hub中的镜像都是通过在base镜像中安装;自定义镜像中安装和配置需要的软件构建出来的。

4.1 自定义镜像需求为:目前从官网上pull下来的centos都是精简版,不支持vim,不支持ifconfig,所以自定义的镜像mycentos满足如下3个条件

  a 登陆后默认路径修改为:/usr/local (未修改前在根目录下/)

  b 可以使用vim 编辑器

  c 可以查看网络配置ifconfig支持

4.2 打开虚拟机centos7终端,执行docker images出现错误:【Failed to restart dock.service: Unit not found.】,执行如下代码:

1 systemctl unmask docker.service
2 systemctl unmask docker.socket
3 systemctl start docker.service
开始Docker服务

4.3 在虚拟机centos中,打开终端,首先创建目录文件Dockerfile/DockerFile文件并且配置Dockerfile文件,代码如下:

1 cd /
2 mkdir /mydocker/
3 touch Dockerfile.txt
4 vi Dockerfile.txt
根目录下创建Dockerfile.txt,且进入到当前文件

打开对应的Dockerfile.txt文件后,编写定义需求,代码如下:

1 From centos
2 ENV mypath /usr/local   //配置环境变量,默认路径变更为:/usr/local,以前是根目录
3 WORKDIR $mypath
4 RUN yum -y install vim   //安装vim
5 RUN yum -y install net-tools  //安装net-tools
6 EXPOSE 80
7 CMD /bin/bash
自定义Dockerfile配置文件

4.4 构建dockerfile文件生成镜像,代码如下:

 

docker build -f /mydocker/Dockerfile.txt -t mycentos:1.3 .
构建dockerfile文件生成镜像

 4.5 生成镜像后,运行生成容器,代码如下:

docker run -it mycentos:1.3
生成镜像后,运行生成容器

 4.6 查看镜像的历史记录,代码如下:

1 docker images   //找到对应的image id(镜像ID)
2 docker history a5688da747d7  //查看docker历史记录
查看docker image的历史记录

 

 

CentOS 7设置开机启动服务,添加自定义系统服务 centos 7 关闭防火墙 centos 7.2 centos 7 64位下载

CentOS 7设置开机启动服务,添加自定义系统服务 centos 7 关闭防火墙 centos 7.2 centos 7 64位下载

centos 7设置开机启动服务,添加自定义系统服务

  • 建立服务文件
  • 保存目录
  • 设置开机自启动
  • 其他命令

1.建立服务文件

文件路径

vim /usr/lib/systemd/<span>system</span>/nginx.service 
登录后复制

服务文件内容

<span>[Unit]</span><span>Description=<span>nginx - high performance web server</span></span><span>After=<span>network.target remote-fs.target nss-lookup.target</span></span><span>[Service]</span><span>Type=<span>forking</span></span><span>ExecStart=<span>/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf</span></span><span>ExecReload=<span>/usr/local/nginx/sbin/nginx -s reload</span></span><span>ExecStop=<span>/usr/local/nginx/sbin/nginx -s stop</span></span><span>[Install]</span><span>WantedBy=<span>multi-user.target</span></span>
登录后复制

文件内容解释

[<span>Unit</span>]:服务的说明<span>
Description:描述服务</span><span>
After:描述服务类别</span><span>
[Service]服务运行参数的设置</span><span>
Type=forking是后台运行的形式</span><span>
ExecStart为服务的具体运行命令</span><span>
ExecReload为重启命令</span><span>
ExecStop为停止命令</span><span>
PrivateTmp=True表示给服务分配独立的临时空间</span><span>
注意:启动、重启、停止命令全部要求使用绝对路径</span><span>
[Install]服务安装的相关设置,可设置为多用户</span>
登录后复制

2.保存目录

以754的权限保存在目录:

/usr/lib/systemd/<span>system</span>
登录后复制

3.设置开机自启动

任意目录下执行

systemctl enable nginx<span>.service</span>
登录后复制
登录后复制

4.其他命令

启动nginx服务

systemctl <span><span>start</span> nginx.service</span>
登录后复制

设置开机自启动

systemctl enable nginx<span>.service</span>
登录后复制
登录后复制

停止开机自启动

systemctl disable nginx<span>.service</span>
登录后复制

查看服务当前状态

systemctl status nginx<span>.service</span>
登录后复制

重新启动服务

systemctl restart nginx<span>.service</span>
登录后复制

查看所有已启动的服务

systemctl <span>list</span>-units --<span><span>type</span>=</span>service
登录后复制
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了centos 7设置开机启动服务,添加自定义系统服务,包括了centos 7方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

CentOS zookeeper dockerfile

CentOS zookeeper dockerfile

DockerFile:

FROM centos:7

RUN yum -y install vim lsof wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel pwgen python-pip

RUN mkdir /opt/java &&\
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.tar.gz -P /opt/java

RUN tar zxvf /opt/java/jdk-8u102-linux-x64.tar.gz -C /opt/java &&\
    JAVA_HOME=/opt/java/jdk1.8.0_102 &&\
    sed -i "/^PATH/i export JAVA_HOME=$JAVA_HOME" /root/.bash_profile &&\
    sed -i "s%^PATH.*$%&:$JAVA_HOME/bin%g" /root/.bash_profile &&\
    source /root/.bash_profile

ENV ZOOKEEPER_VERSION "3.4.6"

RUN mkdir /opt/zookeeper &&\
    wget http://mirror.olnevhost.net/pub/apache/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz -P /opt/zookeeper

RUN tar zxvf /opt/zookeeper/zookeeper*.tar.gz -C /opt/zookeeper

RUN echo "source /root/.bash_profile" > /opt/zookeeper/start.sh &&\
    echo "cp /opt/zookeeper/zookeeper-"$ZOOKEEPER_VERSION"/conf/zoo_sample.cfg /opt/zookeeper/zookeeper-"$ZOOKEEPER_VERSION"/conf/zoo.cfg" >> /opt/zookeeper/start.sh &&\
    echo "/opt/zookeeper/zookeeper-$"ZOOKEEPER_VERSION"/bin/zkServer.sh start-foreground" >> /opt/zookeeper/start.sh

EXPOSE 2181

ENTRYPOINT ["sh","/opt/zookeeper/start.sh"] 

build:

docker build -t jiankunking/zookeeper:3.4.6 -f zookeeper.Dockerfile .

CentOS 环境中使用 Dockerfile 创建 Tomcat+JDK 镜像

CentOS 环境中使用 Dockerfile 创建 Tomcat+JDK 镜像

环境准备:

  1. VMware 下安装 CentOS,安装 Docker 并从公共镜像仓库中下载 CentOS 的镜像到本地仓库

  2. 从 tomcat 和 oracle 官网下载 jdk-8u171-linux-x64.rpm 和 apache-tomcat-7.0.77.tar.gz

  3. 上传到 CentOS 虚拟机的工作目录:如 /root/software/

  4. 上传工程到工作目录,示例中创建的是一个 hello.html

创建 Dockerfile

 创建文件 /root/software/Dockerfile, 内容如下:

FROM centos:7.2.1511
MAINTAINER sjg
WORKDIR /home
#上传安装包
ADD jdk-8u171-linux-x64.rpm /home/
#安装JDK
RUN rpm -ivh /home/jdk-8u171-linux-x64.rpm && rm -rf /home/jdk-8u171-linux-x64.rpm
#设置环境变量
ENV JAVA_HOME /usr/java/jdk1.8.0_171-amd64
ENV PATH $PATH:$JAVA_HOME/bin
#安装tomcat
RUN mkdir Tomcat
ADD apache-tomcat-7.0.77.tar.gz /home/
RUN tar zxf /home/apache-tomcat-7.0.77.tar.gz -C /home/Tomcat && rm -rf /home/apache-tomcat-7.0.77.tar.gz
#部署项目
ADD hello.html /home/Tomcat/apache-tomcat-7.0.77/webapps/ROOT/
EXPOSE 8080
#启动容器
ENTRYPOINT /home/Tomcat/apache-tomcat-7.0.77/bin/startup.sh && tail -f /home/Tomcat/apache-tomcat-7.0.77/logs/catalina.out

build Tomcat 镜像

执行:cd /root/software

执行:docker build -t tomcat-sjg:1.0

运行 Tomcat 容器

docker run -d -p 58080:8080 --name mytomcat tomcat-sjg:1.0

查看 hello world 页面

在浏览器中输入:http://[虚拟机地址]:58080/hello.html

 

其他常用命令:

启动 docker 服务:systemctl start docker.service
查看镜像:docker images
查看容器:docker ps -a
进入容器:docker exec -it mytomcat bash
停止容器:docker stop mytomcat 
重启容器:docker start mytomcat 
删除容器:docker rm mytomcat  ---- 必须先 stop
删除镜像:docker rmi tomcat-sjg:1.0
查看容器执行日志:docker logs mytomcat 
 
 

 

Docker 的公共仓库中其实已经提供了 tomcat 镜像,但是 java 环境并不是 oracle JDK。

 

  

 

centos7中dockerfile方式安装nginx镜像 + 解决报错

centos7中dockerfile方式安装nginx镜像 + 解决报错

记录一下我曲折的安装镜像之旅(扶额哭),报错5秒钟,改错三小时。看了很多网上的教程,但我用了 都或多或少有些问题,所以顺便总结记录一个避坑的步骤。

我使用的是centos7,已经装好了docker,使用dockerfile安装Nginx 1.17.1镜像

目录

安装和启动步骤

1.安装centos基础镜像(或Ubuntu)(可略过)

2.编辑Dockerfile内容,找一个位置,创建并编辑Dockerfile,内容如下。

3.在终端中,进入Dockerfile所在的目录,运行如下命令,利用Dockerfile构建镜像

4.运行镜像的对应容器。

nginx配置启动

1.进入容器内

2.启动nginx。


安装和启动步骤

  • 1.安装centos基础镜像(或Ubuntu)(可略过)

先解释一下,为啥本来在centos里,却还要在docker里安装个centos镜像;因为①要使Nginx在操作系统的基础下运行,②且在使用dockerfile方式时,文件内容中开头通常包含一句“FROM 基础镜像”,所以这里就需要再有一个镜像。

两种方式,

一种是可以直接拉取centos(命令如下),

或者,现在先不加,等会运行Dockerfile文件内容时,令其自动下载(那么本步骤跳过)

docker pull centos:latest
#冒号后是版本,不写默认则为最新版本
  • 2.编辑Dockerfile内容,找一个位置,创建并编辑Dockerfile,内容如下。

# 文件名Dockerfile,将一下内容直接写到Dockerfile里。(没有后缀名,注意名字不可以改)

# 如果你前面建立了centos的基础镜像,那么使用FROM 基础镜像名
# 刚才跳过了第一步,还没有对应基础镜像
# 可以直接使用FROM centos(但这种方式是从官网下载内容,太慢了,动不动就timeout)
# 如果这样还是timeout,可以使用 FROM docker.io/centos
# 当然我是前面两种写法都timeout了,所以我用了网易的源,如下
FROM hub.c.163.com/public/centos:latest

# 维护人信息
MAINTAINER newbie <newbie@qq.com>

#给基础镜像centos安装必备的环境
# 加上“rpm --rebuilddb &&”是为了防止数据库损坏而影响yum安装。
# 注意,比较保险的做法是有多少个yum命令,就加多少个“rpm --rebuilddb &&”在yum前面。
# 另外yum install一定要安装的是pcre,zlib,net-tools,make,gcc,wget,tar及其相关内容
RUN rpm --rebuilddb && yum install -y autoconf automake make wget proc-devel net-tools zlib zlib-devel make gcc  g++ openssl-devel pcre pcre-devel tar

# 在线获取Nginx压缩包(也可以在本地系统(centos)里先下载压缩包,再ADD命令将包加入到基础镜像/usr/src目录中)
RUN wget http://Nginx.org/download/Nginx-1.17.1.tar.gz

# 解压到当前目录
RUN tar -zxvf Nginx-1.17.1.tar.gz

# 设置环境
workdir Nginx-1.17.1

# 配置Nginx
RUN ./configure --prefix=/usr/local/Nginx && make && make install
# RUN rm -rf /usr/src/Nginx

# 设置环境
workdir /usr/local/Nginx

#http
EXPOSE 80           

#https
EXPOSE 443              

CMD ["Nginx", "-g", "daemon off;"]
  • 3.在终端中,进入Dockerfile所在的目录,运行如下命令,利用Dockerfile构建镜像

docker build -t 镜像名(自己起):标记号(通常即版本号,也可随便起)

如果每行都运行成功,出现如下successfully的语句,那么恭喜,镜像已成功安装。此时可以通过docker images命令,查看构建好的docker。

  • 4.运行镜像的对应容器。

docker run -p 8081:80 --name test_Nginx -it 124:1.17 /bin/bash
# -p 将对应的8081端口映射成80端口,通过在本机centos访问8081端口,则会自动映射到基础镜像centos的80端口。
#--name 后面加给容器的名字
#-it 后面加上对应的镜像
#另外注意加上/bin/bash

一般来说到这一步,再通过本机系统浏览器访问localhost:8081即可。(如果不行,可尝试使用 http://本机centos ip:8081)。

注意,如果此时仍无法访问,有可能是Nginx未启动(本来我以为自己安装还是有问题,对代码命令改改改,这块花了不少问题TAT。后来排除了安装错误的可能,一顿操作无效后,想到问题可以被简化为),如果直接输入Nginx无法访问,解决步骤见Nginx配置启动。

curl: (7) Failed to connect to ::1: Network is unreachable

(运行命令curl localhost:8081的报错)

Nginx配置启动

  • 1.进入容器内

首先通过刚才前面的步骤,容器已运行,下面为我的运行命令情况,在[]内能看到,当前系统名变为了6d7278eb8589(我的容器id)。

[root@6d7278eb8589 /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  Nginx-1.17.1  Nginx-1.17.1.tar.gz  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@6d7278eb8589 /]# cd Nginx-1.17.1
[root@6d7278eb8589 Nginx-1.17.1]# ls
CHANGES  CHANGES.ru  LICENSE  Makefile  README  auto  conf  configure  contrib  html  man  objs  src
[root@6d7278eb8589 Nginx-1.17.1]# ./configure

如果没进入容器内,使用如下命令

# 首先看一下构建的容器id,刚才启动了,直接docker ps即可查看。
docker ps

# 然后进入容器
docker attach 容器id

#上面这句也可以替换为
docker exec -it 容器名 /bin/bash

进入容器,会发现终端的[]中系统名变为容器id。进入Nginx所在目录。找到configure文件。终端中运行 ./configure。此时会出现一串组件的审查检测,找到not found的,看一看,是否是必要的pcre、zlib等,如果是,需要yum install 或是apt-get install安装一下;不是很重要的组件的话,可以先忽略。

  • 2.启动Nginx。

根据如下指令,找到Nginx文件夹(前面Dockerfile设置的环境),进入/sbin文件夹,运行./Nginx,启动Nginx。

[root@6d7278eb8589 Nginx-1.17.1]# cd /usr/local/Nginx
[root@6d7278eb8589 Nginx]# ls
conf  html  logs  sbin
[root@6d7278eb8589 Nginx]# cd sbin
[root@6d7278eb8589 sbin]# ls
Nginx  Nginx.old
[root@6d7278eb8589 sbin]# ./Nginx

通过curl http://localhost命令,可以查看是否启动成功并运行正常。如下,则运行正常。

我们今天的关于DokcerFile的添加及如何生成一个自定义镜像mycentos的分享已经告一段落,感谢您的关注,如果您想了解更多关于CentOS 7设置开机启动服务,添加自定义系统服务 centos 7 关闭防火墙 centos 7.2 centos 7 64位下载、CentOS zookeeper dockerfile、CentOS 环境中使用 Dockerfile 创建 Tomcat+JDK 镜像、centos7中dockerfile方式安装nginx镜像 + 解决报错的相关信息,请在本站查询。

本文标签: