前言:mysql
最近一直在家,正好整理下關於容器的相關內容,也系統的總結下經常使用的命令:linux
1、容器介紹及容器的優越性: nginx
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,於 2013 年 3 月以 Apache 2.0 受權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 使用 Google 公司推出的 Go 語言 進行開發實現。docker是linux容器的一種封裝,提供簡單易用的容器使用接口。它是最流行的Linux容器解決方案。docker的接口至關簡單,用戶能夠方便的建立、銷燬容器。docker將應用程序與程序的依賴,打包在一個文件裏面。運行這個文件就會生成一個虛擬容器。程序運行在虛擬容器裏,如同在真實物理機上運行同樣,有了docker,就不用擔憂環境問題了。web
而解決環境問題只是docker的優越性之一,它更優越的地方在於與kubernetes或者swarm來配合使用,docker提供單一應用的便捷部署,kubernetes或swarm對docker進行編排,不只能夠便捷的實現應用的快速,大量部署,並且這些編排工具還提供負載與高可用,甚至在容器出現問題的時候自動的解決它,總而言之,docker是實施,運維人員的好幫手,而它只是運維自動化的開始。redis
2、如何在項目中應用docker:sql
1.首先,你須要在須要使用docker的機器上安裝它(docker最低支持centos7且在64位平臺上,內核版本在3.10以上):docker
# 安裝docker yum install docker # 啓動docker systemctl start/status docker # 查看docker啓動狀態 docker version
2.其次,你須要一個鏡像,而它的來源通常有兩個:vim
1)未配置的普通應用鏡像,如:tomcat,nginx,mysql等等,你能夠根據本身的須要來在公有的鏡像平臺上選擇本身須要的相關版本。centos
2)根據本身的須要來制定定製的鏡像,如:已經部署好web項目的tomcat,已經導入基礎數據表的mysql。tomcat
3.建立你的第一個容器,它的前提條件也很簡單,安裝docker而且有打包好的docker鏡像就能夠,有關鏡像的命令以下:
docker search hello-docker # 搜索hello-docker的鏡像 docker search centos # 搜索centos鏡像 docker pull hello-docker # 獲取centos鏡像 docker run hello-world #運行一個docker鏡像,產生一個容器實例(也能夠經過鏡像id前三位運行) docker image ls # 查看本地全部鏡像 docker images # 查看docker鏡像 docker image rmi hello-docker # 刪除centos鏡像
4.提交建立自定義的鏡像:
# 1.咱們進入交互式的centos容器中,發現沒有vim命令 docker run -it centos # 2.在當前容器中,安裝一個vim yum install -y vim # 3.安裝好vim以後,exit退出容器 exit # 4.查看剛纔安裝好vim的容器記錄 docker container ls -a # 5.提交這個容器,建立新的image docker commit 059fdea031ba chaoyu/centos-vim # 6.查看鏡像文件 docker images REPOSITORY TAG IMAGE ID CREATED SIZE chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
3、docker的經常使用命令及對容器的操做:
##列出本地images docker images ##含中間映像層 docker images -a
##只顯示鏡像ID docker images -q ##含中間映像層 docker images -qa
##顯示鏡像摘要信息(DIGEST列) docker images --digests ##顯示鏡像完整信息 docker images --no-trunc
##顯示指定鏡像的歷史建立;參數:-H 鏡像大小和日期,默認爲true;--no-trunc 顯示完整的提交記錄;-q 僅列出提交記錄ID docker history -H redis
##搜索倉庫MySQL鏡像 docker search mysql ## --filter=stars=600:只顯示 starts>=600 的鏡像 docker search --filter=stars=600 mysql ## --no-trunc 顯示鏡像完整 DESCRIPTION 描述 docker search --no-trunc mysql ## --automated :只列出 AUTOMATED=OK 的鏡像 docker search --automated mysql
##下載Redis官方最新鏡像,至關於:docker pull redis:latest docker pull redis ##下載倉庫全部Redis鏡像 docker pull -a redis ##下載私人倉庫鏡像 docker pull bitnami/redis
##單個鏡像刪除,至關於:docker rmi redis:latest docker rmi redis ##強制刪除(針對基於鏡像有運行的容器進程) docker rmi -f redis ##多個鏡像刪除,不一樣鏡像間以空格間隔 docker rmi -f redis tomcat nginx ##刪除本地所有鏡像 docker rmi -f $(docker images -q)
##(1)編寫dockerfile cd /docker/dockerfile vim mycentos ##(2)構建docker鏡像 docker build -f /docker/dockerfile/mycentos -t mycentos:1.1 容器操做
提示:對於容器的操做可以使用CONTAINER ID 或 NAMES。
##新建並啓動容器,參數:-i 以交互模式運行容器;-t 爲容器從新分配一個僞輸入終端;--name 爲容器指定一個名稱 docker run -i -t --name mycentos ##後臺啓動容器,參數:-d 已守護方式啓動容器 docker run -d mycentos 注意:此時使用"docker ps -a"會發現容器已經退出。這是docker的機制:要使Docker容器後臺運行,就必須有一個前臺進程。解決方案:將你要運行的程序之前臺進程的形式運行。 ##啓動一個或多個已經被中止的容器 docker start redis ##重啓容器 docker restart redis
##top支持 ps 命令參數,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS] ##列出redis容器中運行進程 docker top redis ##查看全部運行容器的進程信息 for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
##查看redis容器日誌,默認參數 docker logs rabbitmq ##查看redis容器日誌,參數:-f 跟蹤日誌輸出;-t 顯示時間戳;--tail 僅列出最新N條容器日誌; docker logs -f -t --tail=20 redis ##查看容器redis從2019年05月21往後的最新10條日誌。 docker logs --since="2019-05-21" --tail=10 redis
##使用run方式在建立時進入 docker run -it centos /bin/bash ##關閉容器並退出 exit ##僅退出容器,不關閉 快捷鍵:Ctrl + P + Q ##直接進入centos 容器啓動命令的終端,不會啓動新進程,多個attach鏈接共享容器屏幕,參數:--sig-proxy=false 確保CTRL-D或CTRL-C不會關閉容器 docker attach --sig-proxy=false centos ##在 centos 容器中打開新的交互模式終端,能夠啓動新進程,參數:-i 即便沒有附加也保持STDIN 打開;-t 分配一個僞終端 docker exec -i -t centos /bin/bash ##以交互模式在容器中執行命令,結果返回到當前終端屏幕 docker exec -i -t centos ls -l /tmp ##以分離模式在容器中執行命令,程序後臺運行,結果不會反饋到當前終端 docker exec -d centos touch cache.txt
##查看正在運行的容器 docker ps ##查看正在運行的容器的ID docker ps -q ##查看正在運行+歷史運行過的容器 docker ps -a ##顯示運行容器總文件大小 docker ps -s
##顯示最近建立容器 docker ps -l ##顯示最近建立的3個容器 docker ps -n 3 ##不截斷輸出 docker ps --no-trunc
##獲取鏡像redis的元信息 docker inspect redis ##獲取正在運行的容器redis的 IP docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis
##中止一個運行中的容器 docker stop redis ##殺掉一個運行中的容器 docker kill redis ##刪除一個已中止的容器 docker rm redis ##刪除一個運行中的容器 docker rm -f redis ##刪除多個容器 docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm ## -l 移除容器間的網絡鏈接,鏈接名爲 db docker rm -l db ## -v 刪除容器,並刪除容器掛載的數據卷 docker rm -v redis
##基於當前redis容器建立一個新的鏡像;參數:-a 提交的鏡像做者;-c 使用Dockerfile指令來建立鏡像;-m :提交時的說明文字;-p :在commit時,將容器暫停 docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
##將rabbitmq容器中的文件copy至本地路徑 docker cp rabbitmq:/[container_path] [local_path] ##將主機文件copy至rabbitmq容器 docker cp [local_path] rabbitmq:/[container_path]/ ##將主機文件copy至rabbitmq容器,目錄重命名爲[container_path](注意與非重命名copy的區別) docker cp [local_path] rabbitmq:/[container_path]