1. 程式人生 > 其它 >Docker相關命令及引數

Docker相關命令及引數

容器

#建立容器的時候指定啟動引數,自動掛載localtime檔案到容器內
docker run --name <name> -v /etc/localtime:/etc/localtime:ro
#殺死一個容器
docker kill Name or ID  
#啟動所有的容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#關閉所有的容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

#清理所有處於終止狀態的容器
docker container prune
#在建立容器時新增該命令可以跟隨Docker啟動
docker run --restart=always
#如果已經啟動了則可以使用如下命令:
docker update --restart=always <CONTAINER ID>
#進入容器
docker exec -it container_id bash  #進入容器後開啟新的終端
docker attach container_id   #進入容器正在執行的終端
#刪除靜止狀態的容器
docker container rm  xxx
#強制刪除容器
docker -rm -f  CONTAINERID
#刪除所有的容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker rm$(docker ps -a -q)

#檢視所有已經建立的包括終止狀態的容器
docker container ls -a
#檢視容器日誌
docker logs 容器
#檢視某容器最後10行日誌
sudo docker logs -f -t --tail 10 容器
#顯示容器內執行的程序
docker top 
#檢視最後退出的容器的ID
docker ps -l 
#檢視容器詳細資訊
docker inspect container_id
#檢視容器的變化
docker diff containerr_id
#檢視容器佔用系統資源
docker stats
#檢視指定容器
docker stats --no-stream registry 1493

#從容器中複製檔案到宿主機
docker cp 容器:/usr/local/test.js /tmp
#從宿主機複製檔案到容器
docker cp /opt/test.js 容器:/usr/local/test.txt

映象

#刪除本地映象;
docker image rm [選項] <映象1> [<映象2> ...]
#刪除所有的映象
docker rmi $(docker images | awk '{print $3}' |tail -n +2)
#刪除所有不使用的映象
docker image prune -f -a

#檢視所有映象
docker images
#搜尋線上可用映象名
docker search <映象名> 
#搜尋Docker Hub上的映象
ocker search jenkins
#檢視映象、容器、資料卷所佔用的空間。
docker system df
#檢視映象的歷史記錄
docker history nginx:latest 

#將容器的儲存層儲存下來成為映象。在原有映象的基礎上, 再疊加上容器的儲存層, 並構成新的映象。 以後執行這個新映象的時候, 就會擁有原有容器最後的檔案變化。
docker commit [選項] <容器ID或容器名> [<倉庫名>[:<標籤>]]

# 批量清理臨時映象檔案
sudo docker rmi $(sudo docker images -q -f danging=true)

容器/映象遷移

# 映象匯出:保留原映象的名稱和標籤
docker save <IMAGE NAME>:<IMAGE TAG> > save.tar
# 映象匯出:不保留原映象的基本資訊,載入load後需執行tag命令重新命名none映象
docker save <IMAGE ID> > save.tar 
#映象匯入
docker load < save.tar

#容器匯出
docker export <CONTAINER ID> > export.tar
#容器匯入
docker import export.tar <IMAGE NAME>:<IMAGE TAG>
#把一個正在執行的容器變成一個新的映象。
docker commit <CONTAINER ID> <IMAGE NAME>:<IMAGE TAG>
#docker載入新的映象後repository和tag名稱都為none的解決方法
docker tag <IMAGE ID> <IMAGE NAME>:<IMAGE TAG>

save和export區別

  1. docker save儲存的是映象(image),docker export儲存的是容器(container);
  2. docker load用來載入映象包,docker import用來載入容器包,但兩者都會恢復為映象;
  3. docker load不能對載入的映象重新命名,而docker import可以為映象指定新名稱。

常用服務部署

Jenkins

docker run -d --name jenkins \
-u root \
-v /home/dockerData/Jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 -p 50000:50000 \
jenkinsci/blueocean

MySQL

docker run --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=password \
-p 3306:3306 \
--privileged=true \
-d 192.168.3.210/test/mysql:8.0

version: '3.2'

services:
  mysql:
    image: mysql:8.0
    volumes: 
      - type: volumes
        source: /dockerData/mysql/log
        target: /var/log/mysql
      - type: volumes
        source: /dockerData/mysql/data
        target: /var/lib/mysql
      - type: bind
        source: /dockerData/mysql/conf
        target: /etc/mysql
      - type: volumes
        source: /dockerData/mysql/mysql-files
        target: /var/lib/mysql-files
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports: 
      - "3306:3306"
    privileged: true

Nginx

docker run --name nginx-test -p 7700:80 -d nginx

將容器內Nginx配置檔案拷貝到主機

docker cp CONTAINER_ID:/etc/nginx/nginx.conf ~/nginx
docker cp COMTAINER_ID:/etc/nginx/conf.d/default.conf ~/nginx/conf.d

~/nginx tree
.
├── conf.d
│   └── default.conf
├── logs
│   ├── access.log
│   └── error.log
├── nginx.conf
└── html
    └── index.html

修改配置檔案~/nginx/conf.d/default.conf

location / { 
        //root   /usr/share/nginx/html;
        root   /opt/www;
        index  index.html index.htm;
    }

~/nginx/www目錄下建立檔案index.html

<!DOCTYPE html>

<html>
<head>
<title>Docker Nginx</title>
</head>

<body>
Hello Nginx
</body>

</html>

重新啟動nginx

docker run -d -p 7171:80 -p 7172:9090 \
--name nginx-3  \
-v /mydata/nginx-3/html:/usr/share/nginx/html \
-v /mydata/nginx-3/logs:/var/log/nginx \
-v /mydata/nginx-3/conf.d:/etc/nginx/conf.d \
-v /mydata/nginx-3/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx-data:/usr/share/nginx/files \
nginx:1.17

容器外執行

docker exec nginx nginx -s reload
安裝Tomcat
docker run --name vk-tomcat -d \
-p 8080:8080 \
-v /opt/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat:8.5.51-jdk8-openjdk

引數詳解

-D #預設false 允許除錯模式(debugmode)
-H #預設是unix:///var/run/docker.sock tcp://[host[:port]]來繫結 或者unix://[/path/to/socket]來使用(二進位制檔案的時候),當主機ip host=[0.0.0.0],(埠)port=[4243] 或者 path=[/var/run/docker.sock]是預設值,做為預設值來使用
-api-enable-cors #預設flase 允許CORS header遠端api
-b #預設是空,附加在已存在的網橋上,如果是用'none'引數,就禁用了容器的網路
-bip #預設是空,使用提供的CIDR(ClasslessInter-Domain Routing-無型別域間選路)標記地址動態建立網橋(dcoker0),和-b引數衝突
-d #預設false 允許程序模式(daemonmode)
-dns #預設是空,使docker使用指定的DNS伺服器
-g #預設是"/var/lib/docker":作為docker使用的根路徑
-icc #預設true,允許inter-container來通訊
-ip #預設"0.0.0.0":繫結容器埠的預設Ip地址
-iptables #預設true 禁用docker新增iptables規則
-mtu #預設1500 : 設定容器網路傳輸的最大單元(mtu)
-p #預設是/var/run/docker.pid程序pid使用的檔案路徑
-r #預設是true 重啟之前執行的容器
-s #預設是空 ,這個是docker執行是使用一個指定的儲存驅動器
--config string  #客戶端配置檔案的位置(預設為“/root/.docker”)

docker run [option]

-a=map[]: 附加標準輸入、輸出或者錯誤輸出
-c=0: 共享CPU格式(相對重要)
-cidfile="": 將容器的ID標識寫入檔案
-d=false: 分離模式,在後臺執行容器,並且打印出容器ID
-e=[]:設定環境變數
-h="": 容器的主機名稱
-i=false: 保持輸入流開放即使沒有附加輸入流
-privileged=false: 給容器擴充套件的許可權
-m="": 記憶體限制 (格式:, unit單位 = b, k, m or g)
-n=true: 允許映象使用網路
-p=[]: 匹配映象內的網路埠號
-rm=false:當容器退出時自動刪除容器 (不能跟 -d一起使用)
-t=false: 分配一個偽造的終端輸入
-u="": 使用者名稱或者ID
-dns=[]: 自定義容器的DNS伺服器
-v=[]: 建立一個掛載繫結:[host-dir]:[container-dir]:[rw|ro].如果容器目錄丟失,docker會建立一個新的卷
-volumes-from="": 掛載容器所有的卷
-entrypoint="": 覆蓋映象設定預設的入口點
-w="": 工作目錄內的容器
-lxc-conf=[]: 新增自定義-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-sig-proxy=true: 代理接收所有程序訊號(even in non-tty mode)
-expose=[]: 讓你主機沒有開放的埠
-link="": 連線到另一個容器(name:alias)
-name="": 分配容器的名稱,如果沒有指定就會隨機生成一個
-P=false: Publish all exposed ports to thehost interfaces
公佈所有顯示的埠主機介面

部署kibanan

docker run -d --name kibana -p 5601:5601 -v /data/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.6.2

參考

開發者必備Docker命令