docker是項目開發部署相關工具容器,本文經過官網等資料閱讀學習,簡單介紹一些基本使用操做:html
爲何會出現docker,常使用項目部署開發的人天然能理解,由於docker讓服務部署更簡單。java
下面說一下docker是什麼,有什麼用,等同與說明爲何會出現docker這種技術。mysql
docker主要是讓服務部署更高效。官網稱之爲容器 container,在項目開發中開發環境/測試環境/生產環境經過docker容器技術統一,減小環境偏差致使產生的錯誤,大大提升開發效率。linux
我認爲docker是一種鏡像服務技術,他將原來linux上運行的服務所有放在docker內運行,linux和docker之間有必定的物理隔離和軟件版本隔離效果,而且能夠複製多個程序而避免從新安裝,很好的提升服務器項目部署相關的工做效率,且有增長服務器安全係數。nginx
(甚至介紹經過docker,可讓linux上的程序也能在windows照常運行,目前還沒試過)git
當你有一個服務開發部署好了,服務器是linux,裏面安裝了mysql,nginx,java-application,redis,jdk8;如今服務器要擴展,一樣的服務部署到多臺服務器,要怎麼作才高效? 從新安裝mysql,nginx,jdk8 ,而後各類配置端口密碼各類參數,再從新啓動每一個程序? 當你做爲一個部署負責人的時候會以爲重複繁瑣,而且配置細節不少,不當心會出差錯,這時候鏡像技術docker就能使服務部署快速,並避免少犯錯,這時候docker可真是個好東西。github
將原來的運行服務放在docker內運行,須要部署到其餘服務器時,打包整個docker生成docker鏡像,而後複製docker到新的linux服務器啓動就行了,mysql,nginx,redis,等等不少東西不須要從新配置部署,只須要啓動鏡像docker和一些個性化的腳本。web
# 首先安裝須要用到的工具 yum install -y yum-utils #安裝工具 環境 #指定存儲庫 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查詢可安裝版本redis
yum list docker-ce --showduplicates | sort -r # 查看可用安裝版本 ## 找出stable版本的,表示穩定版,本次選的是 ## docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable ## ## 安裝 yum install docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io ## 規則 3:18.09.0-3.el7 爲版本信息,那麼安裝就是 ce-後面加上18.09.0 ## 取3:18.09.0-3.el7的':'和'-'之間的字符"18.09.0"
運行測試sql
docker run hello-world
拉取一個 redis 容器 並運行
# 拉取 redis容器 docker pull redis # 查看當前容器有哪些 docker images # 運行容器 -p 指定端口 docker run -p 3123:6379 --name some-redis -d redis redis-server --appendonly yes # 經過docker 啓動redis服務 # 訪問服務器3123端口時,映射到docker的6379端口 # docker服務名 some-redis # --appendonly yes redis持久化,容器關閉後再啓動,redis內的數據不失效
docker運行後,咱們能夠進入容器,上面是redis服務容器,能夠理解爲一個centos服務器裏面啓動了redis服務,咱們能夠鏈接進去,而且裏面是一個虛擬的linux環境
# 查看在運行的docker容器服務 docker -ps # exec 表示鏈接進入容器 32jd3h21正在運行的容器的id docker exec -it 32jd3h21 /bin/bash
當咱們定義好一個容器的環境,咱們能夠將容器鏡像上傳的倉庫,用於同一開發的環境,當其餘人員也參與當前項目開發是,拉去同一個docker鏡像容器,避免了項目代碼運行環境差別。
docker hub 是專門用於docker鏡像服務的倉庫,咱們須要先註冊賬號,註冊好後,建立倉庫(和github相似)
讓後咱們在服務器裏面先登陸dockerhub帳號,而後將須要上傳的鏡像push到倉庫
# 查看鏡像 docker images a4sdfa2 爲某個docker容器的id # 複製建立一個要提交到遠程的鏡像容器 docker commit -a "author" -m "description" a4sdfa2 web1 # 設置倉庫 web1 本地容器名 username dockerhub用戶名 rep-url 用戶的倉庫名 v2 標籤名 docker tag web1 username/rep-url:v2 # 拉去上傳的docker docker pull username/rep-url:web1 # 最後經過pull命令拉取鏡像
通常項目開發,代碼修改較頻繁,容器主要是用於同一運行環境,不該含有具體開發項目代碼。
給團隊使用的docker容器應該是定義代碼運行環境,而不是代碼自己。每一個開發人員拉取了docker容器後,負責業務模塊不一樣,極可能要編寫的代碼也不同,容器放入代碼反而多餘;代碼同步這快應該是經過git,svn等代碼倉庫工具完成更合適。