Docker 封裝 LXC,提供進程級隔離與分層檔案系統,極適合資料庫測試與微服務部署。本文示範自定義 Dockerfile 建立 MariaDB 映像並批量啟動容器。
FROM ubuntu MAINTAINER erkan yanar <erkan.yanar@linsenraum.de> ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get install -y python-software-properties RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db RUN add-apt-repository 'deb https://mirror2.hs-esslingen.de/mariadb/repo/10.0/ubuntu precise main' RUN apt-get update && apt-get install -y mariadb-server RUN echo "[mysqld]" > /etc/mysql/conf.d/docker.cnf \ && echo "bind-address = 0.0.0.0" >> /etc/mysql/conf.d/docker.cnf \ && echo "innodb_flush_method = O_DSYNC" >> /etc/mysql/conf.d/docker.cnf \ && echo "skip-name-resolve" >> /etc/mysql/conf.d/docker.cnf \ && echo "init_file = /etc/mysql/init" >> /etc/mysql/conf.d/docker.cnf RUN echo "GRANT ALL ON *.* TO supa@'%' IDENTIFIED BY 'supa';" > /etc/mysql/init EXPOSE 3306 USER mysql ENTRYPOINT ["mysqld"]
# 構建映像 cat Dockerfile | docker build -t mysql . # 批量啟動 51 個容器,映射端口 5010-5060 time for i in $(seq 10 60); do docker run -d -p 50$i:3306 mysql; done
docker ps | grep mysqld | wc -l # 輸出 51 docker ps | head -2 # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 6d3a5181cd56 mysql /bin/sh -c mysqld 1 min ago Up 1 min 0.0.0.0:5060->3306/tcp lonely_pare