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-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 就是把兩個容器連接。
注意

  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 -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打包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章