docker 是一個能夠放東西的容器,那東西是什麼?能夠是redis、nginx、mysql。總之你能在系統上安裝的均可以在dokcer裏面安裝。java
蠻吉:爲何這麼作?
集中管理,使用方便,安裝更方便,不用到各各目錄上去找配置文件啊,啓動文件之類的。mysql
「在咱們測試環境明明是好的啊?」,這句話是否是很熟悉?(壞笑)linux
好比咱們代碼須要的組件,redis在測試環境有不少配置須要修改,可是在線上環境若是少了一個甚至版本不一致了,那麼在上線的時候,都會出現不可預料的問題。nginx
那麼有了docker 就能夠把組件、環境、配置封裝到一個鏡像,交給運維就能夠避免許屢次臉紅脖子粗的事情了。
封裝好的鏡像就能夠在不一樣的系統中運行,這封裝和處處運行的思想和Java比較一致。redis
名詞解釋:
鏡像:相似於安裝包。
容器:一個應用對應一個容器,好比,我安裝一個redis,一個nginx ,那麼就是兩個容器,分別裝有redis和nginx。
用java思想理解:鏡像是對象,容器是實例spring
咱們先安裝一個nginx試試,
第一步搜索一下倉庫有沒有nginx的鏡像sql
docker search nginx
咱們發現列出了不少,那麼咱們須要的是第一個,把它拉下來(默認最新版)須要特訂版本後面加上冒號和版本號。docker
docker pull nginx
這時候可使用 docker images
命令查看已經下載下來的鏡像們。json
有了鏡像咱們就安裝吧centos
docker run -p 80:80 -d --name nginx nginx
安裝成功!對!你沒有看錯。
我來解釋一下上面那條命令的參數,
docker ps 能夠查看正在運行的容器,dockers ps -a 查看全部容器。
蠻吉:若是我想修改nginx 的配置怎麼辦?
docker exec -it [CONTAINER ID] bash
進入容器裏面找到並修改,exit
命令退出容器。也能夠在啓動的時候使用-v
參數掛載目錄,給容器和宿主機指定目錄作個映射。只須要在宿主機指定目錄操做,不須要進入容器。-v
可使用多個。
我先在主機新建好了目錄和配置文件。
docker run -d -p 8082:80 --name nginx3 -v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /app/nginx/logs:/var/log/nginx nginx
若是安裝redis 也是那麼簡單,兩條命令就能夠完成安裝
docker pull redis docker run -p 6379:6379 -d --name redis-6379 redis
當你 docker exec -it [CONTAINER ID] bash
進入容器後發現,原來裏面是一個精簡版的linux.
蠻吉:那咱們能不能本身製做鏡像?
答案是確定的,
咱們就用運行jar包爲例。
好比我寫了一個spring-boot 的項目,把它打成jar包 :datashare-0.0.1-SNAPSHOT.jar
,
怎麼打jar包?先這樣,而後那樣,最後再這樣一下就行了。
蠻吉:怎麼運行?
java -jar datashare-0.0.1-SNAPSHOT.jar &
?nohup java -jar datashare-0.0.1-SNAPSHOT.jar >info.log &
?
no no no
我要用docker 部署。
用docker 部署 就要先有鏡像,製做鏡像只須要一個Dockerfile文件就能夠啦
如下是Dockerfile的內容:
# openjdk 基礎鏡像 是我pull到本地的,運行Jar 須要jdk 環境 FROM openjdk # ?做者簽名 MAINTAINER MSHU # ?簡化 jar 的名字路徑 COPY datashare-0.0.1-SNAPSHOT.jar datashare.jar # ?執行 java -jar 命令 CMD java -jar datashare.jar # ?設置對外端口爲 8089 EXPOSE 8089
運行Jar 須要jdk 環境,因此我提早docker pull openjdk
到本地了。
將咱們新建的 Dockerfile 和datashare-0.0.1-SNAPSHOT.jar
放一塊兒,該目錄不要有其餘文件。
運行 docker build -t datashare .
開始製做。
datashare
表明製做的鏡像名稱,.
表明使用當前目錄的 Dockerfile 。鏡像作好了放入容器吧。docker run -p 8089:8089 -d --name datashare datashare
成功了!
蠻吉:若是我想把這個鏡像拷貝出來,在我同事電腦運行行不行?
知足你!docker save -o datashare.img datashare
在當前目錄導出名爲 datashare.img 的鏡像。
而後複製到你同事電腦上並運行docker load -i datashare.img
就導入了。
官方倉庫在國外,下載緩慢,使用如下方法能夠更快!和 maven 一個道理。
centos7以上:
修改 /etc/docker/daemon.json
文件,若是沒有就新建 !
內容:
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
重啓docker不能忘 !
systemctl restart docker
docker pull [nginx] | 下載容器 |
docker ps | 查看正在運行的容器 |
docker ps -a | 查看全部容器 |
docker exec -t -i [id] bash | 根據id進入對應的軟件目錄 |
docker start [id] | 啓動某個容器 |
docker stop [id] | 中止某個容器 |
docker restart [id] | 重啓容器 |
docker images | 查看全部已安裝的鏡像 |
docker inspect [id] | 查看啓動容器的掛載信息 |
docker rm [id] | 刪除容器 |
docker rmi [鏡像id] | 刪除鏡像 |
docker logs -f -t --tail 200 | 容器ID 查看容器日誌 |
systemctl enable docker | 設置開機啓動 |
service docker start | 啓動docker服務 |
usermod -G docker [用戶名] | 給指定用戶添加權限 |
docker cp [id]:目錄 /主機目錄 | 複製容器某路徑下的文件(夾)到主機某路徑下的文件(夾) |
docker commit -m="提交的描述信息" -a="做者" [原容器id:[標籤名]] | 將容器封裝成鏡像 |
docker run 後面也有不少參數,我知道的也很少,各位自行搜索吧,我去看《魁拔》啦,真心話真好看!