Docker如何同时启动多个服务

前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下

FROM centos:centos6

MAINTAINER Fanbin Kong "kongxx@hotmail.com"

RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN yum install -y openssh-server sudo mysql-server mysql supervisor
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config 

RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin ALL=(ALL)  ALL" >> /etc/sudoers

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN mkdir /var/run/sshd

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

RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisord.conf

EXPOSE 22 3306
CMD ["/usr/bin/supervisord"]

2. 在Dockerfile所在目录下创建supervisord.conf文件,内容如下:

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:mysqld]
command=/usr/bin/mysqld_safe

3. 在Dockerfile所在目录下运行build命令来生成image文件,这里使用mysql_server作为image文件名

sudo docker build -t myserver .

4. 启动容器

4.1 首先使用下面的命令来启动容器

sudo docker run --name=myserver -d -P myserver

4.2 启动完容器后,可以使用“sudo docker ps”来查看,此时可以看PORTS列内容为
“0.0.0.0:49171->22/tcp, 0.0.0.0:49172->3306/tcp”
容器的22端口和3306端口会被映射到宿主机器的49171和49172端口。

4.3 此时就可以通过下面的命令来访问ssh和mysql服务了

ssh admin@<宿主机器> -p <宿主机器端口>
mysql -h <宿主机器> -u root -pletmein -P 49172

4.4 当然也可以使用“sudo docker inspect myserver | grep IPAddress”来查看容器IP地址,然后通过下面命令访问ssh和mysql服务

ssh admin@<容器机器IP>
mysql -h <容器机器IP> -u root -pletmein

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • CentOS7 安装docker 解决启动不了的问题

    CentOS7安装docker 启动不了,在工作当中遇到这个问题,当时急的不清,网上资料又不多,不过经过自己的捣鼓终于解决了 这个问题! [root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redirecting to /bin/systemctl start docker.service Job for docker.service failed beca

  • 用Docker作为PaaS的替代方案是否完美无缺

    随着数字技术的普及,越来越多的企业面临着海量数据.虽然企业都希望用大数据掘金,然而数字化能力的缺失也使企业极易淹没在这片无边无际的数据海洋里.互联网使得数据的流动和共享成为了可能,云计算技术的发展使数据分析向更加全面的方向迈进. 作为云计算的三种服务形式之一,PaaS似乎一直不温不火,裹足不前.Docker的出现似乎又带来了一种新的选择,而且对于开发者来说更加灵活.便捷.易用.既然用户可以直接在Docker上运行,PaaS是否还有应用场景?面对企业繁杂的应用环境,用Docker作为PaaS的替代

  • Docker 配置固定IP及桥接的实现方法

    docker默认使用bridge模式,通过网桥连接到宿主机,而容器内部的ip则从网桥所在的ip段取未用的ip.这样做一个不方便的地方在于容器内部的ip不是固定的,想要连接容器时只能通过映射到宿主机的端口,因而有很多项目使用overlay来为docker提供网络的配置,比如Pipework.Flannel.Kubernetes.Weave.opencontrail等. 想要使用overlay来为docker配置网络,需要首先了解下docker的网络模式: 一.Docker的四种网络模式 Docke

  • Docker Registry 私有仓库搭建详细步骤

    Docker  Registry 私有仓库搭建 官方已经提供了很多版本的 Linux 镜像,直接从官方仓库(Public Repositories)下载就可以了.如果考虑到安全性和速度,我们可能会想在自己局域网里架设一个私有仓库(Private Repositories)来放我们自己的镜像,Docker-Registry 正是我们需要的工具. 本次搭建 docker-registry server (dev) (v0.9.0) 添加docker用户和目录 为了安全起见,我们可以添加一个用户doc

  • Docker如何同时启动多个服务

    前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务 1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下 FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rp

  • docker 使用CMD或者ENTRYPOINT命令同时启动多个服务

    需求:django中引入了celery,当启动django项目时,如何将celery服务也启动 利用ENTRYPOINT命令启动 一.编写Dockerfile文件 FROM centos:7 RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 ENV LC_ALL zh_CN.UTF-8 COPY ./hrms $CODE_DIR/hrms/ COPY ./run $CODE_DIR/run/ RUN chmod a+x $CODE_DIR/run/* R

  • 详解基于docker搭建lanproxy内网穿透服务

    文档更新说明 2018年04月06日 v1.0 内网穿透相信是后端开发者经常遇到的需求,可是怎么实现呢?其实有现成的服务:花生壳.ngrok等,但是,最近花生壳宣布,免费版的内网穿透将不支持80端口映射了,而免费版的ngrok也不够稳定,于是乎,我就开始需找新的解决方案了 本文使用了docker.nginx,要全部搞懂的话需要一定的后端基础(当然,基本上入个门就可以了),个人认为还是有一定阅读门槛的,但是你如果只是想把服务搭建起来,按照步骤来做是不难的 1.概述 内网穿透其实就是用服务器做一个中

  • 解决docker run时候启动两个占有不同端口的问题

    问题描述: 在执行docker run -p 19918:19918/tcp -v /etc/localtime:/etc/localtime时候后 docker ps查看有启动19918和另一个端口,并在注册中心未发现执行程序. 问题分析: 启动的另一端口为之前配置的,猜测为run时执行了刚刚build的项目外执行了之前的容器. 解决方式: docker images查看容器,删除相同的以及两个执行出的端口容器.再次执行显示成功! 总结: 命名规范,及时清除不必要的容器. 补充知识:docke

  • docker 基于golang镜像构建 ssh服务的方法

    下面给大家介绍下docker 基于golang镜像构建 ssh服务的代码,具体内容如下所示: # golang:latest镜像 FROM ee23292e2826 # 作者 MAINTAINER dechao@qq.com # 添加Golang环境变量 ENV GOPROXY https://goproxy.cn,direct ENV GO111MODULE on # 配置apt-get源 ADD sources.list /etc/apt/ # 更新apt-get源 安装ssh服务 修改ro

  • Docker Compose快速部署多容器服务实战的实例详解

    目录 1 什么是Docker Compose 2 安装Docker Compose 3 Docker Compose文件格式的简单介绍 4 Docker Compose常用命令 5 使用Docker Compose一键部署Spring Boot+Redis实战 5.1 构建应用 5.1.1 Spring Boot项目 5.1.2 Redis配置文件 5.2 打包应用并构建目录 5.2.1 打包Spring Boot项目 5.2.2 上传redis.conf配置文件 5.3 编写Dockerfil

  • docker修改未启动容器的配置信息操作

    之前一开始用docker并没有使用dockerfile或者docker-compose编排服务,直接使用docker run启动的容器,结果一不小心配置文件出错或者给停掉了那就导致服务再也启动不了了,这时候不要着急,使用以下办法既可以修改配置文件还可以修改启动容器的端口信息和其他配置信息,这样容器中的文件和数据还是存在的. 1.修改容器内的配置信息 这里以nginx启动为例子,比如用docke run创建了一个nginx的容器,结果因为使用docker exec ** bash 修改了内部ngi

  • docker maven plugin快速部署微服务的详细流程

    目录 一.前置条件 二.部署方法 1.开放远程部署端口 3.修改application文件 4.打包上传并创建镜像 5.启动容器 三.总结 一.前置条件 linux下装好docker并启动 1.使用国内 daocloud 一键安装命令 curl -sSL https://get.daocloud.io/docker | sh 2.启动docker systemctl start docker.service 二.部署方法 1.开放远程部署端口 <1>修改 docker 的配置文件 /lib/s

  • ubuntu22通过docker安装wechat启动后无界面的问题及解决方法

    首先说明:该种方法可能不适用与大部分,只是自己摸索出的一种可能. 问题描述:ubuntu22.04在通过docker安装好wechat后,通过拉取源进行安装的,同时我的Vscode也识别到安装了docker,于是也顺便安装了docker的插件,可以看到确实安装了betswu/wechat,但是在使用一段时间后,又发现执行命令"sudo docker start/stop docker"时,wechat正常启动,但是无打开界面,尝试了网上多种方法,均不能解决我的需求,于是便开始针对逐步暴

  • Docker如何进入启动容器

    本文介绍了Docker如何进入启动容器,分享给大家,具体如下: 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作. 这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等. 1.attach命令 attach命令是Docker自带的命令,命令格式为: docker attach [–detach-keys[=[]]] [–no-stdin] [–sig-proxy[=true]] Container

随机推荐