首页IT技术系统 › docker制作httpd/php/ssh、redis、MariaDB镜像

docker制作httpd/php/ssh、redis、MariaDB镜像

根据docker的最佳实践指引,每个服务需要独立在一个容器,所以本文将redishttp+php+sshmariaDB独立在不同的容器中。并且redisMariaDB不直接向主机映射端口,而是通过links在容器间互通,提高安全性。

注:本文只在web server上添加了ssh功能,实际中可根据需要在redis和mariaDB也添加ssh功能。

 

一、从官方仓库拉取centos镜像并客制化

1.拉取centos镜像

docker pull centos

2.运行容器

docker run -it centos /bin/bash

3.在容器里更改yum源和epel源为阿里云的。

curl http://mirrors.aliyun.com/repo/Centos-7.repo | grep -v 'mirrors.aliyuncs.com' > /etc/yum.repos.d/CentOS-Base.repo

curl http://mirrors.aliyun.com/repo/epel-7.repo  | grep -v 'mirrors.aliyuncs.com' > /etc/yum.repos.d/epel-7.repo

yum clean all
yum makecache

注:新建的容器默认是连接到bridge网络的,只主机开启ipv4_forward就可以共享上机网络上网。

4.退出容器、查看容器ID,生成新的镜像:

exit

docker ps -a

docker commit -m "Change source of yum and epel" -a "XinLuLiCheng" 9ca6eb3732de mycentos

#其中9ca6eb3732de  即为上一条命令查到的容器ID

此时可通过docker images 查看到有一个新的镜像mycentos

 

二、制作redis镜像、运行容器

1.创建Dockerfile

 mkdir docker-redis && cd docker-redis

vim Dockerfile

FROM mycentos
MAINTAINER XinLuLiCheng(too2.net)
RUN yum install redis -y
EXPOSE 6379
# 6379为redis的默认端口号,注意Dockerfile中的注释必须单独一行并以#开头
ENTRYPOINT  ["/usr/bin/redis-server"]

2.生成镜像

docker build -t myredis . 

注意最后有一个“.”

编译完成后可通过docker images查到新生成的myredis镜像

3.运行容器

docker run –name redis -d myredis

注:其中-d为以daemon运行。

 

三、制作mariaDB镜像,运行容器

1.创建Dockerfile

cd .. &&  mkdir docker-mariaDB && cd docker-mariaDB

vim Dockerfile

FROM mycentos
MAINTAINER XinLuLiCheng(too2.net)
RUN yum install -y \
    mariadb \
    mariadb-server
RUN echo "mysql_install_db --user=mysql --datadir=/var/lib/mysql" > /tmp/config \
    && echo "mysqld_safe &" >> /tmp/config \
    && echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config \
    && echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config \
    && bash /tmp/config \
    && rm -f /tmp/config
EXPOSE 3306
CMD mysqld_safe

2.生成镜像

docker build -t mymariadb . 

编译完成后可通过docker images查到新生成的mymariadb镜像

3.运行容器

docker run –name mariadb  -p 3306:3306 -d mymariadb

 

 

四、制作web镜像、运行容器

1.创建Dockerfile

cd .. &&  mkdir docker-web && cd docker-web

vim Dockerfile

FROM mycentos
MAINTAINER XinLuLiCheng(too2.net)
RUN yum install -y \
    httpd  \
    php \
    php-mysql \
    openssh-server
RUN echo 'root:mypassword' | chpasswd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -P "" && \
    ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key  -P "" && \
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key  -P ""
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd && /usr/sbin/httpd -DFOREGROUND

#注意这里一定要加-DFOREGROUND将其提到前端,否则运行容器时会自结束退出。

# /usr/sbin/sshd 一定不能只放在前面用RUN去执行,因为进程在制作成镜像后就结束。

2.生成镜像

docker build -t myweb . 

编译完成后可通过docker images查到新生成的myweb镜像

3.运行容器

docker run –name web –link redis –link mariadb -p 80:80 -p 2222:22 -d myweb

其中–link redis 是连接redis容器,以获得访问6379端口的权限,-p 80:80为将容器的80端口映射到主要的80端口,2222:22是将虚拟机的ssh 22端口映射到主要的2222端口(因为主机自身已开启了ssh 22端口)

 此时,便可通过ssh -p 2222 root@主机IP 来访问这个容器了。

 

实际上以上的内容存在不少可以优化的地方,下次有时间的时候再专门写一篇优化的文章。

原文出自: http://blog.too2.net/?p=308
转载请注明转自:辛碌力成【http://blog.too2.net】

1 Comments.[ Leave a comment ]

  1. :smile: 😮 😎

发表评论