docker exec –it 鏡像 /bin/bash 進入容器
docker logs 容器id 查看容器運行日志
docker version ## 顯示 Docker 版本和信息
docker info ##輸出docker應(yīng)用的信息
docker inspect # 檢查 task 或 container
docker swarm命令
docker swarm leave –force # 從管理端關(guān)閉 swarm 的一個節(jié)點
docker swarm init
docker swarm join –-token :2377
docker pull 鏡像
執(zhí)行 Docker 鏡像
docker run hello-world
docker build -t friendlyhello . # 使用當(dāng)前目錄下的 Dockerfile 創(chuàng)建鏡像
docker run -p 4000:80 friendlyhello # 運行鏡像 “friendlyname” mapping port 4000 to 80
docker run -d -p 4000:80 friendlyhello # 后臺運行鏡像,detached 模式
docker login # 用 Docker 憑證在當(dāng)前 CLI 會話中登錄
docker tag username/repository:tag # 給要上傳到 registry 的鏡像打標(biāo)記
docker push username/repository:tag # 將已經(jīng)打標(biāo)記的鏡像上傳到 registry
docker run username/repository:tag # 從 registry 運行鏡像
docker清理命令
docker image prune 命令可以清理未使用的鏡像。通過 -a 標(biāo)志可以刪除沒有被已有容器使用的所有鏡像,默認情況下,系統(tǒng)會提示是否繼續(xù)。要繞過提示,請使用 -f 或 –force 標(biāo)志。
$ docker image prune -a –filter “until=24h”
下面的命令只會刪除沒有 keep 標(biāo)簽的卷:
$ docker volume prune –filter “l(fā)abel!=keep”
下面的命令只會刪除 24 小時前創(chuàng)建的網(wǎng)絡(luò):
$ docker network prune –filter “until=24h”
docker system prune 命令是修剪鏡像、容器和網(wǎng)絡(luò)的快捷方式
Docker的image命令
docker image ls
docker image ls -a # 列出所有鏡像
docker image rm # 刪除指定鏡像
docker image rm $(docker image ls -a -q) # 刪除所有鏡像
Docker的container命令
列出 Docker 容器(運行中,所有的,quit 模式下所有的)
docker container ls
docker container ls –all
docker container ls -a # 列出所有的容器,包括不運行的
docker container ls -a –q
docker container stop # 友好的關(guān)閉指定容器
docker container kill # 強制關(guān)閉指定容器
docker container rm # 刪除指定容器
docker container rm $(docker container ls -a -q) # 刪除所有容器
docker container –help
docker的service命令
docker service ls # 列出運行的、關(guān)聯(lián)到應(yīng)用的 service
docker service ps # 列出關(guān)聯(lián)到應(yīng)用的任務(wù) task
docker的stack命令
docker stack ls # 列出 stacks 或應(yīng)用
docker stack deploy -c # 運行指定的 Compose 文件
docker stack rm # 關(guān)閉應(yīng)用
docker-machine命令
docker-machine create –driver virtualbox myvm1 # 創(chuàng)建虛擬機(Mac, Win7, Linux)
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm1 # Win10
docker-machine env myvm1 # 查看節(jié)點基本信息
docker-machine ssh myvm1 “docker node ls” # 列出 swarm 中的節(jié)點
docker-machine ssh myvm1 “docker node inspect ” # 檢查節(jié)點
docker-machine ssh myvm1 “docker swarm join-token -q worker” # 查看加入 swarm 的 token
docker-machine ssh myvm1 # 打開虛擬機的 SSH 會話,”exit” 退出
docker node ls # 在 swarm manager 登錄后,列出 swarm 中的節(jié)點
docker-machine ssh myvm2 “docker swarm leave” # 使 worker 退出 swarm
docker-machine ssh myvm1 “docker swarm leave -f” # 使 master 退出 swarm,關(guān)閉 swarm
docker-machine ls # 列出虛擬機,星號 表明當(dāng)前會話在與哪臺虛擬機交流
docker-machine start myvm1 # 重啟停止運行的虛擬機
docker-machine env myvm1 # 查看 myvm1 的環(huán)境變量和命令eval $(docker-machine env myvm1) # Mac 命令,連接 shell 到 myvm1
& “C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe” env myvm1 | Invoke-Expression # Windows 命令,連接 shell 到 myvm1
DockerCompose參數(shù)詳解
build
build 可以指定包含構(gòu)建上下文的路徑:
1. version: ‘2’
2. services:
3. webapp:
4. build: ./dir
或者,作為一個對象,該對象具有上下文路徑和指定的Dockerfile文件以及args參數(shù)值:
1. version: ‘2’
2. services:
3. webapp:
4. build:
5. context: ./dir
6. dockerfile: Dockerfile-alternate
7. args:
8. buildno: 1
webapp服務(wù)將會通過./dir目錄下的Dockerfile-alternate文件構(gòu)建容器鏡像。
如果你同時指定image和build,則compose會通過build指定的目錄構(gòu)建容器鏡像,而構(gòu)建的鏡像名為image中指定的鏡像名和標(biāo)簽。
1. build: ./dir
2. image: webapp:tag
這將由./dir構(gòu)建的名為webapp和標(biāo)記為tag的鏡像。
context
包含Dockerfile文件的目錄路徑,或者是git倉庫的URL。
當(dāng)提供的值是相對路徑時,它被解釋為相對于當(dāng)前compose文件的位置。 該目錄也是發(fā)送到Docker守護程序構(gòu)建鏡像的上下文。
dockerfile
備用Docker文件。Compose將使用備用文件來構(gòu)建。 還必須指定構(gòu)建路徑。
args
添加構(gòu)建鏡像的參數(shù),環(huán)境變量只能在構(gòu)建過程中訪問。
首先,在Dockerfile中指定要使用的參數(shù):
1. ARG buildno
2. ARG password
3.
4. RUN echo “Build number: buildno”5.RUNscript?requiring?password.sh“password”
然后在args鍵下指定參數(shù)。 你可以傳遞映射或列表:
1. build:
2. context: .
3. args:
4. buildno: 1
5. password: secret
6.
7. build:
8. context: .
9. args:
10. - buildno=1
11. - password=secret
** 注意:YAML布爾值(true,false,yes,no,on,off)必須用引號括起來,以便解析器將它們解釋為字符串。
image
指定啟動容器的鏡像,可以是鏡像倉庫/標(biāo)簽或者鏡像id(或者id的前一部分)
1. image: redis
2. image: ubuntu:14.04
3. image: tutum/influxdb
4. image: example-registry.com:4000/postgresql
5. image: a4bc65fd
如果鏡像不存在,Compose將嘗試從官方鏡像倉庫將其pull下來,如果你還指定了build,在這種情況下,它將使用指定的build選項構(gòu)建它,并使用image指定的名字和標(biāo)記對其進行標(biāo)記。
container_name
指定一個自定義容器名稱,而不是生成的默認名稱。
container_name: my-web-container
由于Docker容器名稱必須是唯一的,因此如果指定了自定義名稱,則無法將服務(wù)擴展到多個容器。
volumes
卷掛載路徑設(shè)置。可以設(shè)置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro),掛載數(shù)據(jù)卷的默認權(quán)限是讀寫(rw),可以通過ro指定為只讀。
你可以在主機上掛載相對路徑,該路徑將相對于當(dāng)前正在使用的Compose配置文件的目錄進行擴展。 相對路徑應(yīng)始終以 . 或者 .. 開始。
1. volumes:
2. # 只需指定一個路徑,讓引擎創(chuàng)建一個卷
3. - /var/lib/mysql
4.
5. # 指定絕對路徑映射
6. - /opt/data:/var/lib/mysql
7.
8. # 相對于當(dāng)前compose文件的相對路徑
9. - ./cache:/tmp/cache
10.
11. # 用戶家目錄相對路徑
12. - ~/configs:/etc/configs/:ro
13.
14. # 命名卷
15. - datavolume:/var/lib/mysql
· 15
但是,如果要跨多個服務(wù)并重用掛載卷,請在頂級volumes關(guān)鍵字中命名掛在卷,但是并不強制,如下的示例亦有重用掛載卷的功能,但是不提倡。
1. version: “3”
2.
3. services:
4. web1:
5. build: ./web/
6. volumes:
7. - ../code:/opt/web/code
8. web2:
9. build: ./web/
10. volumes:
11. - ../code:/opt/web/code
12.
** 注意:通過頂級volumes定義一個掛載卷,并從每個服務(wù)的卷列表中引用它, 這會替換早期版本的Compose文件格式中volumes_from。
1. version: “3”
2.
3. services:
4. db:
5. image: db
6. volumes:
7. - data-volume:/var/lib/db
8. backup:
9. image: backup-service
10. volumes:
11. - data-volume:/var/lib/backup/data
12.
13. volumes:
14. data-volume:
command
覆蓋容器啟動后默認執(zhí)行的命令。
command: bundle exec thin -p 3000
該命令也可以是一個類似于dockerfile的列表:
command: [“bundle”, “exec”, “thin”, “-p”, “3000”]
links
鏈接到另一個服務(wù)中的容器。 請指定服務(wù)名稱和鏈接別名(SERVICE:ALIAS),或者僅指定服務(wù)名稱。
1. web:
2. links:
3. - db
4. - db:database
5. - redis
在當(dāng)前的web服務(wù)的容器中可以通過鏈接的db服務(wù)的別名database訪問db容器中的數(shù)據(jù)庫應(yīng)用,如果沒有指定別名,則可直接使用服務(wù)名訪問。
鏈接不需要啟用服務(wù)進行通信 - 默認情況下,任何服務(wù)都可以以該服務(wù)的名稱到達任何其他服務(wù)。 (實際是通過設(shè)置/etc/hosts的域名解析,從而實現(xiàn)容器間的通信。故可以像在應(yīng)用中使用localhost一樣使用服務(wù)的別名鏈接其他容器的服務(wù),前提是多個服務(wù)容器在一個網(wǎng)絡(luò)中可路由聯(lián)通)
links也可以起到和depends_on相似的功能,即定義服務(wù)之間的依賴關(guān)系,從而確定服務(wù)啟動的順序。
external_links
鏈接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。參數(shù)格式跟 links 類似。
1. external_links:
2. - redis_1
3. - project_db_1:mysql
4. - project_db_1:postgresql
expose
暴露端口,但不映射到宿主機,只被連接的服務(wù)訪問。
僅可以指定內(nèi)部端口為參數(shù)
1. expose:
2. - “3000”
3. - “8000”
ports
暴露端口信息。
常用的簡單格式:使用宿主:容器 (HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可以。
** 注意:當(dāng)使用 HOST:CONTAINER 格式來映射端口時,如果你使用的容器端口小于 60 你可能會得到錯誤得結(jié)果,因為 YAML 將會解析 xx:yy 這種數(shù)字格式為 60 進制。所以建議采用字符串格式。
簡單的短格式:
1. ports:
2. - “3000”
3. - “3000-3005”
4. - “8000:8000”
5. - “9090-9091:8080-8081”
6. - “49100:22”
7. - “127.0.0.1:8001:8001”
8. - “127.0.0.1:5000-5010:5000-5010”
9. - “6060:6060/udp”
在v3.2中ports的長格式的語法允許配置不能用短格式表示的附加字段。
長格式:
1. ports:
2. - target: 80
3. published: 8080
4. protocol: tcp
5. mode: host
target:容器內(nèi)的端口
published:物理主機的端口
protocol:端口協(xié)議(tcp或udp)
mode:host 和ingress 兩總模式,host用于在每個節(jié)點上發(fā)布主機端口,ingress 用于被負載平衡的swarm模式端口。
restart
no是默認的重啟策略,在任何情況下都不會重啟容器。 指定為always時,容器總是重新啟動。 如果退出代碼指示出現(xiàn)故障錯誤,則on-failure將重新啟動容器。
1. restart: “no”
2. restart: always
3. restart: on-failure
4. restart: unless-stopped
environment
添加環(huán)境變量。 你可以使用數(shù)組或字典兩種形式。 任何布爾值; true,false,yes,no需要用引號括起來,以確保它們不被YML解析器轉(zhuǎn)換為True或False。
只給定名稱的變量會自動獲取它在 Compose 主機上的值,可以用來防止泄露不必要的數(shù)據(jù)。
1. environment:
2. RACK_ENV: development
3. SHOW: ‘true’
4. SESSION_SECRET:
5.
6. environment:
7. - RACK_ENV=development
8. - SHOW=true
9. - SESSION_SECRET
** 注意:如果你的服務(wù)指定了build選項,那么在構(gòu)建過程中通過environment定義的環(huán)境變量將不會起作用。 將使用build的args子選項來定義構(gòu)建時的環(huán)境變量。
pid
將PID模式設(shè)置為主機PID模式。 這就打開了容器與主機操作系統(tǒng)之間的共享PID地址空間。 使用此標(biāo)志啟動的容器將能夠訪問和操作裸機的命名空間中的其他容器,反之亦然。即打開該選項的容器可以相互通過進程 ID 來訪問和操作。
pid: “host”
dns
配置 DNS 服務(wù)器??梢允且粋€值,也可以是一個列表。
1. dns: 8.8.8.8
2. dns:
3. - 8.8.8.8
4. - 9.9.9.9