博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker中搭建mysql+nginx的静态环境
阅读量:2492 次
发布时间:2019-05-11

本文共 4798 字,大约阅读时间需要 15 分钟。

docker中搭建mysql+nginx的静态环境

背景

最近因为和老师吹牛逼,说自己懂docker。揽了个docker的活(还没有钱),熬了两天夜终于做完了。

简单来说这个环境只需要docker和mysql,docker中要可以使用nodejs。尽量精简就行。

具体要求

  1. mysql容器和nginx容器之间可以互联 ,搭建两个容器互联,而不是集成到一个容器中一键部署。充分发挥docker灵活轻量级的特点;
  2. mysql容器 mysq容器中可以进行正常的中文显示,运行.sql脚本建立数据库。(.sql脚本已给);
  3. nginx容器 这个容器中可以运行nodejs;

docker安装

这个部分就不详细写了,比较基础。参照其他博客即可。

容器搭建

mysql容器搭建

mysql容器中要自己建库,建库的sql已经给了。所以首先:(我这里直接docker pull 安装,比较简单。推荐大家使用dockerfile,也不是很难还比较灵活)

拉取mysql镜像

$ docker pull mysql:5.6

我这里使用mysql5.6的版本,比较稳定。

运行mysql

$ docker run -p 3306:3306 --name mysql -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/logs:/logs -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.6

这一句代码中,

-v表示 将主机某个目录 挂载到 docker的某个目录 ,类似于虚拟机共享文件吧。

-d 为后台运行

-e就是设置用户名密码

这些语句都是通用的,在之后建立其他docker也会用到。

进入容器,设置数据库

$  docker ps

此时应该已经可以看到mysql容器的id了。使用语句

$ sudo docker exec -it 775c7c9ee1e1 /bin/bash

进入。其中,775c7c9ee1e1应该替换为当前mysql容器的id。

使容器正常显示汉语

进入容器后权限应该是root,所以我就不写sudo了

$ apt-get update$ apt-get install vim$ vim /etc/mysql/mysql.conf.d/mysql.cnf

ps 如果发现apt-get update太慢或者卡住,可以尝试换源。方法:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak$ vim /etc/apt/sources.list

以下是我的源:

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial universedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates universedeb http://mirrors.aliyun.com/ubuntu/ xenial multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-propertiesdeb http://archive.canonical.com/ubuntu xenial partnerdeb-src http://archive.canonical.com/ubuntu xenial partnerdeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-security universedeb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

在文件中,添加如下代码

[mysql] default-character-set = utf8[mysql.server] default-character-set = utf8[mysqld_safe] default-character-set = utf8[client] default-character-set = utf8[mysqld] character_set_server=utf8 init_connect=’SET NAMES utf8’

保存并退出。

添加数据库

使用.sql语句建立数据库

把给定的.sql脚本放在共享目录下。我们这里是宿主机的如下目录

~/mysql/data

进入mysql容器中,进入共享目录,执行脚本

$ cd /var/lib/mysql$ mysql -u root -pmysql> source /aaa.sql

aaa.sql即是我的sql脚本,如果你没有的话,可以使用命令行创建数据库。之后可以使用

SHOW DATABASES;SELECT * FROM 表名;

察看数据库是否成功建立,里面有内容。

退出容器

使用ctrul +p+q退出

搭建nginx容器

拉取并运行镜像

和之前一样,pull镜像后运行

$ docker pull nginx$ docker run --name nginx -p 80:80 -v ~/web/www:/usr/share/nginx/html -v ~/web/nginx/conf.d:/etc/nginx/conf.d --link mysql:mysql -d nginx

第二句代码中的 --link mysql:mysql 就是把两个容器连接。

注意

  1. docker官方现在不推荐 --link 使用。因为我赶时间,就不先学新的了。
  2. 不要把两个容器相互连接。如果你一直按照本教程走的话不会发生这种情况。但是我在当时创建完nginx容器后,mysql容器有一些问题。我就把mysql容器删了,重新创建了一个同名的。并且加入了 --link nginx:nginx 导致两个容器相互连接。在运行的时候是发现不了问题 的。但是当我后来把两个容器同时重启时,就无法工作了,现在正在重新建。。。都是血泪在这

进入容器中,安装node

还是用之前的命令进入容器

$ sudo docker exec -it 775c7c9ee1e1 /bin/bash

更新后安装node

$ apt-get update $ sudo apt-get install python-software-properties$ apt-get install curl$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -$ sudo apt-get install nodejs

安装完成后可以看下版本

$ node -vv8.5.0$ npm -vv5.3.0

至此已经完成了。如果想看效果的话,可以写一个简单的首页放在宿主机 ~/web/www目录下。也就是docker的/usr/share/nginx/html目录下。比如:

hello world!

哈哈哈要注意我没装php,所以不能写php脚本。如果要加php的话请搜:

docker搭建LNMP

docker容器迁移

备份容器

将运行的容器快照制作成镜像

$ docker commit -p 94e44c7fd742 nginx$ docker commit -p 8bea2bf0d8cc mysql

因为dockerhub是在太慢,我选择直接将镜像保存在本地机器中,通过拷贝传递给别人。

$   docker save -o ~/nginx_mysql/nginx.tar 2e920d5c73b7 $   docker save -o ~/nginx_mysql/mysql.tar 10e9e003921b

将两个文件压缩后拷贝到新的环境。使用

$	tar -zcvf nginx_mysql.tar.gz  nginx_mysql

迁移

到新的服务器上后,首先需要加载镜像。使用:

$   tar -zxvf  nginx_mysql.tar.gz$	docker load -i ~/nginx_mysql/nginx.tar$	docker load -i ~/nginx_mysql/mysql.tar

此时可以使用docker images察看镜像是否加载成功。

运行镜像

docker run -p 3306:3306 --name mysql -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/logs:/logs -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysqldocker run --name nginx -p 80:80 -v ~/web/www:/usr/share/nginx/html -v ~/web/nginx/conf.d:/etc/nginx/conf.d --link mysql:mysql -d nginx

然后进入nginx中,运行node mysql.js

打开浏览器察看

参考

《课工厂Docker容器与虚拟化技术》 索书号:TP316.85 249

如何解决mysq中文乱码
如何运行.sql
如何重命名docker
如何安装node
换源

转载地址:http://hoorb.baihongyu.com/

你可能感兴趣的文章
Android音频系统之AudioPolicyService
查看>>
【计算机算法设计与分析】——5.4最优二分检索树
查看>>
不浮躁的社会是什么样的?
查看>>
KVM安装
查看>>
haproxy
查看>>
oracle中 rownum与rowid的理
查看>>
Linux之RPM 软件管理程序
查看>>
.NET 面试题(2)
查看>>
(转)java内部类详解
查看>>
mysql+mybatis递归调用
查看>>
mongoDB的安装(一)
查看>>
Spring Boot:快速入门教程
查看>>
「BZOJ2879」[Noi2012]美食节
查看>>
谈项目需求
查看>>
C#判断字符串是否为数字字符串
查看>>
I/O模型
查看>>
Spring Data JPA初使用 *****重要********
查看>>
xenu工具介绍
查看>>
hdu 5730 Shell Necklace——多项式求逆+拆系数FFT
查看>>
python try 异常处理 史上最全
查看>>