在代碼開發(fā)中, 除了語言開發(fā)環(huán)境及 IDE 外, 我們往往還需要依賴其他第三方服務(wù), 如:數(shù)據(jù)庫
,服務(wù)器
,緩存
,搜索
,MQ
等等. 而這些服務(wù)的安裝各式各樣, 有的極為復(fù)雜, 有的對(duì)開發(fā)機(jī)有極大的限制, 甚至有的直接不支持當(dāng)前開發(fā)機(jī). 給我們的開發(fā)環(huán)境搭建帶來了極大的困難. 這時(shí)我們可以選擇使用 Docker
來快速搭建開發(fā)環(huán)境, 屏蔽復(fù)雜的安裝過程, 服務(wù)配置.
什么是 Docker
作者:jnil
鏈接:https://www.jianshu.com/p/c1b79afc6d63
來源:簡(jiǎn)書
著作權(quán)歸作者所有,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處,。
我們參考 Docker 官網(wǎng)中的概述 what-docker
Docker 是世界領(lǐng)先的軟件容器平臺(tái),。** 開發(fā)人員使用 Docker 來消除與同事的代碼協(xié)作時(shí)的 “我機(jī)器上的工作” 問題 **。運(yùn)營商使用 Docker 在獨(dú)立的容器中并行運(yùn)行和管理應(yīng)用程序,,以獲得更好的計(jì)算密度,。企業(yè)使用 Docker 構(gòu)建靈活的軟件傳送管道,可以更快,,更安全地運(yùn)行新功能,,并且對(duì)于 Linux 和 Windows Server 應(yīng)用程序都有信心。
-- 來自谷歌翻譯
在其中的 Docker For Developers
部分中, 我們可以查看對(duì)于我們開發(fā)者具體有哪些作用
Docker 自動(dòng)執(zhí)行設(shè)置和配置開發(fā)環(huán)境的重復(fù)任務(wù),,以便開發(fā)人員可以專注于重要的事情:構(gòu)建出優(yōu)秀的軟件,。
使用 Docker 的開發(fā)人員不必安裝和配置復(fù)雜數(shù)據(jù)庫,也不用擔(dān)心在不兼容的語言工具鏈版本之間切換,。當(dāng)應(yīng)用程序 Docker 化時(shí),,這種復(fù)雜性被推入容易構(gòu)建,共享和運(yùn)行的容器中,。將同事加入新的代碼庫不再意味著安裝軟件和解釋安裝程序的時(shí)間,。Dockerfiles 隨附的代碼更簡(jiǎn)單:依賴關(guān)系被拉為整齊的 Docker 映像,任何具有 Docker 和編輯器的人都可以在幾分鐘內(nèi)構(gòu)建和調(diào)試應(yīng)用程序,。
-- 來自谷歌翻譯
** 簡(jiǎn)單來說, 使用 Docker 我們可以專注于代碼的編寫, 忽略其他軟件復(fù)雜的安裝, 配置. 同時(shí)可以統(tǒng)一線上, 線下環(huán)境, 不受服務(wù)版本差異的影響 **
安裝 Docker
請(qǐng)參考 Docker 官方文檔中的 Install Docker
目前 Docker 支持的系統(tǒng)版本如下
Docker 支持的系統(tǒng)版本. png
Docker 最初是在 Ubuntu 12.04 上開發(fā)實(shí)現(xiàn)的
[1], 另外 Docker 官網(wǎng)文檔中的一些操作命令也是基于 Ubuntu 來講解的, 如果有條件, 推薦使用 Ubuntu
Linux 安裝完成后, 請(qǐng)查看
Post-installation steps for Linux 完成一些后續(xù)配置
對(duì)于 Linux 用戶需要特別注意, 如果是以非
root
用戶運(yùn)行, 需要?jiǎng)?chuàng)建
docker
組, 并將當(dāng)前用戶添加到
docker
組中
[2]
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
Docker 中使用的鏡像都需要從網(wǎng)站上下載, 因?yàn)榫W(wǎng)絡(luò)原因, 國內(nèi)下載速度往往不佳, 此時(shí)可以使用國內(nèi)的一些加速器來加速下載, 如:DaoCloud,阿里云, 具體用法, 請(qǐng)登錄后查看網(wǎng)站說明文檔
使用 Docker 搭建開發(fā)環(huán)境
現(xiàn)在以搭建 mysql
為例
首先從 hub.docker.com 網(wǎng)站中搜索你需要的鏡像, 如 mysql
其中第一個(gè)帶有
official
單詞的表明為 Dcoker 官方提供的鏡像, 下面的三個(gè)為個(gè)人 / 組織上傳的鏡像
我們點(diǎn)擊右側(cè)
DETAILS
按鈕查看鏡像詳情
圖中的
8.0.1
至
5.5.55
四行表示支持的
mysql
版本, 同時(shí)附帶鏡像構(gòu)建的
Dockerfile
文件
右側(cè)的
docker pull mysql
是鏡像的下載命令, 此時(shí)我們可以在命令行中執(zhí)行該命令進(jìn)行下載, 默認(rèn)下載版本為
latest
如果希望指定下載版本, 使用如下命令格式
docker pull mysql:版本號(hào)
, 如
docker pull mysql:5.6
下載 mysql
鏡像
$ docker pull mysql:5.7
運(yùn)行 mysql
鏡像
$ docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
此時(shí)會(huì)在命令行中輸出該容器運(yùn)行時(shí)的日志, 若要退出, 請(qǐng)按 Ctrl+c
如果希望在后臺(tái)運(yùn)行, 加入 -d
參數(shù)即可
運(yùn)行參數(shù)說明
--name mysql
--rm
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=root
-d
測(cè)試容器
在后臺(tái)運(yùn)行 mysql
容器
$ docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
查看當(dāng)前運(yùn)行容器列表
$ docker ps
我們可以發(fā)現(xiàn)
mysql
已在后臺(tái)運(yùn)行
此時(shí)我們可以使用
Navicat
,
SQLyog
進(jìn)行鏈接測(cè)試
ip
: 運(yùn)行容器機(jī)器的 ip
端口
:3306
用戶名
:root
密碼
:root, 即
MYSQL_ROOT_PASSWORD
對(duì)應(yīng)的值
亦可使用如下命令進(jìn)入
mysql
命令行
$ docker run -it --link mysql:mysql --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR"-P"$MYSQL_PORT_3306_TCP_PORT"-uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
運(yùn)行參數(shù)說明
-it
--link mysql:mysql
sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR"-P"$MYSQL_PORT_3306_TCP_PORT"-uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
數(shù)據(jù)保存
mysql 鏡像默認(rèn)使用的配置文件為 /etc/mysql/my.cnf
如果我們需要自定義配置文件可以使用如下命令覆蓋原本配置
$ docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d -v ~/docker/data/mysql/my.cnf:/etc/mysql/my.cnf mysql:5.7
運(yùn)行參數(shù)說明
-v ~/docker/data/mysql/my.cnf:/etc/mysql/my.cnf
在 mysql
鏡像中默認(rèn)存儲(chǔ)目錄為 /var/lib/mysql
, 這樣存在容器刪除后數(shù)據(jù)丟失的問題
為了防止這一情況產(chǎn)生, 我們需要將外部文件夾掛載到容器的 /var/lib/mysql
中
$ docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d -v ~/docker/data/mysql/datadir:/var/lib/mysql mysql:5.7
此時(shí)我們查看 ~/docker/data/mysql/datadir
文件夾
ll -h ~/docker/data/mysql/datadir
發(fā)現(xiàn)已經(jīng)在該文件夾內(nèi)生成了一些
mysql
的初始化文件
關(guān)于
mysql
鏡像的更多信息可在
hub.docker.com 中對(duì)應(yīng)的
鏡像詳情 查看
關(guān)于其他如
redis
,
nginx
,
mongo
等鏡像的搭建及配置皆可在
hub.docker.com 中搜索查看
** 如果希望更加系統(tǒng)的學(xué)習(xí) Docker
信息, 請(qǐng)查看 官網(wǎng)文檔**
如果想查看中文文檔, 可以去看 Docker —— 從入門到實(shí)踐
相關(guān)資料
Docker 官方文檔
Docker —— 從入門到實(shí)踐
labs
-
參考自 Docker — 從入門到實(shí)踐
-
參考自 Manage Docker as a non-root user