首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker For Test 系列三:镜像管理

Docker For Test 系列三:镜像管理

作者头像
测试邦
发布2019-07-24 11:12:30
5770
发布2019-07-24 11:12:30
举报
文章被收录于专栏:测试邦测试邦

以mysql为例:

从docker架构中得知,docker镜像可以从docker镜像仓库下载,类似于maven中下载相关jar包,docker的镜像仓库:Docker Hub(https://hub.docker.com)

1、镜像查询

Docker search mysql

查询结果:

INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED

docker.io docker.io/mysql MySQL is a widely used, open-source relati... 5122 [OK]

docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 1588 [OK]

docker.io docker.io/mysql/mysql-server OptimizedMySQL Server Docker images. Crea... 358 [OK]

docker.io docker.io/percona Percona Server is a fork ofthe MySQL rela... 297 [OK]

docker.io docker.io/hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 70

docker.io docker.io/zabbix/zabbix-server-mysql Zabbix Server withMySQL database support 62 [OK]

docker.io docker.io/centurylink/mysql Imagecontaining mysql. Optimized to be li... 53 [OK]

docker.io docker.io/sameersbn/mysql 47 [OK]

docker.io docker.io/zabbix/zabbix-web-nginx-mysql Zabbix frontend basedon Nginx web-server ... 35 [OK]

docker.io docker.io/tutum/mysql Base docker image to run a MySQL database ... 27

docker.io docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 16 [OK]

docker.io docker.io/schickling/mysql-backup-s3 Backup MySQL to S3(supports periodic back... 16 [OK]

docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQLdatabase server 12

docker.io docker.io/linuxserver/mysql A Mysqlcontainer, brought to you by Linux... 12

docker.io docker.io/openshift/mysql-55-centos7 DEPRECATED: ACentos7 based MySQL v5.5 ima... 6

docker.io docker.io/centos/mysql-56-centos7 MySQL 5.6 SQL databaseserver 5

docker.io docker.io/dsteinkopf/backup-all-mysql backup all DBs in amysql server 3 [OK]

docker.io docker.io/frodenas/mysql ADocker Image for MySQL 3 [OK]

docker.io docker.io/circleci/mysql MySQLis a widely used, open-source relati... 2

docker.io docker.io/ansibleplaybookbundle/rhscl-mysql-apb An APB which deploys RHSCLMySQL 0 [OK]

docker.io docker.io/astronomerio/mysql-sink MySQL sink 0 [OK]

docker.io docker.io/astronomerio/mysql-source MySQL source 0 [OK]

docker.io docker.io/cloudfoundry/cf-mysql-ci Image used in CIof cf-mysql-release 0

docker.io docker.io/cloudposse/mysql Improved`mysql` service with support for ... 0 [OK]

docker.io docker.io/jenkler/mysql Docker Mysql package 0

2、创建镜像

2.1、拉取镜像(docker pull)

docker pull mysql:tag

Tag的获取方式:直接从docker hub上获取

Docker pull mysql:latest

下载镜像

2.2、dockerFile创建镜像(docker build)

在宿主机/mysql/dockerfile目录下创建dockerfile文件

Mkdir –p /mysql/docker

Cd /mysql/dockerfile

Touch Dockerfile

Dockerfile文件内容:

#由于本机已经pull了tag为latest的mysql镜像,以mysql:latest镜像为基础

ROM mysql:latest

#设置免密登录

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

#将所需文件放到容器中

COPY setup.sh /mysql/setup.sh

COPY schema.sql /mysql/schema.sql

COPY privileges.sql /mysql/privileges.sql

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

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

和Dockerfile相同目录下的三个文件

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 </mysql/schema.sql

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

sleep 3

echo `service mysql status`

#重新设置mysql密码

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

mysql </mysql/privileges.sql

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

#sleep 3

echo `service mysql status`

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

schema.sql:

-- 创建数据库

DROP DATABASE IF EXISTS `docker_mysql`;

create database `docker_mysql` defaultcharacter 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,

PRIMARYKEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 插入数据

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

VALUES

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

privileges.sql:

use mysql;

DELETE from userwhere User='docker';

select host, userfrom user;

-- 新建可以远程访问的用户docker:

GRANT USAGE ON *.*TO 'docker'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

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

GRANT ALL PRIVILEGESON *.* TO 'docker'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

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

flush privileges;

总结:数据初始化脚本包括sql语句一定要可以重复使用的语句,去重操作一定要有,否则后面容器做启停操作的时候会导致容器无法正常运行退出

创建镜像:

docker build -t qh-mysql . 使用当前目录的docker File创建镜像

2.3、从容器生成镜像(dockercommit)

第一步:查看我们本地的镜像:

Docker images

只有一个mysql的镜像,详细信息如下

第二步:查看本地的容器

有一个在运行的mysql容器,id为:f25a0d544a82

第三步:使用该容器创建新的mysql镜像-mysql-new

Commit命令语法:

dockercommit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停

详细命令:docker commit -a"qh" -m "my new mysql image" f25a0d544a82 mysq-new:v1

运行结果如下:

3、查看本地镜像

docker images

4、删除镜像

dockerrmi qh-mysql(名称或者id)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试邦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、镜像查询
  • 2、创建镜像
    • 2.1、拉取镜像(docker pull)
      • 2.2、dockerFile创建镜像(docker build)
        • 2.3、从容器生成镜像(dockercommit)
        • 3、查看本地镜像
        • 4、删除镜像
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档