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