Dockerfile构建镜像与部署
基于上一章的基本介绍,这一部分写一下Dockerfile的学习过程,通过Dockerfile我们可以方便的自动定制去构建我们的镜像文件,写好Dockerfile对于后期构建自动化是非常有利的。下面与在centos 7下安装MariaDB 为例:
Dockerfile文件:
|
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
|
#
# MariaDB Dockerfile
#
# https://github.com/dockerfile/mariadb
#
# Pull base image.
FROM centos:centos7.
1.1503
MAINTAINER Carson,xiaoluo <xiaoluo@test.com>
# Install MariaDB.
ENV TERM xterm
ENV TZ
"Asia/Shanghai"
ENV DATA_DIR
/
var
/
lib
/
mysql
ADD epel.repo
/
etc
/
yum.repos.d
/
epel.repo
RUN \
yum install
-
y mariadb mariadb
-
server && \
yum install
-
y
-
-
enablerepo
=
epel pwgen python
-
pip && \
yum clean
all
RUN \
mysql_install_db
-
-
user
=
mysql
-
-
ldata
=
${DATA_DIR}
ADD mysqld_charset.cnf
/
etc
/
my.cnf.d
/
# Define mountable directories.
VOLUME [
"/var/lib/mysql"
]
# Expose ports.
EXPOSE
3306
CMD [
"mysqld_safe"
]
|
注释说明:
|
1
2
3
4
5
6
7
8
|
FROM centos:centos7.
1.1503
基于哪个父镜像创建,没有就从远程仓库下载
MAINTAINER 维护者信息
ENV TERM xterm 定义环境变了,定义一个Docker的终端还有下面的时钟,变量。
ADD 添加文件到Docker容器里
RUN 运行shell下面的环境部署命令
VOLUME 提供一个挂载的目录,这样像mysql的
/
data的文件我们可以挂载到本机
EXPOSE 暴露端口,方便对内网的服务进行端口映射
CMD 启动服务后运行的命令
|
一、创建镜像:
|
1
|
docker build
-
t xiaoluo
/
mysql:
5.6
.
|
二、查看镜像:
|
1
2
3
|
[root@localhost test]
# docker images
REPOSITORY TAG IMAGE
ID
CREATED VIRTUAL SIZE
xiaoluo
/
mysql
5.6
82aa5a0aaf30
16
minutes ago
382.2
MB
|
三、启动镜像以挂载的方式挂载一个本地文件,然后测试:
1、启动镜像:
|
1
|
[root@localhost test]
# docker run -d -p 3306:3306 -v /var/lib/docker/mydata/:/var/lib/mysql xiaoluo/mysql:5.6
|
##3306是Dockefile暴露出来的端口,-v 是挂载本地的/var/lib/docker/mydata/到mysql 暴露出来的目录:由VOLUME指定。这样的好处是我们可以再容器存在或者死掉时候数据持久性存储。
2、测试,登录mysql 创建一个xiaoluo的数据库:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@localhost test]
# docker exec -it 87ff9f4594b2 /bin/bash
[root@
87ff9f4594b2
/
]
# mysql
MariaDB [(none)]> create database xiaoluo;
Query OK,
1
row affected (
0.04
sec)
MariaDB [(none)]> show databases;
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| Database |
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| information_schema |
| mysql |
| performance_schema |
| test |
| xiaoluo |
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
|
3、退出容器查看本地目录/var/lib/docker/mydata/ 目录:
|
1
2
3
|
[root@localhost test]
# cd /var/lib/docker/mydata/
[root@localhost mydata]
# ls
aria_log.
00000001
aria_log_control ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock performance_schema test xiaoluo
|
4、删除xiaoluo这个库查看容器里是否还存在、可以看到已经被删除:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost mydata]
# rm -rf xiaoluo
[root@localhost mydata]
# docker exec -it 87ff9f4594b2 /bin/bash
[root@
87ff9f4594b2
/
]
#
[root@
87ff9f4594b2
/
]
#
[root@
87ff9f4594b2
/
]
# mysql
MariaDB [(none)]> show databases;
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| Database |
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| information_schema |
| mysql |
| performance_schema |
| test |
|
+--------------------+
使用Dockerfile可以参考官方文档:https://github.com/dockerfile
使用Dockerfile可以帮助我们快速的构建和部署我们的Docker环境,通过Dockerfile的一些配置我们也能实现一些我们想要的功能,比如端口映射,卷组挂载等。