Docker入門
1.爲什麼需要Docker
開發過程中後端與運維交付項目,運維部署運行不成功,兩者無法判定是哪方問題
環境問題
docker解決-搬家問題直接入住
一次封裝,到處運行
docker是什麼?
解決了運行環境和配置的問題,方便持續集成有助於整體發佈的容器虛擬化技術
2. Docker能幹嘛
有點像我們的虛擬機一樣,虛擬機也是帶軟硬件直接安裝在我們電腦上自帶環境運行,但是它啓動太慢了,而且耗資源,步驟也多,docker是秒級的
但是它也不是完整的一個操作系統,而是運行所需要什麼東西就加載什麼東西。輕量級的
每個容器互相隔離,且不自帶內核
開發自運維
docker的好處
下載地址: https://www.docker-cn.com, https://www.docker.com
Docker流程圖
3 Docker三劍客
3.1 鏡像
鏡像就是一個只讀模板,她可以創建Docker容器,一個鏡像可以創建很多容器
比如:仍然是同一個模板,卻有不同的對象
Person p1=new Person();
Person p2=new Person();
Person p3=new Person();
關係類比:
Docker | 面向對象 |
---|---|
容器 | 對象 |
鏡像 | 類 |
3.2 容器
容器是可以獨立安全運行應用的環境,是鏡像用來運行的實例,容器可讀可寫
3.3 倉庫
是集中存放鏡像文件的場所
3.4 小結
4.Docker的使用
docker環境安裝 yum install -y epel-release
docker安裝 yum install -y docker-io
安裝完在 /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查看了一下,在運行中
目前爲止已經成功安裝好了
5. 阿里雲鏡像加速
https://dev.aliyun.com/search.html
獲取加速器地址,第一次點擊這邊的需要設置一個密碼就可以看到了
我這裏是centos7版本的
直接複製下面的話執行就可以了
然後再回車重啓,查看docker info發現
配置成功
5.1 網易雲加速器
步驟和上面一樣,只是需要去網易雲找加速器地址,把那個阿里雲的換成網易雲的就可以了
5.2 docker run 運行
docker如何運行
爲什麼它比虛擬機快
- docker更少的抽象層,短小精幹,
- docker用的是本機的內核和操作系統,虛擬機都自帶
6. 常用Docker命令
6.1幫助命令
docker info //對應的描述
docker version //docker 版本
docker --help //幫助命令
6.2 鏡像命令
docker images//查看本機鏡像
docker images (-a 列出所有的鏡像,包括最外層,-q 列出鏡像的id,-qa就是所有鏡像的id --digests 會顯示DIGESTS說明 --no-trunc 完整說明,比如完整id)
docker serach 鏡像名 加上-s 查看點贊數 //docker serach -s 30 tomcat 大於30點讚的
docker search -s 30 --no-trunc tomcat //--no-trunc完整的摘要信息
docker pull tomcat //等於下載最新tomcat
docker pull tomcat:3.2 //指定版本
//下載成功
//Digest: sha256:cae591b6f798359b0ba2bdd9cc248e695ac6e14d20722c5ff82a9a138719896f
//Status: Downloaded newer image for tomcat:latest
docker rmi 名字或者id
出現上面的原因是因爲容器在運行,需要強制刪除
docker rmi -f 名字或者id
刪除成功
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
docker ps -l 查看上一次運行的 -a查看現在運行和以前運行過的 -n顯示最近n個創建的容器 -q只顯示容器編號 --no-trunc 不截斷輸出,顯示全部信息
進入那個centos終端後,但是退出不想直接exit,可以按住ctrl+p+q然後退出,會發現centos仍然在運行
啓動容器 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看不到
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”**以後臺運行
查看日誌
docker inspect id 查看容器內部細節
docker top id 查看容器內部進程
docker attach id名字 重新進入終端命令行
docker exec -t id名字 命令語句 可以不進入終端然後返回終端執行結果
如果命令語句是一個路勁,那麼就是跟docker attach id名字一樣進去終端
docker cp id名 /tmp/yum.log /root 拷貝文件,這個和linux無區別
8.鏡像原理
爲什麼docker要分層結構
因爲緩存,方便刪除完,下次下載更快,如果分層的話,比如其它層是相同的base文件產生的,下次速度會更快產生
9. Docker Commit
修改完鏡像副本,然後提交成一個新鏡像,比如加個作者啥的 原鏡像依然存在
docker commit
docker run -it -p 8888:8080 tomcat 運行以8888訪問tomcat
docker run -it -P tomcat 大寫的p會隨機分配端口
加了-d就可以後臺運行
10.Docker容器數據卷
有點像redis的rdb和aof,主要用來持久化數據,實現容器數據共享
docker cp id名 容器內路徑 目的路徑
命令給容器類添加數據卷
docker cp /路徑:/目的地址 鏡像名
兩個路徑之間數據共享,新建一個文件都看得到,可以用docker inspect 容器名查看json是否掛載成功
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
- 編寫dockerfile(這一個的解讀我就沒寫在這了,不難,dockerHub上看幾段代碼就會了,不要求手寫)
- build
- run
DockerFile是構建鏡像的構建文件,是由一系列命令和參數構成的腳本
執行流程
11.1 關鍵字解讀
- from 說明鏡像基於哪個鏡像
- maintainer 鏡像維護者的姓名和郵箱
- run 容器構建時要執行的命令
- expose 對外暴露的端口號
- workdir 創建容器後,默認登錄的工作目錄
- env 構建環境過程中設置環境變量
- add 拷貝加解壓縮,自動處理url
- volume 容器數據卷
- copy 拷貝
- cmd 容器啓動時執行的命令,只生效最後一個cmd
- entrypoint 和cmd一樣,但不會覆蓋命令會追加執行
- onbuild 當子鏡像繼承父鏡像時,父鏡像的onbuild會執行
11.2 存放倉庫
登錄完
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 鏡像名字:[版本號] 給下載下來