docker中搭建mysql+nginx的静态环境
背景
最近因为和老师吹牛逼,说自己懂docker。揽了个docker的活(还没有钱),熬了两天夜终于做完了。
简单来说这个环境只需要docker和mysql,docker中要可以使用nodejs。尽量精简就行。
具体要求
- mysql容器和nginx容器之间可以互联 ,搭建两个容器互联,而不是集成到一个容器中一键部署。充分发挥docker灵活轻量级的特点;
- mysql容器 mysq容器中可以进行正常的中文显示,运行.sql脚本建立数据库。(.sql脚本已给);
- 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-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb 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 -p
mysql> 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 就是把两个容器连接。
注意
- docker官方现在不推荐 --link 使用。因为我赶时间,就不先学新的了。
- 不要把两个容器相互连接。如果你一直按照本教程走的话不会发生这种情况。但是我在当时创建完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 -v
v8.5.0
$ npm -v
v5.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 mysql
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
然后进入nginx中,运行node mysql.js
打开浏览器察看
参考
《课工厂Docker容器与虚拟化技术》 索书号:TP316.85 249
如何解决mysq中文乱码https://blog.csdn.net/gavinkelland/article/details/77822223
如何运行.sqlhttps://blog.csdn.net/WatermelonMk/article/details/82424067
如何重命名dockerhttp://www.mamicode.com/info-detail-1097347.html
如何安装nodehttps://blog.csdn.net/wangtaoking1/article/details/78005038
换源https://blog.csdn.net/zhangjiahao14/article/details/80554616
docker打包