標籤:

從無到有:利用Docker部署項目

從無到有:利用Docker部署項目

很早之前就關注Docker了,但由於實習實在是太忙了,一直沒空研究,最近開始著手畢業設計,就藉此機會好好研究了一下,想把畢業設計部署到Docker中。(我本身也是菜鳥,肯定有很多錯誤,希望各位大佬們輕噴O(∩_∩)O~~)

Docker是什麼呢?官方解釋是說,Docker是一個開源的引擎,可以輕鬆的為任何應用創建一個輕量級的、可移植的、自給自足的容器。Docker 包含三個基本概念,分別是鏡像(Image)、容器(Container)和倉庫(Repository)。什麼是容器呢?我理解的是,容器就像是一個更輕量的虛擬機,(但是這樣理解也有錯誤,因為容器並不虛擬硬體)。容器為鏡像,例如一個Nginx鏡像,一個SQL Server鏡像,甚至是一個SpringBoot提供運行環境,你可以將上述應用直接部署在Docker上,倉庫就是存放鏡像的地方,DockerHub是docker的公共倉庫,我們也可以構建自己的私有倉庫。好了話不多說,讓我們開始吧。

我要部署的項目是一個前端加後端的項目,前端用的Antd全家桶(基於React),後端是SpringBoot,資料庫是SQL Server和MongoDB,前端頁面請求後端數據,後端訪問兩個資料庫,所以大體思路上就需要4個容器:Nginx(部署前端頁面)、SpringBoot容器(後端應用)、SQLServer容器以及MongoDB容器。Nginx是一個反向代理伺服器,我以前沒接觸過,所以配置起來格外吃力o(╥﹏╥)o,我們將前端頁面部署在它上面。MongoDB是一個非關係型資料庫,我利用它來存放文件。

我們利用Docker-Compose構建應用,Docker-Compose的服務編排工具,主要用來構建基於Docker的複雜應用,Docker-Compose構建應用的時候可以使用DockerHub上的鏡像,也可以使用自己構建的鏡像。DockerHub類似於一個倉庫,上面有很多其他人已經寫好的鏡像,例如nginx,我們可以直接使用。

首先安裝Docker:

sudo url -sSL https://get.docker.com/ | sh

如果提示url找不到先執行命令:sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

安裝完畢後在/etc/docker下新建daemon.json文件,添加如下代碼:

{ "registry-mirrors": [ "http://9600955f.m.daocloud.io" ], "insecure-registries": [] }

這個操作的目的是配置鏡像加速,可以使鏡像下載的更快,該地址可以到daocloud上免費申請。

安裝完畢後使用docker -v查看是否安裝成功,一切配置完畢後就可以使用了

安裝配置Nginx

使用docker search搜索鏡像,例如:

docker search nginx

如圖第一個鏡像就是官方的nginx鏡像,使用sudo docker pull nginx下載鏡像。

因為我已經下載了,所以不會再次下載,等待下載完成後就可以使用該鏡像了。

我們使用docker run命令使用指定的鏡像啟動一個容器,例如:

sudo docker run -d --name mynginx -p 8080:80 nginx

-d表示讓容器在後台運行,--name是起一個別名,-p是容器的80埠對應主機的8080埠,nginx就是我們剛剛pull下來的鏡像。

運行完畢後,打開瀏覽器,輸入127.0.0.1:8080/,顯示如下頁面,說明nginx已經啟動成功了:

使用docker ps查看正在運行中的鏡像:

使用docker ps -a查看所有鏡像:

2018/5/29日更

nignx現在算是啟動起來了,那麼我們現在就是要往上面部署我們的頁面了。

部署頁面需要讓nginx知道頁面存放路徑,我們需要修改nginx的配置文件。

nginx有兩個配置文件,路徑如下:

/etc/nginx/nginx.conf /etc/nginx/conf.d

裡面包含了例如配置頁面存放路徑、請求轉發等配置,上面的路徑是容器里內的路徑,所以我們要用到掛載,將主機的路徑掛載到容器內的目錄,這樣容器內的nginx可以直接訪問主機的目錄下的配置文件。

新建如下兩個文件 ,可以自己指定路徑,但要跟後文匹配。

/etc/docker/mynginx/nginx.conf/etc/docker/mynginx/conf.d

然後打開編輯nginx.conf裡面的內容

#nginx.confevents { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;#容器內目錄 }

這個配置文件我們主要看inculd,他後面的路徑就是另一個配置文件conf.d的路徑,要注意的是,這個路徑不是當前主機conf.d的目錄,而是掛載的容器內的路徑。

另一個配置文件conf.d的內容:

#conf.dserver { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html;#容器內目錄 index index.html index.htm; } location /api{ proxy_pass http://192.168.1.1:9999/api; # access_log "logs/test.log"; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}

這個配置文件比較容易理解,listen監聽80埠,服務名是localhost,location /後就是我們要部署的頁面路徑,這是nginx的路徑匹配,匹配上的路徑會進行相應的請求,有興趣的可以深究,我就不多說了。

root /usr/share/nginx/html;#容器內目錄index index.html index.htm;

這一行就是配置我們頁面的地址,表示頁面放在了容器內的/usr/share/nginx/html目錄下,同樣我們也可以將本地目錄掛載到上面。

創建/usr/docker/mynginx/html目錄,在html目錄下新建index.html,然後編輯添加如下內容:

<html> <body> <h1>Hello World</h1> </body></html>

然後執行以下命令:

sudo docker run --name mynginx -d -p 8080:80 -v /usr/docker/mynginx/html:/usr/share/nginx/html -v /etc/docker/mynginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /etc/docker/mynginx/conf.d:/etc/nginx/conf.d nginx

注意執行以上命令時先用docker rm mynginx刪除已經存在的mynginx容器,否則會報錯。

該命令比之前的命令多了三行掛載的命令。:前面是主機的目錄,後面是nginx容器的目錄,這樣容器就可以直接訪問主機內的文件了。

執行命令後頁面如下說明配置成功:

後面可以配置任意的頁面,只需要將index頁面放到html路徑下即可,掛載還有兩種方式,分別是用DocekrFile文件和Docker-Compose.yaml文件構建,我會在後面詳細解釋。

安裝配置SQLServer

安裝SQLServer微軟給出了比較全的步驟,大家可以參考下:

Get started with SQL Server 2017 on Docker?

docs.microsoft.com圖標

首先pull鏡像

sudo docker pull microsoft/mssql-server-linux:2017-latest

pull下來後可以直接使用run命令運行了,但是裡面有幾個參數需要注意:

sudo docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Alex@1016 -p 1433:1433 --name mysqlserver -d microsoft/mssql-server-linux:2017-latest

ACCEPT_EULA=Y表示要同意一個End-User Licensing Agreement許可證SA_PASSWORD=Alex@1016即指定SA用戶的密碼

執行以上命令後你應該就創建好了一個SQLServer鏡像,可以直接使用了。我們可以使用

sqlcmd進行連接,也可以使用圖形化界面例如DBeaver進行連接。

首先安裝sqlcmd

sudo apt-get install mssql-tools

安裝完畢後就可以使用了,這裡需要配置一下環境變數:

sudo gedit /etc/profile

添加 export PATH="$PATH:/opt/mssql-tools/bin"

然後 source /etc/profile使配置立即生效

使用

sqlcmd -S localhost -U SA -P Alex@1016

連接資料庫

然後就可以操作資料庫了,例如創建一個庫,注意輸完命令都要輸入go結束

創建完畢我們插入數據

use testcreate table USERS(NAME varchar(255),PASSWORD varchar(255))insert into USERS (NAME,PASSWORD)values(alex,123);select * from USERS

查詢到了我們剛剛插入的語句。

至此,SQLserver就安裝成功了,但是這並不是我們需要的,因為我們是從SpringBoot容器中訪問SQLServer容器,而我們採用這種方式只能從主機訪問,這就涉及到容器的通信,我們後面使用Docker-Compose構建就可以實現。

to be continued...

Ps:大佬們留個贊再走唄(?????)

推薦閱讀:

Docker的總體架構
Docker基本操作
Docker運行nginx

TAG:Docker |