【20210109】Docker學習筆記

2021-03-06 同福編程
1. 介紹1.1 介紹

Docker是一個容器(Container)服務,用來管理容器。

容器就是一個運行環境,可以部署任何軟體運行環境,且環境內只包含最小的作業系統所需要的系統文件,輕量級的運行環境保證了系統的性能,乾淨的系統環境保證了系統的安全。

容器可以有自己的IP位址,可以有自己的service系統,可以有自己的hosts,可以有自己的crontab...所以,容器很像虛擬機,在容器裡面運行的軟體就像在獨立的Linux裡面運行的效果一樣。

Docker還是一個鏡像(Image)服務,可以管理鏡像。

鏡像就是從一個穩定的容器打包出來的一個靜態的包,通過鏡像可以快速地創建一個一模一樣的容器。鏡像就像是Git裡面的Tag,我們可以給調試好的容器進行導出鏡像操作,然後在需要的地方進行鏡像還原容器操作,這樣可以方便的模板化創建容器。

2. 基本信息2.1 安裝環境

CentOS:CentOS Linux release 7.6.1810 (Core)
Linux:Linux version 3.10.0-1062.el7.x86_64
GCC:gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

3. 安裝Docker3.1 安裝

使用yum安裝docker

3.2 驗證

輸入命令

[root@tfdev ~]# docker -vDocker version 1.13.1, build 0be3e21/1.13.1

3.3 啟動

關閉SELinux,這玩意和docker合不來

打開selinux的配置文件

vi /etc/sysconfig/selinux

修改文件內容,將參數 SELINUX 修改為 disabled

重啟伺服器

重啟docker

自動啟動

4. Docker創建私有倉庫(repository)4.1 第一步

拉一個registry鏡像下來

4.2 第二步

運行倉庫

docker run -d -p 5000:5000 -v /opt/registry:/tmp/registry docker.io/registry

4.3 第三步

驗證

4.4 查看鏡像

V1版本是

curl 127.0.0.1:5000/v1/search

V2版本是

curl 127.0.0.1:5000/v2/_catalog

4.5 創建鏡像4.5.1 第一步

先拉一個鏡像從遠程倉庫

4.5.2 第二步

修改tag到本地

docker tag docker.io/centos 127.0.0.1:5000/centos:tongfu

4.5.3 第三步

上傳鏡像到本地倉庫

docker push 127.0.0.1:5000/centos:tongfu

5. Docker容器操作(container)5.1 創建容器
docker run -tid --name [容器名稱] [鏡像名稱]

5.2 進入容器

採用attach進入容器後,通過exit退出的話,容器會停止運行

5.3 在容器內執行命令
docker exec [容器名稱] /bin/bash -c "命令"

5.4 停止容器5.5 啟動容器5.6 退出容器

正常進入容器後退出的話,容器會停止運行,那麼如何保證退出後容器一直運行呢?

答案是通過 exec 進入容器,命令如下:

docker exec -ti [容器名稱] /bin/bash

這樣也可以進入容器,同時這樣退出不會導致容器停止運行

5.7 刪除容器

要刪除一個容器之前必須要先停止這個容器

6. Docker網絡配置(network)6.1 創建網絡

注意:虛擬網絡的IP網段千萬不要和本地物理網絡衝突,否則會導致容器內部網絡不通的情況!!!

docker network create --subnet=10.16.1.0/16 --gateway=10.16.1.1 --opt "com.docker.network.bridge.name"="bridge2" bridge2

6.2 使用新網絡創建容器
docker run -tid --name=base --net=bridge2 --ip=10.16.1.100 -p 8000:80 docker.tongfu.net:5000/centos

這樣新創建的容器的IP位址就是bridge2網絡的地址,通過網關IP可以與宿主機互相通訊,同時我們將容器的80埠映射給了宿主機8000埠。

容器IP位址:10.16.1.100

宿主機IP位址:10.16.1.1

容器埠:80

宿主機埠:8000

6.3 查看網絡列表
[root@tongfunet]NETWORK ID          NAME                DRIVER              SCOPE2f03bb8a8a13        bridge              bridge              local3919c34c3c33        bridge2             bridge              local305e882739a3        host                host                local363c4d747119        none                null                local

6.4 刪除網絡

注意默認的幾個網絡不要動(bridge、host、none)

[root@tongfunet]# docker network rm bridge2bridge2

6.5 查看網絡列表
[root@tongfunet]NETWORK ID          NAME                DRIVER              SCOPE2f03bb8a8a13        bridge              bridge              local305e882739a3        host                host                local363c4d747119        none                null                local

7. Docker導出與導入(export/import)7.1 導出

將容器內容導出到一個壓縮包內

[root@tongfunet]# docker export [容器名稱] > [壓縮包名稱].tar

7.2 導入

從一個壓縮包內導入數據到鏡像裡

[root@tongfunet]# docker import [壓縮包名稱].tar [鏡像名稱]

另一種導入命令

[root@tongfunet]# cat [壓縮包名稱].tar | docker import - [鏡像名稱]

8. Docker容器生成鏡像(image)8.1 提交到倉庫

我們辛辛苦苦調試好的容器,不想一個不小心就丟了,還想給其他人用,怎麼辦?

我們可以通過comment命令將自己的容器提交到倉庫

base是現有容器名稱

base-net是新的鏡像名稱

docker commit -m "m" -a "a" base docker.tongfu.net:5000/centos:base-net

8.2 查看鏡像列表

看我們的容器變成了鏡像,可以通過run使用了

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZEdocker.tongfu.net:5000/centos base-net e026052245dc 44 seconds ago 303.7 MB

8.3 刪除鏡像

刪除一個鏡像必須要刪除所有基於這個鏡像創建的容器

8.4 查看鏡像

我們可以查看鏡像信息,包括創建參數,依賴鏡像等等


IMAGE CREATED CREATED BY SIZE COMMENTec7d21826858 12 months ago /usr/sbin/init 56.69 MB Web server 2.4.27 for CentOS 7b6bac0adfc18 12 months ago /usr/sbin/init 141.7 MB The pure CentOS with net-tools , crontabs , gcc , makeff426288ea90 12 months ago /bin/sh -c <missing> 12 months ago /bin/sh -c <missing> 12 months ago /bin/sh -c

9. Docker備份與還原(backup/restore)9.1 備份

我們要將做好的鏡像備份起來,可以使用下面的命令

docker save docker.tongfu.net:5000/centos:base -o /tongfu.net/docker/backup/base.tgz

9.2 還原

我們要使用備份的文件還原,可以使用下面的命令

docker load -i /tongfu.net/docker/backup/base.tgz

10. Docker數據目錄遷移(move data directory)10.1 遷移數據目錄10.1.1 停止服務10.1.2 移動數據目錄
mv /var/lib/docker /data/docker

10.1.3 建立符號連結
ln -s /data/docker /var/lib/docker

10.1.4 啟動服務11. Docker常見問題
11.1 save/load和export/import區別
12. Docker的存儲驅動(Storage Driver)12.1 介紹

docker有這麼幾種存儲驅動,OverlayFS(overlay),AUFS(aufs),Btrfs(btrfs),Device Maper(devicemapper),VFS*(vfs),ZFS(zfs)

其中舊版本默認採用的驅動是devicemapper,最新版本1.13.x默認採用的驅動是overlay2

12.2 區別12.2.1 overlay

這裡面根據筆者的經驗,我們只談談overlay這種驅動。

在使用最新版本1.13.x進行鏡像設計的過程中發現了一個bug,就是通過images開啟的容器內部,如果要刪除鏡像自帶目錄會被告知:Directory not emtpy。

很迷惑的一個提示。。

筆者一開始以為是被進程佔用了,各種查找,各種重啟容器,重啟docker,各種reboot,各種重建容器,依然解決不了問題。

但是映射進來的目錄就完全正常!

最後發現這是overlay的一大特性,出於對鏡像模板內容的保護,刪除操作會被禁止,用戶內容需要通過映射目錄方式實現。

好吧~~這是好事,習慣了就好~~

那個不知所謂的 Directory not empty 是迷糊「黑客」的。。

12.2.2 devicemapper

這種方式下,我們操作容器內的內容沒有任何限制

網上一些文章倡導用這種驅動替代overlay驅動,解決不能rm -rf的問題

我個人的主張,沒有必要,要學會接受新鮮事物~~

當然,學習如何切換存儲驅動到是可以的!

13. 常見錯誤13.1 Pull鏡像報錯

使用pull命令拉取鏡像時候報錯

Get https://registry-1.docker.io/v2/library/registry/manifests/latest: net/http: TLS handshake timeout

解決方法,設置國內鏡像地址(設置後需要重啟docker服務)

[root@tfdev ~]# cat /etc/docker/daemon.json {  "registry-mirrors":[    "https://registry.docker-cn.com"  ]}

13.2 容器無法聯網

創建容器的時候,報如下警告信息

WARNING: IPv4 forwarding is disabled. Networking will not work.

解決方法

echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf
systemctl restart networksystemctl restart docker

13.3 使用yum報錯

使用yum報錯rpmdb open failed信息

error: rpmdb: BDB0004 fop_read_meta: /var/lib/rpm/Packages: unexpected file type or formaterror: cannot open Packages index using db5 - Invalid argument (22)error: cannot open Packages database in /var/lib/rpmCRITICAL:yum.main:
Error: rpmdb open failed

解決方法

rm -f /var/lib/rpm/*rpm --rebuilddbyum clean all

【20210108】做個用戶管理系統(39)——用以處理表格或列表的顯示的jQuery控制項

【20210107】做過java框架(7)——Spring框架的註解的學習筆記

免費看文章,自己學技術

每一篇文章都是福哥一個字一個字地敲出來的,都是福哥原創的。

每一篇文章都是經過了福哥的反覆驗證的,都是可以正常使用的。

相關焦點

  • docker學習筆記
    docker學習筆記1 docker環境安裝1.1 安裝yum-utils yum install -
  • Docker超詳細學習筆記
    大家好,我是java時光,以下是我吐血總結的Docker學習文檔,有詳細的案例,可以達到更好的學習效果!
  • 經驗總結 | Docker 使用筆記
    /docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose --version3、Docker 設置國內鏡像源
  • 我的Docker學習筆記(基礎篇)
    為什麼要學習docker我學習docker主要是因為Go,也是為了更好的實現devops的橋接,隨著caas平臺的推進,和打包即應用的快速部署等吸引所驅使。安裝 docker-io febootstrap(febootstrap用來製作centos鏡像的工具) yum install docker-io febootstrap -y redhat a.
  • Docker學習筆記(二)——Docker安裝
    複製代碼Step 4.2: 安裝指定版本的Docker-CE: (把下面VERSION改成指定版本即可)sudo apt-get -y install docker-ce=[VERSION]複製代碼Step 5: 查看docker是否啟動systemctl status docker複製代碼
  • Docker實戰筆記
    此Docker系列學習筆記,根據Reboot教育 (http://www.51reboot.com/)PC大神的運維自動化部分課程整理而成
  • 【長篇博文】Docker學習筆記(三):鏡像的分層、打包、雙向綁定、導入導出、Dockerfile的構建、部署與發布
    本文原文請去請去我的CSDN查看:https://blog.csdn.net/weixin_41194129/category_10210023.html長篇博文記錄學習流程不容易,請關注、轉發、點讚、評論,謝謝!
  • Docker學習之Dockerfile詳解
    上一篇學習了docker的基礎,知道docker有三大概念,鏡像,容器和倉庫。使用第三方鏡像不是學習docker的最終目的,最想要的還是要自己構建鏡像。    將自己的程序、文件、環境等構建成自己想要的應用鏡像、方便後續部署、啟動、維護。
  • docker筆記
    安裝  yum list | grep docker  yum install docker   或者   curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 以 centOS 為例
  • 應用異常監控利器 Sentry 搭建與學習筆記(修正版)
    redis2.docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres3.docker run --rm sentry config generate-secret-key這一步會生成一個密鑰key,比如 *l%)ti9=v4.docker run -it --
  • Docker學習之docker-compose詳解
    通過前面兩篇的學習,我們可以通過 Dockerfile 文件讓用戶很方便的定義一個單獨的應用容器。然後,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。# 前臺啟動docker-compose up# 後臺啟動docker-compose up -d# -f 指定使用的 Compose 模板文件,默認為 docker-compose.yml,可以多次指定,指定多個 ymldocker-compose -f docker-compose.yml up
  • Docker垃圾清理
    在docker 1.13版本之後,提供了對各種對象的prune命令,也提供了清理所有對象類型的docker system prune命令。但在docker 1.13之前的版本,則需要提供其他方式進行垃圾清理。2、垃圾清理2.1 docker v1.13之後版本的垃圾清理2.1.1 容器在停止容器時,系統並不會知道刪除這個容器,除非在運行此容器時設置了–rm欄位。
  • 免費學習 Docker 的最佳方法:Play-with-docker(PWD)
    去年在柏林的分布式系統峰會上,Docker 的負責人 Marcos Nils[1] 和 Jonathan Leibiusky[2] 宣稱已經開始研究瀏覽器內置 Docker 的方案,幫助人們學習
  • 通過Docker部署深度學習項目環境
    深度學習環境部署的方法有很多種,其中Docker化深度學習環境和項目是一個很不錯的選擇。
  • 收藏 | Docker教程,從入門到精通
    >上都進行操作wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce
  • Docker 學習 (一)
    docker pull [IMAGE_NAME]    # 拉取鏡像docker run -it -p 5000:5000 ubuntu /bin/bash參數說明:    -i: 交互式操作    -t: 終端    -d: 後臺運行    -p: 埠映射 主機埠:容器埠    -v: 目錄映射 本地目錄:/容器目錄    ubuntu
  • 啟用Docker虛擬機GPU,加速深度學習
    但我覺得還是有必要記錄一下我最近一次的深度學習環境配置,主要原因在於各種軟體在快速更新,對應的安裝配置方法也會有一些變化。這篇深度學習環境配置有兩個關鍵詞,一個是Docker虛擬機,另一個是GPU加速。開始之前Docker虛擬機首先說一下Docker虛擬機。為什麼需要虛擬機?
  • 一道ctf題目的docker學習
    一道ctf題目的docker學習lctf_2018_bestphp_s_revenge
  • docker學習10-註冊docker hub帳號
    前言Docker Hub是Docker的遠程鏡像倉庫,是 docker 官網推出的 docker 倉庫的一個公共伺服器,在上面可以有私有和公有的鏡像
  • 通過構建微服務來學習Docker
    如果你正在尋找練手機會以便深入學習Docker,那麼本文就是你最好的選擇。