这篇文章在上篇的镜像基础上用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