为了账号安全,请及时绑定邮箱和手机立即绑定

Docker容器实战系列操作一~建立属于自己的数据库

标签:
Docker

经过多篇的命令学习,我们已经了解了基本上所有的命令,如今开始第二篇我们的实战操作。这次是操作数据库命令,好了也是两种方式一种是简单的命令行,第二种还是我们的DockerFIle文件操作。
当然首先还是看下我们简单的指令详解,巩固以下再去学习,这样让我们更加的熟悉与了解。

命令行的的操作

  1. 首先从仓库中获取我们的数据库。

docker pull mysql 
docker run -it --name  test-mysql -d mysql /bin/bash  //该命令会自己先检查镜像是否存在,不存在会进行下载。然后在进入到容器中。
  1. 启动容器

docker run -it --name test-mysql -d mysql  /bin/bash  //但是在这里会出现问题因为我们的mysql验证的问题需要进行账户和密码的操作 在这步进行设置好,当然也有编码的问题在这里也得设置。
//该命令就改变成为
docker run -p 3306:3306 --name test-mysql -v /home/ruiqi/Desktop/disk/mysql/conf/:/etc/mysql/my.cnf -v /home/ruiqi/Desktop/disk/mysql/logs:/logs -v /home/ruiqi/Desktop/disk/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    
    命令说明:
    
        -p 3306:3306:将容器的3306端口映射到主机的3306端口
    
        -v ~/mysql/conf/my.cnf:/etc/mysql/my.cnf:将主机~/mysql/conf/my.cnf挂载到容器的/etc/mysql/my.cnf (这里不额外加配置可以不用配置,我这边没有配置)
    
        -v ~/mysql/logs:/logs:将主机~/mysql/logs目录挂载到容器的/logs
    
        -v ~/mysql/data:/mysql_data:将主机~/mysql/data目录挂载到容器的/mysql_data 进行参数的挂载。保证容器挂了 ,数据还在
      
        -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
  1. 如果上面执行启动容器报错出现已存在的字眼,我们需要用其他命令来启动

docker start test-mysql //该命令启动已停止的容器 。
docker stop test-mysql //该命令停止已启动的容器
  1. 上面步骤设置好容器后,进入容器

docker exec -it test-mysql /bin/bash //进入容器就可以跟更平常操作数据库一样操作了

DockerFIle文件操作数据库

FROM debian:stretch-slim# 用于增加工作组和用户组RUN groupadd -r mysql && useradd  -r -g mysql mysql
RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/*

ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& gpgconf --kill all \
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
RUN mkdir /docker-entrypoint-initdb.d

RUN apt-get update && apt-get install -y --no-install-recommends \# for MYSQL_RANDOM_ROOT_PASSWORD
        pwgen \# for mysql_ssl_rsa_setup
        openssl \# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:# File::Basename# File::Copy# Sys::Hostname# Data::Dumper
        perl \
    && rm -rf /var/lib/apt/lists/*

RUN set -ex; \# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
    key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \    export GNUPGHOME="$(mktemp -d)"; \
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
    gpg --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
    gpgconf --kill all; \
    rm -rf "$GNUPGHOME"; \
    apt-key list > /dev/null# 设置环境变量    ENV MYSQL_MAJOR 5.7
ENV MYSQL_VERSION 5.7.23-1debian9

RUN echo "deb http://repo.mysql.com/apt/debian/ stretch mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
RUN { \        echo mysql-community-server mysql-community-server/data-dir select ''; \        echo mysql-community-server mysql-community-server/root-pass password ''; \        echo mysql-community-server mysql-community-server/re-root-pass password ''; \        echo mysql-community-server mysql-community-server/remove-test-db select false; \
    } | debconf-set-selections \
    && apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
    && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
    && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \# ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
    && chmod 777 /var/run/mysqld \# comment out a few problematic configuration values
    && find /etc/mysql/ -name '*.cnf' -print0 \
        | xargs -0 grep -lZE '^(bind-address|log)' \
        | xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/' \# don't reverse lookup hostnames, they are usually another container
    && echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf# 设置一个挂载点VOLUME /var/lib/mysql# 将本目录下的脚本文件复制到COPY docker-entrypoint.sh  /entrypoint.sh
COPY helthcheck.sh /healthcheck.sh# 指定镜像的默认入坑了楼ENTRYPOINT ["/entrypoint.sh"]# 暴露端口EXPOSE 3306 3306#执行CMD ["mysqld"]
  1. 该DockerFile是直接照搬github上的mysql5.7DockerFile,我用来主要是练习其命令。大家可以夺取github上多看。

  2. 执行脚本文件也参照文件中mysql5.7DockerFile
    3.进行doocker build -t mysql:test .

    webp

    等待执行完毕即可

  3. 剩下的操作跟上面就一直,可以参考上面所演示的内容启动docker.

  4. 实战的目的是让我们自己熟悉命令操作,并且掌握住,经常看别人的操作代码,也会提高我们自己的操作技能。



作者:LuckQI
链接:https://www.jianshu.com/p/ff4f282ab4ca


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
数据库工程师
手记
粉丝
42
获赞与收藏
202

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消