Docker之二----镜像制作

Docker镜像制作

1、Docker镜像有没有内核?

从镜像大小上面来说,一个比较小的镜像只有十几MB ,而内核文件需要一百多兆, 因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机

的内核,而镜像本身则只提供相应的rootfs,即系统正常运行所必须的用户空间的文件系统,比如 /dev,/,/proc,/bin /etc等目录,所以容器当中基本是没有/boot目录的,

而/boot当中保存的就是与内核相关的文件和目录 。

2、为什么没有内核?

由于容器启动和运行过程中是直接使用宿主机的内核,所以没有直接调用过物理硬件所以也不会涉及到硬件驱动, 因此也用不上内核和驱动,另外有内核的那是虚拟机。

1、DockerFile制作yum版nginx镜像

DockerFile可以 说是 一种 可以 被 Docker 程序解释的脚本, DockerFile 是由一条条的命令组成的,每条命令对应 linux下面的一条命令, Docker 程序将这些DockerFile指令再翻译成真正的指令再翻译成真正的linuxlinux命令,

Docker 程序读取DockerFile并根据指令生成 Docker 镜像,相比手动制作镜像的方式, DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后期有额外的需求时,只要在之前的 DockerFile添加或者修改响应的命令即可

重新生成新的 Docke 镜像,避免了重复手动制作镜像的麻烦,具体如下:

实战一:Dockerfile制作nginx镜像

1、Dockerfile制作yum版nginx镜像

1、先经过docker下载centos镜像

[[email protected] ~]# yum install docker-ce  -y #安装官网docker-ce,默认安装最新版
[[email protected] ~]# systemctl start docker  #启动docker
[[email protected] ~]# docker pull centos  #下载centos镜像

2、切换到一个新建的nginx目录下,进行实验测试

[[email protected] ~]# mkdir /data/nginx
[[email protected] ~]# cd /data/nginx

3、创建一个nginx测试页,然后访问网页测试  

[[email protected] nginx]# cd  /data/nginx
[[email protected] nginx]# cat index.html  #修改一个测试页面
nginx web test
[[email protected] nginx]# cat index1.html  #修改一个测试页面
nginx web index1 test
[[email protected] nginx]# tar zcvf  code.tar.gz index1.html index.html 

4、开始在nginx目录下创建一个Dockerfile文件,创建的nginx镜像,不能在镜像内改配置文件,只能将配置文件传出来,在宿主机内修改,然后再传到配置文件中,测试的代码也是如此。

FROM centos

MAINTAINER liu [email protected]@qq.com

RUN yum install epel-release  -y &&  yum install nginx -y   && rm -rf /usr/share/nginx/html/index.html  #如果加入后面的rm -rf 命令后,就会重新执行前面的安装

ENV MY_HOST 192.168.7.101

ADD code.tar.gz /usr/share/nginx/html/   # 直接导入压缩的包,ADD选项是解压包,用COPY就是不解压

EXPOSE 80 443

CMD ["nginx"]

5、制作镜像脚本

[[email protected] nginx]# cat build-command.sh
#!/bin/bash

TAG=$1
docker build  -t nginx:$1 .

6、执行制作镜像脚本

[[email protected] nginx]# bash build-command.sh make 

7、运行docker容器并启动nginx

[[email protected] nginx]# docker images  # 查看docker镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               make                eca08b87df7f        5 minutes ago       511MB
nginx               2020                ed020900aa3c        20 minutes ago      317MB
centos              latest              0f3e07c0138f        3 months ago        220MB
[[email protected] nginx]# docker run -it --rm -p 80:80 nginx:make bash  # 启动nginx:make镜像,--rm测试完就会删除此镜像
[[email protected] /]# nginx #启动nginx
Cannot parse dst/src address.
[[email protected] /]# ss -anlt
State             Recv-Q             Send-Q                           Local Address:Port                           Peer Address:Port
LISTEN            0                  128                                    0.0.0.0:80                                  0.0.0.0:*
LISTEN            0                  128                                       [::]:80                                     [::]:* 

8、网页测试:

两个不同的html访问都已成功:

9、如果需要修改配置文件,不能在镜像里边进行修改,需要将配置文件传出来修改,然后再传回去再次创建镜像。

[[email protected] /]# sz /etc/nginx/nginx.conf

10、修改后的Dockerfile文件

FROM centos

MAINTAINER liu [email protected]@qq.com

RUN yum install epel-release  -y &&  yum install nginx -y   && rm -rf /usr/share/nginx/html/index.html  #如果加入后面的rm -rf 命令后,就会重新执行前面的安装

ENV MY_HOST 192.168.7.101

ADD nginx.conf  /etc/nginx/  # 修改后的配置文件加上此选项即可
ADD code.tar.gz /usr/share/nginx/html/   # 直接导入压缩的包,ADD选项是解压包,用COPY就是不解压

EXPOSE 80 443

CMD ["nginx"]

2、Dockerfile编译nginx镜像

nginx源码包下载官网:https://nginx.org/en/download.html

1、创建一个nginx测试页,然后访问网页测试  

[[email protected] nginx]# cd  /data/nginx
[[email protected] nginx]# cat index.html  #修改一个测试页面
nginx web test
[[email protected] nginx]# cat index1.html  #修改一个测试页面
nginx web index1 test
[[email protected] nginx]# tar zcvf  code.tar.gz index1.html index.html 

2、在上面的基础修改Dockerfile配置文件

[[email protected] nginx]# cat Dockerfile
FROM centos

MAINTAINER  liu [email protected]

RUN yum install epel-release -y && yum install  vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel zip unzip zlib-
devel  net-tools lrzsz tree  telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute -y  

RUN  yum groupinstall "development tools" -y  #添加一个开发包组,为了编译安装
ADD nginx-1.14.2.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.14.2 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx
#COPY nginx.conf /apps/nginx/conf
#ENV MY_HOST 192.168.7.101
#ADD nginx.conf /etc/nginx/
ADD code.tar.gz  /apps/nginx/html/

EXPOSE 80 443
CMD ["nginx"]

3、制作镜像脚本

[[email protected] nginx]# cat build-command.sh
#!/bin/bash

TAG=$1
docker build  -t nginx:$1 .

4、执行制作镜像脚本

[[email protected] nginx]# bash build-command.sh make 

5、执行创建镜像脚本

[[email protected] nginx]# bash build-command.sh  make

6、运行镜像,并启动nginx服务

[[email protected] nginx]# docker run -it --rm -p 80:80 nginx:make bash
[[email protected] /]# ss -ltnp
State            Recv-Q             Send-Q                            Local Address:Port                           Peer Address:Port
[[email protected] /]# nginx
[[email protected] /]# ll
bash: ll: command not found
[[email protected] /]# ss -nltp
State             Recv-Q             Send-Q                           Local Address:Port                           Peer Address:Port
LISTEN            0                  128                                    0.0.0.0:80                                  0.0.0.0:*                 users:(("nginx",pid=18,fd=6))
[[email protected] /]# exit

7、网页测试:

两个不同的html访问都已成功:

3、docker下载Mysql镜像  

1、直接pull下载mysql镜像

[[email protected] ]# docker pull mysql:5.6.44

2、运行此镜像,需要指定密码

[[email protected] nginx]# docker run -it --rm -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.44  # 做一个端口映射

3、在另一台mysql客户端进行测试连接

[[email protected] ~]# mysql -p123456 -h192.168.7.100
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MySQL [(none)]>

注意:将数据库的数据最好能存在宿主机的/var/lib/mysql目录下,避免容器删除后,数据库还能在下一个容器上继续运行。

  

 

  

原文地址:https://www.cnblogs.com/struggle-1216/p/12190974.html

时间: 2024-10-10 15:38:03

Docker之二----镜像制作的相关文章

Docker系列-(2) 镜像制作与发布

上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图所示的结构, 从底层往上,依次是文件系统层,操作系统层,专有镜像层,读写层. 启动文件层:Docker启动时的用到的文件系统,启动完成后会自动脱离,用户不会与这一层直接打交道. 操作系统层:这一层主要是操作系统相关的一些文件,根据发行版本的不同,可能有CentsOS.Ubuntu等等.文件包含dev

Docker笔记——jenkins镜像制作

jenkins官方路径:https://hub.docker.com/_/jenkins/ 最新Dockerfile路径:https://github.com/jenkinsci/docker/blob/6eaa9b15926232310317490a3b9975ef61be763c/Dockerfile 首先jenkins镜像依赖于openjdk:8-jdk镜像,如果你没有此镜像要么从docker hub下载,自己制作可参考上一篇文章http://www.cnblogs.com/tacyeh/

Docker笔记——jdk镜像制作

openjdk镜像依赖如下: openjdk:8-jdk -> buildpack-deps:jessie-scm -> buildpack-deps:jessie-curl -> debian:jessie -> scratch 找到各镜像Dockerfile后即可一步步制作出openjdk:8-jdk镜像,具体步骤可参考http://www.cnblogs.com/tacyeh/p/5903982.html中制作registry方法,这里只列出所需Dockerfile路径. h

docker基础——关于安装、常用指令以及镜像制作初体验

为什么使用docker docker就是一个轻量级的虚拟机,他解决的是服务迁移部署的时候环境配置问题.比如常见的web服务依赖于jdk.Tomcat.数据库等工具,迁移项目就需要在新的机器重新配置这些,不光麻烦,而且可能配错. 如果能够将整个服务连同他依赖的外部环境一同打包就好了,docker就是这么干的.他将配置好的软件打包成image,在新的机器里面启动这个image即可 当然我所理解的只是一小部分,docker还有提供弹性云服务.组建微服务架构等方面的应用 最后,相对于传统虚拟机,dock

Docker快速入门——Docker镜像制作

Docker快速入门--Docker镜像制作 一.Dockerfile脚本 1.Dockerfile脚本简介 Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是描述该层应当如何构建.Dockerfile文件示例如下: ## Dockerfile文件格式 # This dockerfile uses the ubuntu image # VERSION 2 - EDITION 1 # Author: docker_us

Docker镜像管理基础与基于容器的镜像制作示例

一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建并启动容器.并且Docker镜像是采用分层构建,联合挂载的机制实现的.那什么是分层构建,联合挂载呢?如图: 在分层构建机制中,最底层为bootfs,用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节省内存资源.在bootfs之上的是rootfs,这里就是doc

Docker之三----java业务镜像制作

一.制作tomcat镜像: 基本架构图: 1.制作JDK镜像 基于官方提供的centos7.2.1511基础镜像构建JDK和tomcat镜像,先构建JDK镜像,然后再基于JDK镜像构建tomcat镜像. JDK下载路径:https://www.oracle.com/technetwork/java/javase/downloads/index.html 选择架构版本: (1)先下载基础centos镜像 [[email protected] ~]# docker pull centos (2)搭建

Docker笔记三 Docker镜像制作

Docker笔记三 Docker镜像制作 1.Docker镜像制作方法: docker commit 保存当前container的状态到镜像,生成image. docker build 利用dockerfile自动化生成image. 2.制作方法 docker commit方式 #启动镜像名称为centos的一个容器(container)  [[email protected] ~]#docker run -it centos /bin/bash #在容器内安装httpd服务 [[email p

Docker学习笔记1 :镜像制作

参考资源: http://blog.csdn.net/kongxx?viewmode=contents http://my.oschina.net/feedao/blog ============================== 运行环境 win8.1 + virtual box, 运行 centos6.4 64bit, 内网通过代理上网. 如下操作基本都在root下进行. 目的 尝试自己建立Docker镜像 基础工作 1,阿里云镜像 执行如下脚本,将资源镜像执行阿里云 #!/bin/bas