1、過程說明mysql
經過Dockerfile建立mysql鏡像,使用的mysql軟件包爲mariadb二進制分發版,最終在宿主機啓動mysql容器從而能在mysql容器外部訪問mysql服務。linux
宿主機IP:172.20.236.106 sql
宿主機操做系統:CentOS7.5(x86_64)docker
宿主機內核版本:3.10.0-327.el7.x86_64centos
Dockerfile相關socket
Dockerfile位置:/root/dockerfile/Dockerfileoop
MariaDB鏡像位置:/root/dockerfile/mariadb-10.1.35-linux-x86_64.tar.gzui
MariaDB所需依賴包及位置:/root/dockerfile/libaio-0.3.109-13.el7.x86_64.rpmthis
Dockerfile啓動腳本:/root/dockerfile/setup.shspa
一、Dockerfile
# This dockerfile uses the centos image # VERSION # Author: JianJie # Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first line FROM centos:latest # Maintainer: docker_user <docker_user at email.com> (@docker_user) MAINTAINER JianJie jie.jian@transwarp.cn # Command to update the image WORKDIR /root ENV MYSQL_DATA_DIR=/mydata/data ENV MYSQL_USER=mysql ENV MYSQL_EXTRACT_DIR=/usr/local ENV MYSQL_PORT=3306 COPY libaio-0.3.109-13.el7.x86_64.rpm $MYSQL_EXTRACT_DIR COPY mariadb-10.1.35-linux-x86_64.tar.gz $MYSQL_EXTRACT_DIR COPY setup.sh /root RUN chmod +x /root/setup.sh RUN mkdir -p $MYSQL_DATA_DIR && cd $MYSQL_EXTRACT_DIR && yum install -y libaio-0.3.109-13.el7.x86_64.rpm && \ echo "Unpacking mysql ..." && tar xf mariadb-10.1.35-linux-x86_64.tar.gz && \ ln -sf mariadb-10.1.35-linux-x86_64 mysql && rm -rf mariadb-10.1.35-linux-x86_64.tar.gz RUN groupadd -r -g 306 mysql && useradd -r -g 306 -u 306 mysql && cd $MYSQL_EXTRACT_DIR/mysql && \ chown -R mysql:mysql ./* && chown -R mysql:mysql $MYSQL_DATA_DIR RUN cd $MYSQL_EXTRACT_DIR/mysql && cp support-files/mysql.server /etc/rc.d/init.d/mysqld && \ chkconfig --add mysqld && chkconfig mysqld on && echo "export PATH=$MYSQL_EXTRACT_DIR/mysql/bin:$PATH" >> /etc/profile.d/mysql.sh && \ source /etc/profile.d/mysql.sh RUN mkdir -p /etc/mysql && cd $MYSQL_EXTRACT_DIR/mysql && cp support-files/my-large.cnf /etc/mysql/my.cnf && \ sed -i '/\[mysqld\]/a \datadir = '"$MYSQL_DATA_DIR"'\ninnodb_file_per_table = on\nskip_name_resolve = on' /etc/mysql/my.cnf RUN yum clean all EXPOSE 3306 CMD ["/root/setup.sh"]
二、setup.sh
#!/bin/sh chown -R mysql:mysql /mydata/data cd /usr/local/mysql/scripts && ./mysql_install_db --user=mysql --datadir=/mydata/data --socket=/tmp/mysql.sock --pid-file=/mydata/data/mysqld.pid --log-error=/mydata/data/mysqld.log --basedir=/usr/local/mysql cd /usr/local/mysql/bin && ./mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data --socket=/mydata/data/mysql.sock # sleep 5 # mysql < /root/password.sql
三、libaio-0.3.109-13.el7.x86_64.rpm
3、製做Dockerfile步驟
製做Dockerfile步驟:
mkdir -p /root/dockerfile // 建立Dockerfile目錄
將官網下載的MariaDB二進制安裝包下載至Dockerfile目錄:/root/dockerfile;
將MariaDB所需依賴包libaio-0.3.109-13.el7.x86_64.rpm下載至至Dockerfile目錄:/root/dockerfile;
編寫Dockerfile和Dockerfile啓動腳本setup.sh;
ls -l /root/dockerfile
根據Dockerfile構建mysql鏡像:
docker build -t docker-user/mysql:v1 /root/dockerfile
構建Dockerfile過程:
成功經過Dockerfile構建mysql鏡像:
查當作功構建的mysql鏡像:
啓動mysql容器:
docker run -d -p 13306:3306 -v /hadoop/mysql:/mydata/data docker-user/mysql:v1
說明:
-p參數用於將容器內mysql暴露的3306端口映射至本地主機的13306端口;-v參數將容器中mysql的數據目錄掛載至本地主機的/hadoop/mysql目標。
mysql -P 13306 -S /hadoop/mysql/mysql.sock
在本地主機鏈接mysql服務: