Xtrabackup恢复时报错’Error: datadir must be specified’

通过xtrabackup进行恢复的时候报错

/opt/percona-xtrabackup-2.4.4-Linux-x86_64/bin/innobackupex –defaults-file=/data/opt/mysql02/db_bak/bak/2018-01-03_03-00-05/my.conf /data/opt/mysql02/db_bak/bak/2018-01-03_03-00-05/ –copy-back

xtrabackup Error: datadir must be specified

报错原因:

指定的参数文件和备份文件在相同的目录下面

解决方法:

将参数文件存放在备份文件之外的目录下面

/opt/percona-xtrabackup-2.4.4-Linux-x86_64/bin/innobackupex –defaults-file=/etc/my_01.cnf –apply-log /data/opt/mysql02/db_bak/bak/2018-01-03_03-00-05/

Xtrabackup 恢复Mariadb单个表

1、安装 mysql 备份工具 Percona XtraBackup

http://www.cndba.cn/leo1990/article/2488

2、恢复单个表说明

1). 针对InnoDB表恢复

2). 开启了参数innodb_file_per_table 此参数修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间

3、为备份建立一个只有备份权限的用户

MariaDB [(none)]> create user 'dbbackup'@'%' identified by '123456';
MariaDB [(none)]> grant reload,lock tables,replication client,create tablespace,process,super on *.* to dbbackup@'%' ;
MariaDB [(none)]> grant create,insert,select on percona_schema.* to dbbackup@'%' ;
MariaDB [(none)]> flush privileges;

4、创建一个测试,往里面插入数据后进行备份:

MariaDB [cndba]> create table test(id int);
Query OK, 0 rows affected (0.02 sec)

MariaDB [cndba]> insert into test values(10),(20),(30);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [cndba]> select * from tb1;
ERROR 1146 (42S02): Table 'cndba.tb1' doesn't exist
MariaDB [cndba]> select * from test;
+------+
| id   |
+------+
|   10 |
|   20 |
|   30 |
MariaDB [cndba]> show create table test/G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.03 sec)

如果忘记表结构可以安装工具:mysql-utilities,其中mysqlfrm可以读取表结构。

进行mysql-utilities安装:

yum install mysql-utilities -y

查看表结构

[[email protected] yum.repos.d]# mysqlfrm --diagnostic /backup/2018-01-12_00-10-40/cndba/test.frm

5、xtrabackup备份数据库

[[email protected] yum.repos.d]# innobackupex --host=localhost --user=dbbackup --password=123456 /backup/

6、准备apply-log

[[email protected] backup]# innobackupex --apply-log --export /backup/2018-01-12_00-10-40/

7 、删除表

MariaDB [cndba]> drop table test;
Query OK, 0 rows affected (0.04 sec)

MariaDB [cndba]> show create table test/G
ERROR 1146 (42S02): Table 'cndba.test' doesn't exist

8、创建表

MariaDB [cndba]> CREATE TABLE `test` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

9、丢弃表空间

MariaDB [cndba]> ALTER TABLE test DISCARD TABLESPACE;

10、拷贝备份目录中的ibd,cfg,exp 到mysql的datadir目录

[[email protected] cndba]# cp /backup/2018-01-12_00-10-40/cndba/test.{ibd,exp,cfg} /data//mysql/cndba/
赋值权限
[[email protected] cndba]# chown -R mysql.mysql /data/mysql/cndba/

11、导入表空间

MariaDB [cndba]> alter table test import tablespace;

12、表被还原

MariaDB [cndba]> select * from test;
+------+
| id   |
+------+
|   10 |
|   20 |
|   30 |
+------+

LNMP下修改 WordPress 上传文件大小限制

摘要

这个设置对于不限流和服务器硬盘够大的网站来说还是很有用处的,特别是对于一些高清视频,放在第三方网站上引用的话经常会被添加”广告”的,通过上述的办法上传到自己服务器上的视频文件就不存在这个问题了,配合 CDN 的话,用户端访问播放也是毫无压力的。

在使用 WordPress 的时候,不知道大家有没有用到上传大容量文件需求,最近明月再给公司的网站上上传一些高清MP4 视频文件的时候就碰到这样的问题了, WordPress 默认限制可上传单个媒体文件的大小为50MB 的,对于MP4 视频文件来说这个50 MB 真的是属于”毛毛雨”的级别了,稍微达到”高清”级的MP4 视频10分钟以内的占用量都在100MB 以上了。

未分类

对于我们个人博客来说基本上是很少有这方面的需求的,但是对于企业公司网站还别说真的不保证啥时候会碰到的这个需求的。于是,只有求助于谷姐和度娘了,结果找到的资料依然是”乱”,基本上很多都是各说各的,并且大部分是针对 Apache 的。总之,很多搜索到的资料照着做的话都没有能成功上传的,最后没有办法只能是拼凑各个资料后来验证了,还好,最终让我给”拼凑”出在LNMP环境下的解决办法了。

这个解决办法其实很简单,就是通过修改LNMP里PHP的php.ini文件里的上传文件限制参数和Nginx里对应站点的配置文件里添加上传文件参数来实现的,也就是说只需要修改两个VPS/云服务器上的文件即可,今天明月就分享给大家,希望可以帮到有此需求的站长们。

修改LNMP环境下PHP的php.ini文件中:

upload_max_filesize= 300M //这个是文件上传大小限制


post_max_size=300M //这个是post请求大小限制

这两个参数,记得这两个参数没有在一起的,所以修改的时候一定要分别找到修改,然后保存退出。

然后再Nginx对应的站点配置文件里(也就是www.mydomain.com.conf这样的文件)里添加如下参数到对应位置,如下图所示:

未分类

其实就是告诉Nginx客户端上传文件的容量限制和超时标准,添加:

client_max_body_size 300m;


client_body_timeout 120;

这两个配置进去即可。

至此,重启一下LNMP生产环境即可生效了,这时候再次进入 WordPress 后台的”媒体”的添加里就可以看到,对应的上传文件大小限制已经成为300MB了,如下图:

未分类

其实,这个设置对于不限流和服务器硬盘够大的网站来说还是很有用处的,特别是对于一些高清视频,放在第三方网站上引用的话经常会被添加”广告”的,通过上述的办法上传到自己服务器上的视频文件就不存在这个问题了,配合 CDN 的话,用户端访问播放也是毫无压力的。

WordPress全站添加SSL免费证书开启HTTPS

大家好,最近把achair教程网全站添加了SSL,网址从http://www.xiaored.net,变成了https://www.xiaored.net 前缀变成了https,并且在谷歌浏览器地址栏前面变成了绿色的“安全”,如图:

未分类

简单的说https是安全的http,是经过加密的,百度,淘宝,京东,苹果这些网站都是https的,特别是在线购物的网站建议使用https。下面说说为什么要安装https?

1. 百度搜索排名:
从相关性的角度,百度搜索引擎认为权值相同的站点,采用https协议的页面更加安全,排名上会优先对待。

2. 谷歌浏览器:
从2017年1月份起,Chrome浏览器将会把采用HTTP协议的网站标记为“不安全”网站。

3. 谷歌搜索排名:
谷歌早已宣布采用HTTPS加密协议的网站将会在搜索结果中优先显示。

4. 等等

下面分享下我的网站是如何操作的,先说下我的网站配置以及使用到的工具:

  1. 阿里云ECS的服务器,Nginx

  2. 七牛云的SSL和CDN

  3. WordPress网站,BeTheme主题,Super Cache缓存

  4. DNSPod域名解析,WinSCP服务器管理工具

具体操作经验分享,请到《WordPress公共课》查看:

https://www.xiaored.net/wordpress-commonality/

使用SMTP插件解决WordPress注册邮件无法发送的问题,解决过程总结分享!

最近在鼓捣一个wordpress博客(美文风网 ),但是遇到一个小问题,那就是wordpress本身不带邮件发送功能,需要使用SMTP插件和第三方邮箱系统实现发送邮件功能!

选择插件和第三方邮件SMTP服务

插件呢,我试用了几款,不是设置复杂,就是好久没更新了,最后终于找到一个设置简单的SMTP插件: https://wordpress.org/plugins/configure-smtp/

中国国内使用QQ邮箱的人很多,所以我也选择了QQ邮箱的SMTP服务低,当然你也可以选择其他的,根据自己情况定。

QQ邮箱的SMTP服务是默认关闭的,需要我们在邮箱的设置中开启,最新的QQ邮箱使用了授权码代替了原有的QQ密码,所以在密码一栏中需要填写SMTP的授权码。

好了,我安装好SMTP插件和开启好QQ邮箱的SMTP服务之后,就对插件Configure SMTP进行设置就行了,按照下面的图片说明进行设置就行!(图片来自大前端博客,在此感谢!)

未分类

当然我们设置好之后记得发送一个测试邮件,看下是否成功。在Configure SMTP插件最下边有test e-mail按钮,根据提示测试就行!

希望对大家有用!

通过Wireshark抓取直连设备的IP地址

1、ARP协议简介

说到网络中的IP地址就不得不说APR协议。何为ARP?全名叫做Address Resolution Protocol(地址解析协议)。网络中的设备发送消息时将包含目标IP地址信息存入本设备APR缓存中并保留一段时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址–>MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。

为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。(以上出自https://baike.baidu.com/item/ARP/609343?fr=aladdin)

2、抓取直连设备IP

未分类

环境:将被获取的设备服务器B和计算机A相连(可直接用网线直连)
在A设备上将网口的所有IP信息清除(即改为DHCP),此步骤不做也可以,建议不要省略

未分类

网线连接后,打开安装好的wirshark软件,在过滤规则中输入 arp(只显示arp的数据包)

未分类

如果是直连的话,服务器B在关机状态下此界面是没有任何数据包显示的,接下来,只需要打开服务器B设备,就会获取直连网络中的ARP数据包。在数据包中就有服务器B的IP等信息了

未分类

who has XX.XX.XX.XX ? Tell BB.BB.BB.BB

此处BB.BB.BB.BB就是需要获取的地址。也包括此设备的MAC地址。

Linux下Nginx+Tomcat整合与配置

安装JDK

下载的jdk文件为:jdk-6u45-linux-x64.bin,执行如下命令进行安装:

#./jdk-6u12-linux-i586.bin

安装tomcat

#tar zxvf apache-tomcat-6.0.18.tar.gz
#mv apache-tomcat-6.0.29 tomcat

这里我将解压后的apache-tomcat-6.0.29重命名为了tomcat方便操作。

配置环境变量

编辑/etc下的profile文件,加上如下内容:

JAVA_HOME="/opt/app/jdk1.6.0_45"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH=".:$PATH:$JAVA_HOME/bin"
CATALINA_HOME="/opt/app/tomcat"
export JAVA_HOME CATALINA_HOME

执行下面命令使变更生效:

# source /etc/profile

启动tomcat并输入http://domain:8080,如果看到猫的页面即tomcat和jdk安装成功

新建文件目录/home/www为网站存放目录,设置server.xml文件,在Host name=”localhost”处将appBase=的指向路径改为/home/www/web

创建index.jsp至/home/www/web/ROOT,内容为:“hello!” 重新启动tomcat,重新访问,如果看到index.jsp文件内容hello!表示设置成功。

安装Nginx

执行如下命令解压nginx:

# tar zxvf nginx-1.4.4.tar.gz
# mv nginx-1.4.4 nginx

同样重命名了一下。

安装nginx:

# ./configure --prefix=/opt/app/nginx

结果出现了错误:error: C compiler cc is not found,按网上所说安装编译源码所需的工具和库:

#yum install gcc gcc-c++ ncurses-devel perl

再次安装,发现还有错误:the HTTP rewrite module requires the PCRE library.

执行

# yum -y install pcre-devel openssl openssl-devel

终于成功,

# ./configure --prefix=/opt/app/nginx
# make
# make install

nginx安装成功后的安装目录为/opt/app/nginx

在conf文件夹中新建proxy.conf,用于配置一些代理参数,内容如下:

#!nginx (-) 
# proxy.conf 
proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;  #获取真实ip
#proxy_set_header       X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size       4k;
proxy_buffers           4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

编辑安装目录下conf文件夹中的nginx.conf,输入如下内容

#运行nginx所在的用户名和用户组
#user  www www; 
#启动进程数
worker_processes 8;
#全局错误日志及PID文件
error_log  /opt/app/nginx/logs/nginx_error.log  crit;
pid        /opt/app/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events
{
  use epoll;
  worker_connections 65535;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
  #设定mime类型
  include       mime.types;
  default_type  application/octet-stream;
  include /opt/app/nginx/conf/proxy.conf;
  #charset  gb2312;
  #设定请求缓冲    
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
#  client_max_body_size 8m;
  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 60;
  tcp_nodelay on;
#  fastcgi_connect_timeout 300;
#  fastcgi_send_timeout 300;
#  fastcgi_read_timeout 300;
#  fastcgi_buffer_size 64k;
#  fastcgi_buffers 4 64k;
#  fastcgi_busy_buffers_size 128k;
#  fastcgi_temp_file_write_size 128k;
#  gzip on;
#  gzip_min_length  1k;
#  gzip_buffers     4 16k;
#  gzip_http_version 1.0;
#  gzip_comp_level 2;
#  gzip_types       text/plain application/x-javascript text/css application/xml;
#  gzip_vary on;
#limit_zone  crawler  $binary_remote_addr  10m;
###禁止通过ip访问站点
 # server{
#        server_name _;
 #       return 404;
 #       }
  server
  {
    listen       80;
    server_name  localhost;
    index index.html index.jsp;
    root  /opt/www/static;
    #limit_conn   crawler  20;    
    location ~ .*.(jsp|shtml)$ #所有shtml的页面均交由tomcat处理
    {
      index index.jsp;
      proxy_pass http://localhost:8080;#转向tomcat处理
      }
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ #设定访问静态文件直接读取不经过tomcat
    {
      expires      30d;
    }
    location ~ .*.(js|css)?$
    {
      expires      1h;
    }    
   }  
#定义访问日志的写入格式
     log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
    access_log  /opt/app/nginx/logs/localhost.log access;#设定访问日志的存放路径   
}

修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

#/opt/app/nginx/sbin/nginx -t

如果出现下面两行,说明正确:

the configuration file /opt/app/nginx/conf/nginx.conf syntax is ok
the configuration file /opt/app/nginx/conf/nginx.conf was tested successfully

如果提示unknown host,则可在服务器上执行:ping www.baidu.com如果也是同样提示unknown host则有两种可能:

a、服务器没有设置DNS服务器地址,查看/etc/resolv.conf下是否设置,若无则加上

b、防火墙拦截

启动nginx的命令

#/opt/app/nginx/sbin/nginx

这时,输入以下命令查看Nginx主进程号:

ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

停止nginx的命令

#/opt/app/nginx/sbin/nginx -s stop

在不停止Nginx服务的情况下平滑变更Nginx配置

输入以下命令查看Nginx主进程号:

ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

屏幕显示的即为Nginx主进程号,例如:

6302

这时,执行以下命令即可使修改过的Nginx配置文件生效:

kill -HUP 6302

或者无需这么麻烦,找到Nginx的Pid文件:

kill -HUP `cat /usr/local/nginx/nginx.pid`

tomcat 配置日志切割

tomcat 配置日志切割如下

  • jdk 版本 1.7
  • tomcat8.5
  • centos6.8 mini

Linux 下使用 cronolog工具来切分catalina.out

1、下载安装cronolog。

yum install -y cronolog

2、修改$tomcat/bin/catalina.sh文件。

如下:

446行左右,

#touch “$CATALINA_OUT” //注释掉
if [ “$1” = “-security” ; then
if [ $have_tty -eq 1 ]; then
echo “Using Security Manager”
fi
shift
eval “”$_RUNJAVA”” “”$LOGGING_CONFIG”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
-Djava.endorsed.dirs=””$JAVA_ENDORSED_DIRS”” -classpath “”$CLASSPATH”” 
-Djava.security.manager 
-Djava.security.policy==””$CATALINA_BASE/conf/catalina.policy”” 
-Dcatalina.base=””$CATALINA_BASE”” 
-Dcatalina.home=””$CATALINA_HOME”” 
-Djava.io.tmpdir=””$CATALINA_TMPDIR”” 
org.apache.catalina.startup.Bootstrap “$@” start 
>> “$CATALINA_OUT” 2>&1 “&” //删除此行
2>&1 |/usr/sbin/cronolog “$CATALINA_BASE”/logs/catalina-%Y-%m-%d.out & /添加此行

else
eval “”$_RUNJAVA”” “”$LOGGING_CONFIG”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
-Djava.endorsed.dirs=””$JAVA_ENDORSED_DIRS”” -classpath “”$CLASSPATH”” 
-Dcatalina.base=””$CATALINA_BASE”” 
-Dcatalina.home=””$CATALINA_HOME”” 
-Djava.io.tmpdir=””$CATALINA_TMPDIR”” 
org.apache.catalina.startup.Bootstrap “$@” start 
>> “$CATALINA_OUT” 2>&1 “&” /删除此行
2>&1 |/usr/sbin/cronolog “$CATALINA_BASE”/logs/catalina-%Y-%m-%d.out & //添加此行

【注意:】tomcat7之前的版本位置一样、但是配置有所不同

touch “$CATALINA_BASE”/logs/catalina.out //注释
>> “$CATALINA_BASE”/logs/catalina.out 2>&1 & //删除
2>&1 |/usr/sbin/cronolog “$CATALINA_BASE/logs/catalina-%Y-%m-%d.out” & //添加

3、保存 catalina.sh 文件,重启Tomcat即可。

如何解决 Tomcat 不能自动刷新静态页面的问题

一次笔者需要部署一个Tomcat环境,展示一些静态页面的内容。通过Tomcat的Web Application Manager添加了指向静态页面所在路径的Application,用浏览器查看页面,页面内容正常展现,非常顺利。

但在后续对静态页面进行修改更新后,通过浏览器再次查看,页面仍是旧的内容。笔者也怀疑是不是因为浏览器缓存引起这个问题,但清空浏览器、换用其他浏览器,都只能看到旧的页面内容。

那么就应该是服务端的问题了。笔者在服务端重启了Tomcat服务,在Tomcat的Web Application Manager中Stop/Start这个Application,都没有效果,甚至把静态页面文件从磁盘删除,并重启Tomcat服务,仍能在浏览器中看到旧的页面内容!简直无语了!

最后在网上反复搜索,总算找到一个方法。

首先在Tomcat的Web Application Manager中删除这个静态页面的Application。

然后编辑 [apache-tomcat]/conf/server.xml 文件,[apache-tomcat]表示tomcat的安装路径。

在这个文件的最后,有一个 Host 节点:

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 这里有一些内容 -->

</Host>

在这个节点中,添加一行内容:

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">

<!-- 添加下面这行内容 -->
<Context path="/staticpage" docBase="/home/mypage" reloadable="true" debug="0" crossContext="true" />
</Host>

重启Tomecat后,再次更新静态页面,页面内容正确展现。

添加的 Context 节点,表示一个新的虚拟路径,path 为路径名称,需添加到url中访问这个虚拟路径,例如:http://localhost/staticpage,docBase 为磁盘上的路径名称,即实际页面文件放在磁盘的哪个路径下,reloadable 表示页面文件被修改后,网站是否自动更新页面内容,测试环境设为 true 方便开发测试,生产环境就要设为 false 以提升性能。

大功告成!

使用Docker部署一个tomcat+mysql应用玩玩

Docker已经成为目前最流行的系统部署解决方案,几乎可以部署任何系统应用,下面我们用两个小实例,来熟悉一下Docker.

前提是要先安装好一个docker环境,可以参考:

http://www.lazyedu.com/docker/centos-docker.html

一、使用docker部署debain镜像

1、获取最新的debain镜像

docker pull debain    

这一步docker会从docker.io官方服务资源中下载最新的debain系统镜像

2、成功后查看已经下载images

docker images 

3、运行并进入docker容器

docker run -t -i debian /bin/bash

exit命令可以退出容器。

4、进入一个已经启动了的容器

docker exec -it debian /bin/bash

5、查看已经运行的容器

docker ps

6、查看全部容器,包括没有启动的

docker ps -a

简单的几个命令,我们就可以开始Docker的学习了。

二、使用docker部署mysql

1、下载mysql官方镜像,同样系统会自动下载最新版本的mysql

docker pull mysql

2、运行方式A

运行docker容器,使用外部配置文件、日志、数据库,设置初始密码

docker run -p 3306:3306 --name mysql -v $PWD/conf/:/etc/mysql/ -v $PWD/logs:/var/log/mysql -v $PWD/data:/usr/share/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

$PWD表示你在运行docker中的mysql数据库时的系统目录,如果你希望docker使用你本地磁盘中的配置文件、系统日志和数据库文件时,可以使用上面的参数,不过这时需要你在当前目录中有这些文件。记住设个-v参数,如果有需要让docker运行时访问你本地硬盘时都可以使用这个参数创建容器。

3、运行方式B

运行docker容器,使用内部文件,设置初始密码:

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

要注意的是,不管用什么方式创建和启动mysql docker容器,都需要制定初始的root密码,通过-e MYSQL_ROOT_PASSWORD=123456参数制定,不然这个容器是不会启动的。

三、使用docker部署tomcat

1、下载官方最新版本

docker pull tomcat

2、运行方式

这种方式创建容器,是将你当前目录中test应用映射到docker中的ROOT

docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/ROOT -d tomcat  

这种方式只在docker中启动tomcat

docker run --name tomcat -p 8080:8080 -d tomcat  

我们可以使用下面的命令进入这个tomcat容器

docker exec -it tomcat bash

经过这个几个实例,我们来体验一下什么docker,它是如何运行的部署的,我们后面会逐渐深入解析docker。