docker常用命令操作及案例容器創建

docker常用命令操作及案例容器創建

注:之前的工作中使用過一段時間docker,最近項目需要使用k8s+docker做dockers管理,順便帶個小MM。好記性不如爛筆頭,整理點文檔出來,歡迎諸位大牛指點。目標:整理出docker基礎入門,docker  kubernetes 集羣基礎,spark on kubernetes的基礎等幾篇文檔。持續更新ing~

1.搜索容器&run一個容器

1.搜索容器
docker search redis
2.後臺run某個容器
docker run -d  redis
3.指定鏡像版本
docker run -d redis:3.1
4.列出剛剛創建的容器或列出所有容器
docker ps   /docker ps -a
5.查看單個容器信息
docker inspect <container-id|container-name>
6.查看容器logs
docker logs <container-id|container-name>

2.創建一個容器指定端口以及掛載卷

2.1簡單粗暴的幾個常用參數
    docker run -d 後臺運行   --name  指定容器名稱   -p 指定映射端口  -v  指定本地存儲路徑   鏡像名稱
    docker run -d --name redisMapped -p 6379:6379 -v /opt/docker/data/redis:/data redis

    Tip:默認情況下,主機端口映射爲0.0.0.0,即所有IP地址。
    您可以在定義端口映射時指定特定的IP地址例如-p 127.0.0.1:6379:6379
2.2 簡單介紹一下上面兩個概念點
2.2.1 端口映射
    在啓動容器時,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的,因爲沒有端口。
    docker run -p ip:hostPort:containerPort redis
    常用方式:
    127.0.0.1:3306:3306,映射本機的3306端口到虛擬機的3306端口
    127.0.0.1::3306,映射本機的3306端口到虛擬機的3306端口
    3306:3306,映射本機的3306端口到虛擬機的3306端口(最常用)

2.2.2文件掛載
    掛載主機目錄/opt/docker/data/redis 容器本地目錄 /software容器目錄,在創建前容器是沒有software目錄的,docker 容器會自己創建

2.2.3 操作容器
     docker exec -it redis bash
    通過主機命令行進入master容器,意思就是進入容器中運行redis 的bash環境。
    不準確的來說理解成一個獨立的linux環境即可。

3.來一些docker常用命令備忘

    3.1 docker run  參數

docker run  參數
  -d, --detach=false         指定容器運行於前臺還是後臺,默認爲false     
  -i, --interactive=false   打開STDIN,用於控制檯交互    
  -t, --tty=false            分配tty設備,該可以支持終端登錄,默認爲false    
  -u, --user=""              指定容器的用戶    
  -a, --attach=[]            登錄容器(必須是以docker run -d啓動的容器)  
  -w, --workdir=""           指定容器的工作目錄   
  -c, --cpu-shares=0        設置容器CPU權重,在CPU共享場景使用    
  -e, --env=[]               指定環境變量,容器中可以使用該環境變量    
  -m, --memory=""            指定容器的內存上限    
  -P, --publish-all=false    指定容器暴露的端口    
  -p, --publish=[]           指定容器暴露的端口   
  -h, --hostname=""          指定容器的主機名    
  -v, --volume=[]            給容器掛載存儲卷,掛載到容器的某個目錄    
  --volumes-from=[]          給容器掛載其他容器上的卷,掛載到容器的某個目錄  
  --cap-add=[]               添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities    
  --cap-drop=[]              刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities    
  --cidfile=""               運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法    
  --cpuset=""                設置容器可以使用哪些CPU,此參數可以用來容器獨佔CPU    
  --device=[]                添加主機設備給容器,相當於設備直通    
  --dns=[]                   指定容器的dns服務器    
  --dns-search=[]            指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件    
  --entrypoint=""            覆蓋image的入口點    
  --env-file=[]              指定環境變量文件,文件格式爲每行一個環境變量    
  --expose=[]                指定容器暴露的端口,即修改鏡像的暴露端口    
  --link=[]                  指定容器間的關聯,使用其他容器的IP、env等信息    
  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc時使用    
  --name=""                  指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字    
  --net="bridge"             容器網絡設置:  
                                bridge 使用docker daemon指定的網橋       
                                host    //容器使用主機的網絡    
                                container:NAME_or_ID  >//使用其他容器的網路,共享IP和PORT等網絡資源    
                                none 容器使用自己的網絡(類似--net=bridge),但是不進行配置   
  --privileged=false         指定容器是否爲特權容器,特權容器擁有所有的capabilities    
  --restart="no"             指定容器停止後的重啓策略:  
                                no:容器退出時不重啓    
                                on-failure:容器故障退出(返回值非零)時重啓   
                                always:容器退出時總是重啓    
  --rm=false                 指定容器停止後自動刪除容器(不支持以docker run -d啓動的容器)    
  --sig-proxy=true           設置由代理接受並處理信號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

3.2 docker 容器操作

docker build -t friendlyname .  # 使用當前目錄下的內容創建Dockerfile鏡像文件
docker run -p 4000:80 friendlyname  # 運行名爲“friendlyname”的鏡像,並設置端口映射
docker run -d -p 4000:80 friendlyname         # 後臺運行容器
docker container ls                                # 查看運行中的容器
docker container ls -a             # 查看所有的容器,包括爲運行的
docker container stop <hash>           # 優雅的停止容器進程
docker container kill <hash>         # 張志停止容器進程
docker container rm <hash>        # 從當前機器移除指定容器
docker container rm $(docker container ls -a -q)         # 移除所有容器
docker image ls -a                             # 查看當前機器上的所有鏡像
docker image rm <image id>            # 從當前機器上移除指定鏡像
docker image rm $(docker image ls -a -q)   # 從機器上移除所有容器
docker login             # 使用docker用戶名密碼登錄CLI
docker tag <image> username/repository:tag  # 給鏡像打標籤
docker push username/repository:tag            # 上傳鏡像到筆者個人倉庫
docker run username/repository:tag                   # 運行指定鏡像的指定版本

3.3 docker服務操作

docker stack ls                                            # 列出應用程序
docker stack deploy -c <composefile> <appname>  # 運行制動的composefile
docker service ls                 # 列出與應用關聯的正在運行的服務
docker service ps <service>                  # 列出與應用程序關聯的任務
docker inspect <task or container>                   # 檢查任務或容器狀態
docker container ls -q                                      # 列出容器ID
docker stack rm <appname>                             # 刪除一個應用程序
docker swarm leave --force      # 用swam管理下掉集羣的一個節點

3.4 swarms操作

Swarms操作
docker-machine create --driver virtualbox myvm1 # 在(Mac, Win7, Linux)創建一個VM
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1                # 查看有關節點的基本信息
docker-machine ssh myvm1 "docker node ls"         # 列出swarm羣中的節點
docker-machine ssh myvm1 "docker node inspect <node ID>"        # 檢查節點
docker-machine ssh myvm1 "docker swarm join-token -q worker"   # 查看連接令牌
docker-machine ssh myvm1   # 與VM打開一個SSH會話;鍵入“exit”結束
docker node ls                # 查看swarm中的節點(登錄到管理器時)
docker-machine ssh myvm2 "docker swarm leave"  # 使worker脫離swarm
docker-machine ssh myvm1 "docker swarm leave -f" # 使master脫離swarm並殺掉swarm
docker-machine ls # 列出虛擬機,星號顯示這個shell正在與哪個虛擬機通話
docker-machine start myvm1            # 啓動一個當前沒有運行的虛擬機
docker-machine env myvm1      # 顯示myvm1的環境變量和命令
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
docker stack deploy -c <file> <app>  # 部署一個應用程序;命令shell必須設置爲與管理器(myvm1)通信,使用本地Compose文件
docker-machine scp docker-compose.yml myvm1:~ # 將文件複製到節點的主目錄(只有在使用ssh連接到管理器並部署應用程序時才需要
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # 使用ssh部署應用程序(您必須首先將撰寫文件複製到myvm1)
eval $(docker-machine env -u)     # 斷開與虛擬機的shell,使用本地docker
docker-machine stop $(docker-machine ls -q)               # 停止所有運行的VM
docker-machine rm $(docker-machine ls -q) # 刪除所有虛擬機及其磁盤映像









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章