使用 dockerfile 创建镜像
dockerfile 是一个文本格式的配置文件,可以使用 dockerfile 快速创建自定义的镜像。
dockerfile 一般包含4部分信息:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令
创建镜像命令:docker build [选项] 路径,会读取指定路径下(包括子目录)的dockerfile,并将该路径下所有内容发送给 docker 服务端,有服务端来创建镜像。因此最好将dockerfile 单独放到一个文件夹下。可以使用 -t 选项来指定生成的镜像标签。
1.1 第一条语句必须是FROM,可以是现成的基础镜像。比较特殊的是 scratch ,他并不实际存在,是一个空白镜像。接下来所写的指令将作为镜像的第一层开始存在。
1.2 RUN指令,用来执行命令行命令。有两种格式
1.2.1 shell 格式:就像直接在命令行中输入的命令一样,比如:
RUN echo "<html> <body><h1> hello Docker! </h1></body> </html>" > /usr/share/nginx/html/index.html
将语句打印到文件中
1.2.2 exec 格式:RUN [ "可执行文件", "参数1", " 参数2"]
1.3 Dockerfile 支持 shell 行尾添加 "\" 命令换行方式,以及行首 "#" 进行注释的格式
说明:在构建镜像后将不需要的东西删除掉,减少容器容量。每执行一条指令会构建一个应用层。
1 例子:创建 mysql5.7 版本的镜像,不同于官网的mysql5.7 版本是官网使用字符集是 latin1,对于中文用户来说很是不便。
下面是官网docker 镜像的字符集

接下来创建自己的 Dockerfile 和 my.cnf 配置文件
1.1 新建一个目录用于存放dockerfile
mkdir -p dockerfile/mysql5.
进入配置目录
cd dockerfile/mysql5.
新建所需文件
touch my.conf Dockerfile
1.2 编辑 my.cnf文件,是参照了官网的配置文件后,仅修改了字符编码。
vi my.cnf
内容如下:
//my.cnf
# CLIENT SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
[client] # pipe
# socket=0.0
port= [mysql]
default-character-set=utf8 # SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
# server_type=
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port= # The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=utf8 pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=
1.3 编辑 Dockerfile,删除默认配置文件,将自定义配置文件复制到配置文件夹中
//Dockerfile
FROM mysql:5.7
RUN rm -rf /etc/mysql
RUN mkdir /etc/mysql
COPY my.cnf /etc/mysql/ CMD ["mysqld", "--character-set-server=utf8", "--collation-server=utf8_unicode_ci"]
1.4 进行docker构建
ls
Dockerfile my.conf docker build . -t mysql5.
此时可以看到构建的image

1.5 进行测试,
运行容器
docker run --name some-mysql -p : -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
运行后进入容器可以看到字符编码

构建成功!!!
使用 dockerfile 创建镜像的更多相关文章
- docker——Dockerfile创建镜像
写在前面: 继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境 ...
- Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像. Dockerfile由一行行命令语句组成,并且支持易#开头的注释行. 一般而言Dockerfil ...
- docker常用命令、镜像命令、容器命令、数据卷,使用dockerFile创建镜像,dockefile的语法规则。
一.docker常用命令? 1. 常用帮助命令 1.1 docker的信息以及版本号 /* docker info 查看docker的信息 images2 docker本身就是一个镜像. docker ...
- 如何用Dockerfile创建镜像
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5181222.html 创建镜像的目的 首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有 ...
- docker学习笔记6:利用dockerfile创建镜像介绍(生成简单web服务器镜像)
本文介绍如何利用dockerfile来创建镜像.下面介绍具体的操作过程: 一.创建构建环境 操作示例如下: xxx@ubuntu:~$ pwd /home/xxx xxx@ubuntu:~$ mkdi ...
- 使用Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像. 一.基本结构 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行. 一般而言,D ...
- [转]Docker基础-使用Dockerfile创建镜像
本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...
- Docker基础-使用Dockerfile创建镜像
1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # This dockerfile uses the ubuntu image # VERSION 2 - ED ...
- Docker学习笔记之通过 Dockerfile 创建镜像
0x00 概述 由于 Docker 镜像的结构优势,使它的占用空间远小于普通的虚拟机镜像,而这就大幅减少了 Docker 镜像在网络或者其他介质中转移所花费的时间,进而提高了我们进行迁移部署的效率.不 ...
- docker Dockerfile 创建镜像
Docker 组件 1. docker client : docker的客户端 2. docker server : docker daemon的主要组成部分,接受用户通过docker client发 ...
随机推荐
- 刀片服务器和磁盘阵列卡(RAID)技术---永和维护(转)
近期客户需要更换服务器,客户把买好的服务器送来了,原本感觉很小的一个服务器,可当我看到的时候是一个大个的又长又宽,类似机房服务器的那种,后来米老师给大致讲解一番:这个是刀片服务器. 刀片服务器是指在标 ...
- linux的子进程调用exec( )系列函数
exec( )函数族 : 以下我们来看看一个进程怎样来启动还有一个程序的运行.在Linux中要使用exec函数族.系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其參数包含文件名称 ...
- ubuntu server vsftpd 虚拟用户及目录
ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时 ...
- Facebook 开源动画库 pop
官网:https://github.com/facebook/pop Demo: https://github.com/callmeed/pop-playground 一:pop的基本构成: POPP ...
- ASP.NET之旅--深入浅出解读IIS架构
在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...
- uni-app - vue以及微信小程序
uni-app结合了mpvue的优点以及微信小程序的优点 ,uni-app基于vue2.0的. 组件:https://uniapp.dcloud.io/component/README 接口:http ...
- python easy_install 发生Unable to find vcvarsall.bat错误的处理方法
用python安装mmseg分词包时发生了 Unable to find vcvarsall.bat 错误 Searching for mmseg Reading http://pypi.python ...
- 【Oracle】将表名与字段名连接成一行数据展示,字段名使用顿号的分隔
select '<'||a.comments||'>:'||replace(wmsys.wm_concat(b.comments),',','.')||'.' as pjzf from u ...
- CitrixSmartAuditor安装报错解决方法
报错1:安装过程中报错 解决方法: SQLServer的配置: http://www.cnblogs.com/weizhengLoveMayDay/p/3267756.html 报错2:无法连接到Sm ...
- highstock使用案例(异步请求,懒加载)
jsp中导入:<script src="<c:url value="/resources/js/highstock.js"></c:url> ...