天天看點

關于Manjaro下Docker的使用

筆者初次接觸docker,在下面介紹下自己的一些心得,如有錯誤希望能及時指正。

先簡單介紹一下docker,我們自己在做一些小項目的時候想在其他人的主機上運作很容易遇到安裝環境不同導緻項目無法運作的情形,或者自己在學習新技術的時候配置環境可能會出現一些難搞的錯誤,這時使用docker可以很容易的化解這些問題。

docker采用了一種集裝箱的思想,每一個内容都封閉在一個集裝箱内,在一般情況下不同的集裝箱之間互不幹涉,使用集裝箱内的内容隻需要運作某個集裝箱就可以。使用時需要拉取一個叫鏡像的東西(可以把它了解為我們安裝虛拟機時下載下傳的那個鏡像),這個鏡像内包含了想要使用的全部内容,通過運作鏡像創造一個容器(容器類似于虛拟機系統)。通過使用容器,完成鏡像内項目的運作。

#Manjaro下安裝docker是非常友善的,隻需要一行

yay -S docker
           

然後啟動docker

systemctl start docker
           

如果想開機自啟動docker的話

systemctl enable docker
           

下面通過以使用mysql鏡像為例,簡單示範docker的使用方法。

我們使用mysql需要拉取mysql的鏡像,docker擁有預設的中央倉庫,不過不使用代理速度會比較慢,推薦大家從

http://hub.daocloud.io/ 擷取鏡像源

關于Manjaro下Docker的使用
關于Manjaro下Docker的使用
關于Manjaro下Docker的使用

複制拉取指令,然後運作

sudo docker pull daocloud.io/library/mysql:5.7.4
           

等待pull complete,輸入

docker images
           

可以檢視目前拉取過的所有鏡像,每個鏡像都有一個id,

關于Manjaro下Docker的使用

删除某個鏡像隻需要運作

sudo docker rmi [鏡像id]
#例如 sudo docker rmi 0d  //這裡删除redis鏡像隻用了0d是因為前兩位沒有重複的,docker支援這種
						 //删除方式,當然也可以寫全id
           

此時隻是相當于下載下傳完一個系統鏡像,想要使用"虛拟機"當然要安裝這個鏡像産生一個容器

sudo docker run -d -p 主控端端口号:容器内端口号 --name  自定義容器名稱  鏡像id||鏡像名稱:tag
#mysql比較特殊,需要加一個指令設定初始密碼
#例如  
#sudo docker run -d -p 3306:3306 --name mysql-5.7.4 -e MYSQL_ROOT_PASSWORD=mysql 0d 
# -d 代表背景運作 -p 是設定端口号 --name 是設定容器名稱 -e是和後面的指令是設定初始密碼為mysql 
           

運作指令

sudo docker ps 
           

可以檢視目前運作的容器 ps 後可以加參數-a 檢視目前建立的所有容器

停止容器指令

sudo docker stop 容器id
           

啟動容器指令

sudo docker start 容器id
           
關于Manjaro下Docker的使用

看到這可能有人會想,我怎麼才能使用這個docker中的mysql呢?其實作在通過端口映射,mysql已經相當于安裝在主控端上了,隻要将sql檔案導入容器内,本地項目可以正常操作資料庫。

如何導入sql檔案呢?有兩種方法,一種是通過docker cp指令将本地檔案複制到容器内,然後進入容器進入mysql指令行,使用source指令釋放sql檔案中的内容;另外一種是通過資料卷的方式,直接将容器内的某個空檔案映射到主控端的某個空檔案,通過對主控端空檔案内添加檔案,實作對容器添加檔案。

下面介紹第一種方式,

sudo docker exec -it 容器id bash //進入容器指令
           
關于Manjaro下Docker的使用

可以看到容器類似于一個linux虛拟機,可以在該容器内使用linux指令,上圖舉例進入了mysql指令行。

回到主控端環境。運作

sudo docker cp 檔案路徑 容器id:容器内部路徑
#例如 sudo docker cp ~/xxx.sql c7:/usr/local/mysql/
           

将本地home目錄下的xxx.sql檔案複制到c7開頭的容器的/usr/local/mysql/目錄下

通過上圖指令再次進入容器内mysql指令行下,進行建立資料庫,釋放sql檔案内容。

本地通過workbench連接配接localhost:3306 看到是可以正常通路資料庫内容的。

關于Manjaro下Docker的使用

有時間會再介紹一下個人了解的 如何進行通過資料卷添加檔案和自定義鏡像實作項目工程及其環境的封裝。