精华内容
下载资源
问答
  • Docker构建MySQL镜像并初始化

    千次阅读 2019-06-30 13:26:59
    文章目录Docker构建MySQL镜像并初始化Dockerfile 的一些常用语法FROMRUNCMDENVCOPYADDWORKDIREXPOSE构建自带初始化的 MySQL 镜像Dockerfile启动脚本schema.sqlprivileges.sql Docker构建MySQL镜像并初始化 使用 ...

    Docker构建MySQL镜像并初始化

    使用 docker 直接 pull MySQL 的镜像是很简单,但是有时候却需要对容器做一些初始化操作,比如挂载配置文件和初始化数据库等,这些就需要通过巧妙利用 Dockerfile 来实现。

    Dockerfile 的一些常用语法

    docker 可以通过 Dockerfile 构建新的镜像,掌握 Dockerfile 的编写,是 docker 入门学习的第一步。

    FROM

    Dockerfile 的第一条指令,指定基础镜像,即你的镜像是在什么镜像的基础上构建的。比如这里我要制作基于 MySQL 的镜像,那么就是

    FROM mysql
    

    可以在镜像后指定特定版本,如果没有,则默认 latest。

    FROM mysql:5.7.25
    

    RUN

    容器中 运行指定的命令。

    有两种命令格式。

    1. 直接跟 shell 命令。
    RUN <command>
    
    1. 调用可执行文件,支持传参调用。
    RUN ["executable", "param1", "param2"]
    

    需要注意的是,Dockerfile 中每条命令都会构建一层镜像,如有多条 RUN 命令,尽量不要拆开写成多个 RUN 命令,这会导致镜像多层、臃肿、容易出错。建议是写成一句或者放到一个 sh 文件中批量执行。

    CMD

    命令格式类似 RUN,但区别是,RUN是构建容器时就运行的命令以及提交运行结果,CMD 指定的是容器启动时执行的命令,在构建时并不运行。

    需要注意的是,RUN 可以有多个,且每个都能起作用;而 CMD 虽然也可以有多个,但是只以最后一个为准。

    ENV

    设置环境变量。

    有两种命令格式,但作用相同。

    1. 设置一对环境变量。
    ENV <key> <value>
    
    1. 设置一对或多对环境变量。
    ENV <key>=<value> ...
    

    COPY

    复制文件到容器中。

    常用命令格式

    COPY <src>... <dest>
    
    COPY ["<src>",... "<dest>"]
    

    ADD

    将文件打包进容器,可以理解为 COPY 的升级版。

    ADD <src>... <dest>
    
    ADD ["<src>",... "<dest>"]
    

    其中 ADD 的 <src> 不仅支持本地文件,还支持 url (类似 wget)。

    WORKDIR

    设置工作目录,也就是在容器中执行命令时所在的目录。

    WORKDIR <path>
    

    EXPOSE

    暴露容器监听的内部端口到外部,如果外部需要访问该内部端口,需要指定端口映射。

    EXPOSE <port>
    

    构建自带初始化的 MySQL 镜像

    Dockerfile

    首先,Dockerfile 长这样,具体的命令上面有解释。核心逻辑就是拷贝三个文件进去,然后在容器启动的时候执行 setup.sh,由 setup.sh 执行另外两个文件。

    FROM mysql:5.7.25
    
    # allow no password
    ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
    
    # copy file into container
    COPY setup.sh /mysql/setup.sh
    COPY schema.sql /mysql/schema.sql
    COPY privileges.sql /mysql/privileges.sql
    
    # exec these command when container start up
    CMD ["sh", "/mysql/setup.sh"]
    

    这里首先设置允许免密登录是为了方便后面配置,密码最后再通过 privileges.sql 来设置。

    启动脚本

    setup.sh的作用就是启动 MySQL 服务,然后执行两个 sql 文件。

    #!/bin/bash
    set -e
    
    echo '1. starting mysql...'
    service mysql start
    
    echo '2. creating database...'
    mysql < /mysql/schema.sql
    
    # set password
    echo '3. setting password....'
    mysql < /mysql/privileges.sql
    
    # check mysql status
    echo `service mysql status`
    echo '4. mysql for baobaozhuan is ready...'
    
    tail -f /dev/null
    

    schema.sql

    一些对于数据库的初始化操作可以放在这里,比如这里我们需要创建一个数据库。当然,建表,插入数据那些都是可以的。

    create database if not exists baobaozhuan;
    

    privileges.sql

    这个文件是对 MySQL 进行一些权限配置,比如设置用户密码,创建新用户,数据库授权等。

    后面两句很重要,一开始没有加上授权,结果 go server 一直连不上 docker 里面的 MySQL server。

    use mysql;
    -- new user
    set password for root@localhost = password('SYSU_baobaozhuan2019');
    -- important
    grant all on *.* to root@'%' identified by 'SYSU_baobaozhuan2019' with grant option;
    -- use privileges
    flush privileges;
    

    欢迎访问我们的项目:https://swsad-dalaotelephone.github.io/docs/


    展开全文
  • Docker构建MySQL镜像

    2019-05-29 15:08:00
    构建MySQL镜像 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfile和...

    构建MySQL镜像

     

    本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfileshell脚本实现这一过程。

     

     

    1. 创建工作目录

    [root@elk-node2 ~]# mkdir mysql

    [root@elk-node2 ~]# cd mysql/

    [root@elk-node2 mysql]# ls

    Dockerfile  privileges.sql  schema.sql  setup.sh

     

    2.1创建Dockerfile 文件

    [root@elk-node2 mysql]# vim Dockerfile

    FROM mysql:5.7

    #设置免密登录

    ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

    #将所需文件放到容器中

    COPY setup.sh /root/mysql/setup.sh

    COPY schema.sql /root/mysql/schema.sql

    COPY privileges.sql /root/mysql/privileges.sql

    #设置容器启动时执行的命令

    CMD ["sh", "/root/mysql/setup.sh"]

     

    2.2 mysql权限设置命令privileges.sql

     

    [root@elk-node2 mysql]# vim privileges.sql 

    use mysql;

    select host, user from user;

    -- 因为mysql版本是5.7,因此新建用户为如下命令:

    create user docker identified by '123456';

    -- docker_mysql数据库的权限授权给创建的docker用户,密码为123456

    grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;

    -- 这一条命令一定要有:

    flush privileges;

     

    2.3需要导入数据的mysql脚本命令schema.sql

    [root@elk-node2 mysql]# vim schema.sql

    -- 创建数据库

    create database `docker_mysql` default character set utf8 collate utf8_general_ci;

     

    use docker_mysql;

     

    -- 建表

    DROP TABLE IF EXISTS `user`;

     

    CREATE TABLE `user` (

     `id` bigint(20) NOT NULL,

     `created_at` bigint(40) DEFAULT NULL,

     `last_modified` bigint(40) DEFAULT NULL,

     `email` varchar(255) DEFAULT NULL,

     `first_name` varchar(255) DEFAULT NULL,

     `last_name` varchar(255) DEFAULT NULL,

     `username` varchar(255) DEFAULT NULL,

     PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

     

    -- 插入数据

    INSERT INTO `user` (`id`, `created_at`, `last_modified`, `email`, `first_name`, `last_name`, `username`)

    VALUES

      (0,1490257904,1490257904,'john.doe@example.com','John','Doe','user');

    因为是测试,所以随便写了一个建表语句,如果是真实项目肯定不止这一张表,直接将建表语句覆盖过来就好。

     

     

    2.4编写容器启动脚本setup.sh

    [root@elk-node2 mysql]# vim setup.sh

    #!/bin/bash

    set -e

     

    #查看mysql服务的状态,方便调试,这条语句可以删除

    echo `service mysql status`

     

    echo '1.启动mysql....'

    #启动mysql

    service mysql start

    sleep 3

    echo `service mysql status`

     

    echo '2.开始导入数据....'

    #导入数据

    mysql < /root/mysql/schema.sql

    echo '3.导入数据完毕....'

     

    sleep 3

    echo `service mysql status`

     

    #重新设置mysql密码

    echo '4.开始修改密码....'

    mysql < /root/mysql/privileges.sql

    echo '5.修改密码完毕....'

     

    #sleep 3

    echo `service mysql status`

    echo `mysql容器启动完毕,且数据导入成功`

     

    tail -f /dev/null

     

    3.Dockerfile生成镜像

    [root@elk-node2 mysql]# docker build -t 13/docker-mysql

     

    执行docker images查看该镜像是否存在于镜像列表中

     [root@elk-node2 mysql]# docker images

    REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE

    13/docker-mysql                 latest              58bab73950a9        7 minutes ago       373 MB

     

     

    4运行容器并将端口映射到本地的13306端口

    [root@elk-node2 mysql]# docker run -d -p 13306:3306 13/docker-mysql

    02f72e74a59fa84de40c077bf601901d4916e2209b0b4f7e41ae57885c410d14

    [root@elk-node2 mysql]# docker ps

    02f72e74a59f        13/docker-mysql     "docker-entrypoint..."   33 seconds ago      Up 32 seconds       33060/tcp, 0.0.0.0:13306->3306/tcp

     

    1. 验证 这个地方ID号需要看清,我这里是02f72e74a59f

    前文中创建了docker_mysql数据库,并在此数据库中创建了user表,同时将数据库的连接授权赋予了新建的docker用户,因此验证过程为:

    使用docker用户登录数据库:mysql -u docker -p

    输入密码123456通过登录验证

    切换至docker_mysql数据库:use docker_mysql;

    查看数据库中的表:show tables;

    查看表中的数据:select * from user;

     

    [root@elk-node2 mysql]# docker exec -it 02f /bin/bash

    root@02f72e74a59f:/#  

    root@02f72e74a59f:/# mysql -u docker -p

    Enter password: 123456

     

    Welcome to the MySQL monitor.  Commands end with ; or \g.

    Your MySQL connection id is 4

    Server version: 5.7.26 MySQL Community Server (GPL)

    mysql> use docker_mysql;

    Reading table information for completion of table and column names

    You can turn off this feature to get a quicker startup with -A

     

    Database changed

    mysql> show tables;

    +------------------------+

    | Tables_in_docker_mysql |

    +------------------------+

    | user                   |

    +------------------------+

    1 row in set (0.00 sec)

     

    mysql> select *from user;

    +----+------------+---------------+----------------------+------------+-----------+----------+

    | id | created_at | last_modified | email                | first_name | last_name | username |

    +----+------------+---------------+----------------------+------------+-----------+----------+

    |  0 | 1490257904 |    1490257904 | john.doe@example.com | John       | Doe       | user     |

    +----+------------+---------------+----------------------+------------+-----------+----------+

    1 row in set (0.00 sec)

    转载于:https://www.cnblogs.com/zc1741845455/p/10943962.html

    展开全文
  • 使用Docker构建MySQL

    2019-04-12 16:15:29
    首先现在mysql镜像:docker pull mysql 启动mysql: docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/dock....

    构建MySQL

    1. 首先现在mysql镜像:docker pull mysql
    2. 启动mysql:
    docker run -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/conf:/etc/mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7.22
    
    1. 删掉启动mysql代码上第二句从新启动mysql:
    docker run -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7.22
    
    1. 以交互形式进入mysql:docker exec -it mysql bash
    2. 将max_allowed_packet=128m追加到/etc/mysql/mysql.conf.d目录下的mysql.cnf中:
      echo "max_allowed_packet=128" >> mysql.cnf
    3. 退出容器到主机:重启mysql:docker restart mysql
    4. 将容器的文件复制到宿主机上:在主机的/usr/local/docker/mysql/conf 目录下:将容器的文件复制过来:docker up mysql:/etc/mysql
    5. 将mysql目录下的文件移动到上级目录:mv *.* ..
    6. 删除mysql文件夹:rm -fr mysql
    7. 先将之前的mysql容器停掉:docker stop mysql
    8. 删除/usr/local/docker/mysql目录下的data/删除:rm -fr data/
    9. 重新启动mysql:docker restart mysql
    10. 此时会连不上数据库:删除已启动的mysql:docker rm -f mysql
    11. 然后启动mysql
    12. 此时可连接mysql
    13. 数据卷配置成功
    展开全文
  • docker 构建 mysql 环境

    2019-09-17 17:04:55
    mysql 镜像 docker pull mysql:5.7 docker-mysql-image 在 /opt 下创建 my.cnf cd /opt mkdir -p docker/mysql/conf mkdir -p docker/mysql/data cd docker/mysql/conf vim my.conf my.conf中录入的内容如下 ...

    mysql 镜像

    docker pull mysql:5.7 docker-mysql-image

    在 /opt 下创建 my.cnf

    cd /opt
    mkdir -p docker/mysql/conf
    mkdir -p docker/mysql/data
    cd docker/mysql/conf
    vim my.conf
    

    my.conf中录入的内容如下

    [mysqld]
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    

    docker run

    docker run -d -p 3306:3306 --restart always --privileged=true --name mysql001 -e MYSQL_USER="zxacc" -e MYSQL_PASSWORD="zxacc123$" -e MYSQL_ROOT_PASSWORD="root123$" -v /opt/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /opt/docker/mysql/data:/var/lib/mysql 383867b75fd2
    

    docker ps 如下
    在这里插入图片描述

    客户端用root连接

    授权账号 zxacc grant all on *.* to 'zxacc'@'%'

    客户端用zxacc连接

    创建数据库
    CREATE DATABASE IF NOT EXISTS test_zxacc DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

    参考

    Docker安装MySql-挂载外部数据和配置
    Docker搭建MySQL服务,挂载数据、配置和日志
    【Docker】:使用docker安装mysql,挂载外部配置和数据
    mysql导入报错 [Err] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci’
    访问网站出现Access denied for user ‘root’@’%’ to database ‘xxx’

    展开全文
  • Docker安装mysql镜像

    2019-04-23 17:10:24
    1.拉取mysql镜像 docker pull mysql:8.0 2.查看镜像,找到mysql8.0的镜像id docker images 3.创建容器 docker create -it --name mysql8.0 镜像id /bin/bash 4.启动容器 docker start -ai mysql8.0 ...
  • Docker关于mysql镜像的使用

    千次阅读 2018-04-05 23:49:28
    获取镜像 可以通过运行以下命令实现: ...# 获取最新版本的mysql镜像 $ sudo docker pull mysql:latest 了解镜像mysql镜像 # docker history [OPTIONS] IMAGE查看镜像分层 $ sudo docker history mysql IMAGE ...
  • docker构建mysql

    2021-03-04 22:57:50
    sudo docker search mysql sudo docker pull mysql:5.7 启动镜像 # --name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行 sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/...
  • Docker构建自定义镜像

    千次阅读 2019-10-13 11:20:39
    传统的 项目部署 方案非常麻烦,一台新的...利用Docker构建自定义的镜像,在镜像里装上项目需要的所有东西,每次部署只需要通过镜像创建一个容器运行即可,做到 一劳永逸。 安装docker Docker 要求 CentOS 系统的...
  • docker构建禅道镜像

    2018-04-26 17:33:10
    可以直接使用Dockfile文件进行构建构建完成后,自己在启动一个mysql容器即可
  • Docker 构建自定义镜像

    2020-05-04 17:08:00
    为什么要构建自定义的镜像? 官方镜像使用的都是默认配置,比如mysql容器使用的官网的mysql,需要自己修改mysql的配置文件、设置用户名和密码 部署服务,比如在tomcat容器中部署用户服务,把部署好的tomcat容器打包...
  • Docker构建MySQL5.7

    2020-04-06 11:54:34
    1.导入mysql5.7镜像docker [root@master_150 ~]# docker load -imysql-5.7.tar 2.运行容器 [root@master_150 ~]# docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 -p3306...
  • 1.拉取mysql镜像(理解为下载mysql压缩文件) docker pull mysql 2.创建mysql容器(理解为买了一台服务器、并将mysql压缩文件部署在了服务器上) docker run --name mysqldb -e MYSQL_ROOT_PASSWORD=123456 -d ...
  • 使用docker制作Mysql镜像

    千次阅读 2019-03-08 10:48:00
    通过Dockerfile创建mysql镜像,使用的mysql软件包为mariadb二进制分发版,最终在宿主机启动mysql容器从而能在mysql容器外部访问mysql服务。 宿主机IP:172.20.236.106 宿主机操作系统:CentOS7.5(x86_64) 宿...
  • docker构建国内镜像服务

    万次阅读 2018-03-07 13:14:50
    在国内想要下载镜像比较困难,因此很多公司都构建自己的私有仓库。如何搭建私有仓库,请参考《docker私有仓库从无到有》。然而即使私有仓库服务构建完成,但是里面没有镜像,一样很苦恼。今天介绍一下如何利用国内云...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,541
精华内容 7,416
关键字:

docker构建mysql镜像

mysql 订阅