docker安裝
安裝請參考docker官網(wǎng):https://docs.docker.com/engine/installation/linux/ubuntulinux/
容器相關命令
- docker啟動编矾、重啟影晓、關閉
sudo docker start | restart | stop
- 查看docker程序是否正常工作
sudo docker info
- 創(chuàng)建一個交互式shell容器益老,并為容器命名,名字可以包含字符:a-z,A-Z,0-9,下劃線,圓點窿冯,橫線。用正則表示[a-zA-Z0-9_.-]
sudo docker run --name first_container -it ubuntu /bin/bash
- 查看當前系統(tǒng)中的容器列表
docker ps -a
docker ps -a -l #列出最后一次運行的容器
- 重新啟動已經(jīng)停止的容器
sudo docker start first_container
sudo docker start container_id #也可以用從其id啟動
sudo docker start container_name #重新啟動一個容器
- 創(chuàng)建守護式容器,使用-d參數(shù)解愤,docker容器會在后臺運行
sudo docker run --name container_name -d ubuntu /bin/bash
- 停止守護進程
sudo docker stop container_name
- 獲取守護式容器日志
sudo docker logs container_name
sudo docker logs -f container_name #監(jiān)控docker日志
sudo docker logs --tail 10 container_name #獲取日志最后10行
sudo docker logs --tail 0 -f container_name #跟蹤某個容器的最新日志而不必讀取日志文件
sudo docker logs -ft container_name #-t標志為每條日志加上時間戳骤素,方便調試
- 查看容器內的進程
sudo docker top container_name
- 自動重啟容器
sudo cocker run --restart=always --name container_name -d ubutu
--restart:always,on-failure
--restat=on-failure:5,自動嘗試重啟五次
- 查看容器
sudo docker inspect container_name
docker inspect命令會對容器進行詳細的檢查,然后返回其配置信息异剥,包括名稱瑟由、命令、網(wǎng)絡配置的數(shù)據(jù)冤寿,也可以用-f或者--format標志來選定查看結果歹苦。
sudo docker inspect --format='{{.State.Running}}' container_name
#查看多個容器
sudo docker inspect --format='{{.Name}} {{.State.Running}}' container_name_1 container_name_2
/var/lib/docker目錄存放著docker鏡像、容器以及容器的配置督怜,所有的容器都保存在/var/lib/docker/containers目錄下
- 刪除容器
sudo docker rm container_name | container_id
運行的docker容器是無法刪除的殴瘦,必須先通過docker stop或者docker kill命令停止容器,才能刪除号杠。
- 刪除全部容器(-a標志代表列出所有容器蚪腋,-q表示只需要返回容器的ID。)
sudo docker rm `docker ps -a -q`
鏡像相關命令
- 列出docker鏡像
sudo docker images
本地鏡像都保存在dockers宿主機的/var/lib/docker目錄下究流。鏡像從倉庫下載辣吃,鏡像保存在倉庫中,而倉庫存在于Registry中芬探,默認的Registry是由Docker公司運營的公共Registry服務神得,及Docker Hub
- 拉取ubuntu鏡像
docker pull ubuntu #拉取鏡像
docker pull ubuntu:14.04 #拉去tag為14.04的鏡像
指定倉庫的標簽是一個好習慣,這樣可以準確的制定容器來源于哪里偷仿。
Docker Hub有兩種倉庫:用戶倉庫和頂層倉庫哩簿,用戶倉庫的鏡像由Docker用戶創(chuàng)建,頂層倉庫由Docker內部人來管理酝静。
- 查看鏡像
sudo docker images container_name
- 查找鏡像
sudo docker search container_name
- 構建鏡像
- 創(chuàng)建Docker Hub賬號
- 登陸Docker Hub
sudo docker login
- 用docker的commit命令創(chuàng)建鏡像
基于ubuntu鏡像創(chuàng)建一個新鏡像
#創(chuàng)建一個要進行修改的定制容器 sudo docker run -i -t ubuntu /bin/bash #安裝apache軟件包 apt-get -yqq update apt-get -y install apache2 #退出當前容器 #提交定制容器 sudo docker commit 4aab3ce3cb86 jamtur01/appache2 #檢查新創(chuàng)建的鏡像 sudo docker images jamtur01/apache2 #在提交鏡像時指定更多的數(shù)據(jù)(包括標簽)來詳細描述所做的修改 sudo docker commit -m="A new custom image" --author="James Turnbull" 4aab3ce3cb76 jamtur01/apache2:webserver #使用docker inspect查看新創(chuàng)建的鏡像詳細信息 sudo docker inspect jamtur01/apache2:webserver #從提交的鏡像運行一個新容器 sudo docker run -t -i jamtur01/apache2:webserver /bin/bash
- 用dockerfile構建鏡像
并不推薦使用docker commit的方法來構建鏡像节榜,相反推薦使用Dockerfile的定義文件和docker build命令來構建鏡像。Dockerfile使用基于DLS語法的指令來構建一個Docker鏡像别智,之后使用docker build命令基于該dockerfile中的指令構建一個新的鏡像宗苍。步驟:(我們將創(chuàng)建一個包含簡單web服務器的docker鏡像)- 創(chuàng)建一個目錄并在里面創(chuàng)建初始化的Dockerfile
mkdir static_web cd static_web touch Dockerfile
- dockerfile文件內容
#第一個Dockerfile #Version:0.0.1 FROM ubuntu:14.04 MAINTAINER James Turnbull "james@example.com" RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html expose 80
- dockerfile指令解釋
Docker大體按照如下流程執(zhí)行Dockerfile中的指令- Docker從基礎鏡像運行一個容器。
- 執(zhí)行一條指令,對容器做出修改讳窟。
- 執(zhí)行類似docker commit的操作让歼,提交一個新的鏡像層。
- Docker在基于剛提交的鏡像運行一個新容器丽啡。
- 執(zhí)行Dockerfile中的下一條指令谋右,直到所有指令都執(zhí)行完畢。
- 基于dockerfile鏡像構建新鏡像
執(zhí)行docker build命令時补箍,dockerfile中的指令都會被執(zhí)行并且被提交改执,并且在該命令成功結束后返回一個新鏡像。
使用docker build命令來構建新鏡像坑雅,通過-t為新鏡像設置了倉庫和名稱辈挂。在本例倉庫為jamtur01,鏡像名為static_web。建議為自己的鏡像設置合適的名字以方便追蹤和管理霞丧。也可以設置標簽呢岗,如:#運行Dockerfile cd static_web sudo docker build -t="jamtur01/static_web" .
sudo docker build -t="jamtur01/static_web:v1" .
上面告訴docker到本地目錄中去找Dockerfile文件,也可以指定一個Git倉庫的源地址來指定Dockerfile的位置蛹尝。
sudo docker build -t="jamtur01/static_web:v1 git@github.com:jamtur01/docker-static_web
- 忽略dockerfile的構建緩存
sudo docker build --no-cache -t="jamtur01/static_web"
- 查看新鏡像
sudo docker images jamtur01/static_web
- 查看鏡像如何構建出來的
sudo docker history22d47c8cb3jkk
- 從新鏡像啟動一個容器
sudo docker run -d -p 80 --name static_web jamtur01/static_web nginx -g "daemon off;"
-d:說明在后臺運行
-p:控制docker在運行時應該公開哪些網(wǎng)絡端口給宿主機,-p還可以靈活的管理容器和宿主機之間的端口映射關系
sudo docker run -d -p 80:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
sudo docker run -d -p 8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
#端口限制在特定的IP上
sudo docker run -d -p 127.0.0.1:8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
-P:可以用來對外公開在Dockerfile中EXPOSE指令中設置的所有端口
sudo docker run -d -P --name static_web jamtur01/static_web nginx -g "daemon off;"
運行一個容器時后豫,Docker可以通過兩種方法來在宿主機上分配端口。
* Docker可以在宿主機上隨機選擇一個位于49153~65535的一個比較大的端口好來映射到容器中的80端口上突那。
* 可以在Docker宿主機中指定一個具體的端口好來映射到容器中的80端口上挫酿。
- 查看docker端口映射情況
sudo docker ps -l
##指定要查看映射情況的容器ID和容器的端口號
sudo docker port container_id 80