用Dockerfile搭建一个具有apache和mysql服务的镜像并使用supervisor来管理进程

这篇文章在上篇的镜像基础上用Dockerfile搭建一个具有apache服务的基础Ubuntu镜像并上传,扩展了mysql服务,并使用supervisor来管理进程。
我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。进程管理工具supervisor可以管理启动进程,使用Supervisor可以更好的控制、管理、重启我们希望运行的进程。参考文章Docker 使用 Supervisor 来管理进程

1. 创建文件目录与文件

创建所需的目录mysql_ubuntu用于存放Dockerfile和相关文件。

$ mkdir mysql_ubuntu/
$ cd mysql_ubuntu/
$ touch Dockfile supervisord.conf

2. supervisord.conf文件内容

supervisord.conf为supervisor配置文件,配置文件包含目录和进程,第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。

nodaemon=true
[program:apache2]
command=/usr/sbin/apache2 -DFOREGROUND
[program:mysql]
command=/usr/bin/mysqld_safe

3. Dockerfile文件内容

#build mysql image
#
# VERSION 1.0

FROM nssczh/apache:ubuntu
MAINTAINER NSS/Czh

RUN     apt-get update \
        && echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d \
        && DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server supervisor\
        && rm -rf /var/lib/apt/lists/*
#添加 supervisord 的配置文件,并复制配置文件到对应目录下面。
COPY    ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf

RUN     /etc/init.d/mysql start \
        &&mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'xidian320';" \
        &&mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'xidian320';" \
        &&mysql -u root -pxidian320 -e "show databases;"

RUN     sed -i "s/bind-address/#bind-address/g" /etc/mysql/my.cnf
EXPOSE 3306

CMD     ["/usr/bin/supervisord"]

4.创建镜像并测试

$ docker build -t mysql:6.0 .
...
Successfully built 52b4bcf7cecc
Successfully tagged mysql:6.0
$ docker run -d -P mysql:6.0 
$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                    PORTS                                            NAMES
18d4c24a8bae        mysql:6.0              "/usr/bin/supervisord"   8 seconds ago       Up 5 seconds              0.0.0.0:32793->80/tcp, 0.0.0.0:32792->3306/tcp   practical_swanson

测试apache:
在浏览器输入容器所在ip+端口号:http://192.168.8.95:32793/,可以看到apache初始页面。
测试mysql:
通过命令mysql -h 192.168.8.95 -u root -pxidian320 -P 32792可以连接到容器中的mysql。

$ mysql -h 192.168.8.95 -u root -pxidian320 -P 32792
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.62-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

5.上传镜像

上传镜像到docker hub仓库,需要修改REPOSTORY为用户docker id。

$ docker tag mysql:6.0 nssczh/mysql:ubuntu
$ docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
$ docker push nssczh/mysql:ubuntu
...
ubuntu: digest: sha256:34cc36c241bc8359006034faebbb1b9de79a203652d17a32d5e9dd3b3533db87 size: 2617

你可能感兴趣的:(docker,ubuntu)