docker學習最全最易理解,看完上手
隨著公司專案的增多,有java,nodejs,pathon等專案的部署與開發,不可能在伺服器上裝有各自的環境去適應千奇百怪的開發語言開發的專案,故採用docker來管理這些專案,下面是我學習docker以來自己總結的一些實用的docker命令和乾貨
docker好處:
1.一次打包,到處執行,
2.環境隔離,對環境變數沒有要求,全都在docker內,應用相互之間沒有影響
3.啟動速度快
docker安裝成功後會多一個docker專用ip
yum install net-tools
docker預設倉庫是dockerhub
docker常用命令:
sudo gpasswd -a 使用者名稱 docker 將使用者加入docker組
sudo groupadd docker 新增docker組
映象:
docker tag 映象id 新映象名:標籤 給映象id對應映象打名字與標籤
docker run -it -d -p 80(對映):8080(專案) 映象名:版本號 (容器啟動生成id)
docker run -it -p 8080:8080 -v `pwd`/jdbc.properties:/usr/local/tomcat/classpath/jdbc.properties -d 192.168.9.69:5000/doctor:v1.0.3 (掛載本地檔案到容器裡面執行)
docker search 映象名 在dockerhub上搜索映象
docker ps -a 檢視容器
docker push 映象名 需登入dockerhub docker login
docker rmi 映象名
docker pull 映象名
docker run 映象名
docker images
docker inspect 映象id 檢視映象詳情
容器:
docker create --name 容器名 已有映象名 建立容器
docker logs -f 容器id 檢視日誌
docker export 容器id>test.tar(匯出檔名) 匯出容器
cat test.tar(檔名) | docker import - 映象名:標籤 匯入容器成為映象
docker stop 容器id
docker start 容器id
docker rm 容器id
docker exec -it 容器id bash 來到容器內部 exit退出
倉庫(私有倉庫是倉庫,上傳上來的映象是存在倉庫裡,只有pull下來以後才能通過docker images看見該映象):
docker pull registry 拉取registry映象
docker run -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker_registry.db -d --name registry -p 5000:5000 registry 構建docker私有倉庫命令
設定成功後上傳的映象或下載的映象必須帶有域名,例如docker push host_ip:5000/映象名 ,如果上傳不成功, 通過修改docker的配置檔案“etc/systemconfig/docker",重啟docker來解決這個問題。(find / -name docker)
但發現docker1.12.3版本並無此檔案,根據網上建立此檔案,並填入相應內容,重啟docker無效果,仍然報此錯誤。
解決方法:
在”/etc/docker/“目錄下,建立”daemon.json“檔案。在檔案中寫入:
{ "insecure-registries":["192.168.1.100:5000"] }
儲存退出後,重啟docker。systemctl restart docker 然後啟動相應容器,問題解決
docker run -d --name registry_ui -p 8080:8080 -e REG1=http://<registry_ip>:5000/v1/ atcol/docker-registry-ui 本地倉庫在頁面展示,訪問地址:http://host_ip:8080,<registry_ip>是映象執行ip,可以
通過 docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID(容器id)獲得,docker logs -f 容器id/映象id 檢視啟動情況
建立映象的方法有三種:
1.基於已有映象的容器建立 docker commit -a "作者" -m "提交資訊" 容器id 新映象名
2.基於本地模板的匯入 docker save -o test.tar(檔名) 映象id 映象遷出命令(壓縮映象) docker load --input test.tar(檔名) 映象載入命令(解壓映象)
3.基於dockerfile建立 docker build -t="映象名" dockerfile檔案路徑(.代表當前路徑)
本機和容器之間的檔案傳輸(本機傳到容器) :
docker cp 本地檔案路徑 容器ID全稱:容器路徑 比如用於往tomcat容器中加入專案
本機和容器之間的檔案傳輸(容器傳到本機) :
docker cp 容器ID全稱:容器檔案路徑 本地路徑
docker開埠使得能夠通過http訪問api(遠端呼叫api,需停掉docker)
# 檢視配置檔案位於哪裡
systemctl show --property=FragmentPath docker
#編輯配置檔案內容,接收所有ip請求
sudo gedit /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376
#重新載入配置檔案,重啟docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
docker官方文件上有相關說明(Configure and run Docker on various distributions),ubuntu上是可行的
sudo vi /etc/default/docker
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
也可以不通過配置,直接用這種方式啟動,這種方式不是以守護式的方式啟動服務的,但是可以通過nohup命令掛起, 該命令的一般形式為:nohup command &
docker daemon -H=0.0.0.0:2375 dockerd -D -H 0.0.0.0:2376(會列出所有api的訪問路徑)
docker daemon=dockerd
Dockerfile例子
FROM tomcat:7
MAINTAINER 山姆大叔 "[email protected]"
ENV WORK_PATH /usr/local/tomcat/bin
ENV TOMCAT_CLASSPATH_FILE setclasspath.sh
RUN rm $WORK_PATH/$TOMCAT_CLASSPATH_FILE
COPY ./$TOMCAT_CLASSPATH_FILE $WORK_PATH/
RUN mkdir -p /usr/local/tomcat/classpath
RUN mkdir -p /usr/local/tomcat/webapps/filetool
ADD ./jdbc.properties /usr/local/tomcat/classpath/
ADD ./filetool /usr/local/tomcat/webapps/filetool/
ADD ./doctor.war /usr/local/tomcat/webapps/
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
附:docker maven tomcat java安裝 http://knight-black-bob.iteye.com/blog/2399199