Docker這麼好用再不懂就過分了

Docker入門

1.爲什麼需要Docker

開發過程中後端與運維交付項目,運維部署運行不成功,兩者無法判定是哪方問題

環境問題

docker解決-搬家問題直接入住

image-20200426142946109

一次封裝,到處運行

docker是什麼?

解決了運行環境和配置的問題,方便持續集成有助於整體發佈的容器虛擬化技術

2. Docker能幹嘛

有點像我們的虛擬機一樣,虛擬機也是帶軟硬件直接安裝在我們電腦上自帶環境運行,但是它啓動太慢了,而且耗資源,步驟也多,docker是秒級的

但是它也不是完整的一個操作系統,而是運行所需要什麼東西就加載什麼東西。輕量級的

每個容器互相隔離,且不自帶內核

開發自運維

docker的好處

image-20200426192647344

下載地址: https://www.docker-cn.com, https://www.docker.com

Docker流程圖

image-20200426195122607

3 Docker三劍客

3.1 鏡像

鏡像就是一個只讀模板,她可以創建Docker容器,一個鏡像可以創建很多容器

比如:仍然是同一個模板,卻有不同的對象

Person p1=new Person();
Person p2=new Person();
Person p3=new Person();

關係類比:

Docker 面向對象
容器 對象
鏡像

3.2 容器

容器是可以獨立安全運行應用的環境,是鏡像用來運行的實例,容器可讀可寫

3.3 倉庫

是集中存放鏡像文件的場所

image-20200426213847414

3.4 小結

image-20200426214316344

4.Docker的使用

docker環境安裝 yum install -y epel-release

docker安裝 yum install -y docker-io

image-20200426215550353

安裝完在 /etc/docker下

啓動docker: service docker start

當出現下面這個

Redirecting to /bin/systemctl start docker.service

說明需要用到systemctl命令來啓動

啓動docker:systemctl start docker
停止docker:systemctl stop docker
重啓docker:systemctl restart docker
查看docker狀態:systemctl status docker
開機啓動:systemctl enable docker 
查看docker概要信息:docker info
查看docker幫助文檔:docker --help
查看docker安裝的版本: docker --version
查看docker環境: docker version

systemctl status docker查看了一下,在運行中

image-20200426220946261

目前爲止已經成功安裝好了

image-20200427094446967

5. 阿里雲鏡像加速

https://dev.aliyun.com/search.html

image-20200427075608347

獲取加速器地址,第一次點擊這邊的需要設置一個密碼就可以看到了

我這裏是centos7版本的

直接複製下面的話執行就可以了

image-20200427094558987

然後再回車重啓,查看docker info發現

image-20200427094841999

配置成功

5.1 網易雲加速器

步驟和上面一樣,只是需要去網易雲找加速器地址,把那個阿里雲的換成網易雲的就可以了

5.2 docker run 運行

image-20200427095515141

docker如何運行

image-20200427095917287

爲什麼它比虛擬機快

  • docker更少的抽象層,短小精幹,
  • docker用的是本機的內核和操作系統,虛擬機都自帶

6. 常用Docker命令

6.1幫助命令

docker info   //對應的描述
docker version  //docker 版本
docker --help  //幫助命令

6.2 鏡像命令

docker images//查看本機鏡像

image-20200427105851873

docker images (-a 列出所有的鏡像,包括最外層,-q 列出鏡像的id,-qa就是所有鏡像的id --digests 會顯示DIGESTS說明 --no-trunc 完整說明,比如完整id)

docker serach  鏡像名  加上-s 查看點贊數    //docker serach -s 30 tomcat 大於30點讚的

image-20200427112404514

docker search -s 30 --no-trunc tomcat  //--no-trunc完整的摘要信息

image-20200427112618559

docker pull tomcat //等於下載最新tomcat
docker pull tomcat:3.2 //指定版本
//下載成功
//Digest: sha256:cae591b6f798359b0ba2bdd9cc248e695ac6e14d20722c5ff82a9a138719896f
//Status: Downloaded newer image for tomcat:latest
docker rmi 名字或者id

image-20200427113900013

出現上面的原因是因爲容器在運行,需要強制刪除

docker rmi -f 名字或者id

刪除成功

image-20200427114007507

docker rmi -f 名字1 名字2  //多個一起刪除
docker rmi -f $(docker images -qa) //刪除查詢出來的全部id===全部刪除

7.容器命令

docker pull centos 驚奇發現它才200多M,這無疑證明了docker去掉了繁重的配置,比虛擬機更爲輕量級

新建並啓動交互式容器,起別名mycentos  docker run -it --name mycentos id名或者名字    

輸入完,終端就進入mycentos了等於虛擬機進入終端時的根目錄下

查看正在運行的容器

docker ps

image-20200427120301442

docker ps -l 查看上一次運行的  -a查看現在運行和以前運行過的 -n顯示最近n個創建的容器  -q只顯示容器編號  --no-trunc 不截斷輸出,顯示全部信息 

進入那個centos終端後,但是退出不想直接exit,可以按住ctrl+p+q然後退出,會發現centos仍然在運行

image-20200427121648547

啓動容器 docker start id或者名字

重啓容器 docker restart id或者名字

停止容器,慢慢自己關閉 docker stop id或者名字

強制停止,強行關閉 docker kill id或者名字

刪除已停止的緩存信息 docker rm id或者名字

找出全部容器全部刪除 docker rm -f $(docker ps -a -q) 或者 docker s -a -q| xargs docker rm

重要的命令

docker run -d 容器名 啓動守護式容器,docker ps看不到

image-20200427123722643

docker logs -f -t --tail 容器id 查看容器日誌 -t是加入時間顯示 -f跟隨最新的日誌打印 --tail 數字 顯示最後n條

**docker run -d centos /bin/sh -c “while true;do echo hello zzyy;sleep 2;done”**以後臺運行

查看日誌

image-20200427125918561

docker inspect id 查看容器內部細節

docker top id 查看容器內部進程

docker attach id名字 重新進入終端命令行

image-20200427132307222

docker exec -t id名字 命令語句 可以不進入終端然後返回終端執行結果

如果命令語句是一個路勁,那麼就是跟docker attach id名字一樣進去終端

docker cp id名 /tmp/yum.log /root 拷貝文件,這個和linux無區別

8.鏡像原理

image-20200427140045495

image-20200427140213819

爲什麼docker要分層結構

因爲緩存,方便刪除完,下次下載更快,如果分層的話,比如其它層是相同的base文件產生的,下次速度會更快產生

image-20200427141902902

9. Docker Commit

修改完鏡像副本,然後提交成一個新鏡像,比如加個作者啥的 原鏡像依然存在

docker commit

docker run -it -p 8888:8080 tomcat 運行以8888訪問tomcat

image-20200427162803012

docker run -it -P tomcat 大寫的p會隨機分配端口

image-20200427163932391

加了-d就可以後臺運行

10.Docker容器數據卷

有點像redis的rdb和aof,主要用來持久化數據,實現容器數據共享

docker cp id名 容器內路徑  目的路徑

命令給容器類添加數據卷

docker cp /路徑:/目的地址  鏡像名

兩個路徑之間數據共享,新建一個文件都看得到,可以用docker inspect 容器名查看json是否掛載成功

image-20200427172826920

docker cp /路徑:/目的地址:ro 鏡像名 只讀,是不可以修改的

jhhhhhhhhhhhhhhhhhh

DockerFile添加數據卷

先編寫dockerfile 然後build, docker build -f 路勁 -t 路勁

容器之間共享 --volumes-from

docker run -it --name dc04 --volumes-from dc03 容器名字 相 當於繼承dc03,那麼所有數據dc04都可看,即使dc03刪除,全量備份

容器卷之間有數據共享,,而主機與容器則需要自己寫數據卷

11. DockerFile

  1. 編寫dockerfile(這一個的解讀我就沒寫在這了,不難,dockerHub上看幾段代碼就會了,不要求手寫)
  2. build
  3. run

DockerFile是構建鏡像的構建文件,是由一系列命令和參數構成的腳本

執行流程

image-20200427191334938

11.1 關鍵字解讀

  • from 說明鏡像基於哪個鏡像
  • maintainer 鏡像維護者的姓名和郵箱
  • run 容器構建時要執行的命令
  • expose 對外暴露的端口號
  • workdir 創建容器後,默認登錄的工作目錄
  • env 構建環境過程中設置環境變量
  • add 拷貝加解壓縮,自動處理url
  • volume 容器數據卷
  • copy 拷貝
  • cmd 容器啓動時執行的命令,只生效最後一個cmd
  • entrypoint 和cmd一樣,但不會覆蓋命令會追加執行
  • onbuild 當子鏡像繼承父鏡像時,父鏡像的onbuild會執行

11.2 存放倉庫

image-20200427224144766

登錄完

docker tag[imageid] registry.cn-hangzhou.aliyuncs.com/鏡像名字:[版本號]

然後push

docker push registry.cn-hangzhou.aliyuncs.com/鏡像名字:[版本號]

再執行==docker serach 鏡像名字:[版本號]==就會從倉庫發現你推送的鏡像

d 拷貝加解壓縮,自動處理url

  • volume 容器數據卷
  • copy 拷貝
  • cmd 容器啓動時執行的命令,只生效最後一個cmd
  • entrypoint 和cmd一樣,但不會覆蓋命令會追加執行
  • onbuild 當子鏡像繼承父鏡像時,父鏡像的onbuild會執行

11.2 存放倉庫

[外鏈圖片轉存中…(img-lRF0CZXE-1587998755433)]

登錄完

docker tag[imageid] registry.cn-hangzhou.aliyuncs.com/鏡像名字:[版本號]

然後push

docker push registry.cn-hangzhou.aliyuncs.com/鏡像名字:[版本號]

再執行==docker serach 鏡像名字:[版本號]==就會從倉庫發現你推送的鏡像

而且你還可以docker pull 鏡像名字:[版本號] 給下載下來

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