日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

博客上云历程(二):Docker入门介绍与使用

發(fā)布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 博客上云历程(二):Docker入门介绍与使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Docker概述

  • Go語言開發(fā)
  • 基于LXC(LinuX Containers),以及 AUFS 類的 Union FS 等技術(shù)
  • 從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)、進(jìn)程隔離等方面對進(jìn)程進(jìn)行封裝隔離
  • 屬于操作系統(tǒng)層面的虛擬化技術(shù)
  • 由于隔離的進(jìn)程獨立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器
  • 單一容器或單一服務(wù)器的一組容器都不再是關(guān)注的重點,如何通過云原生應(yīng)用(Cloud Native Application)和微服務(wù)框架(Microservice Framework),把商業(yè)邏輯映射為容器集群,為商業(yè)成功奠定技術(shù)基礎(chǔ)才是核心。

特點

官方總結(jié)了Docker的6個特點,也可以說是優(yōu)勢,包括:

  • Flexible 靈活
  • Lightweight 輕量
  • Portable 可移植
  • Loosely coupled 松耦合
  • Scalable 可擴(kuò)展
  • Secure 安全

理解

James Turnbull在書[1]中將Docker容器總結(jié)為:

  • 一個鏡像格式
  • 一系列標(biāo)準(zhǔn)的操作
  • 一個執(zhí)行環(huán)境
  • 如果將容器看做碼頭上的標(biāo)準(zhǔn)的集裝箱,鏡像格式就是集裝箱的打包標(biāo)準(zhǔn);由于鏡像是由若干指令一步一步構(gòu)建而成的,因此也可以看做一系列標(biāo)準(zhǔn)操作的集合;集裝箱的目的是為了儲存轉(zhuǎn)運貨物,而容器的目的是運行軟件,我們使用集裝箱的目的是提供一個能夠保障貨物儲存的集裝箱條件,在Docker容器中,我們?yōu)檐浖a(chǎn)品提供了配套的執(zhí)行環(huán)境。

    [1] THE DOCKER BOOK, James Turnbull, https://dockerbook.com.

    Docker與VM不同

    最主要:避免虛擬機(jī)中的guestOS
    傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應(yīng)用進(jìn)程;而容器內(nèi)的應(yīng)用進(jìn)程直接運行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-cSyhd3E2-1584890133519)(./pic/VM.png)]
    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-pZbkfVeI-1584890133520)(./pic/Docker.png)]

    Docker常見名詞

    鏡像Image

    docker 鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。

    容器Container

    鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。

    容器的實質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運行于屬于自己的獨立的 命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進(jìn)程空間,甚至自己的用戶 ID 空間。容器內(nèi)的進(jìn)程是運行在一個隔離的環(huán)境里,使用起來,就好像是在一個獨立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運行更加安全。

    倉庫Registry

    鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主機(jī)上運行,但是,如果需要在其它服務(wù)器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry 就是這樣的服務(wù)。

    一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標(biāo)簽(Tag);每個標(biāo)簽對應(yīng)一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標(biāo)簽就常用于對應(yīng)該軟件的各個版本。我們可以通過 <倉庫名>:<標(biāo)簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標(biāo)簽,將以 latest 作為默認(rèn)標(biāo)簽。

    Docker安裝

    在Linux系統(tǒng)上可以直接安裝Docker,但是在OS X系統(tǒng)和Windows系統(tǒng)中應(yīng)該使用Docker Toolbox工具安裝Docker。

    不是基于Linux內(nèi)核的系統(tǒng)如何運行Docker?

    Docker Toolbox集合安裝了運行Docker所需的所有組件,包括VirtualBox和一個極小的虛擬機(jī),并提供了一個包裝腳本(wrapper script)對虛擬機(jī)進(jìn)行管理。 虛擬機(jī)在OS X和Windows系統(tǒng)中提供一個本地的守護(hù)進(jìn)程(Docker daemon running);同時,Docker客戶端作為OS X和Windows系統(tǒng)的原生程序被安裝,并連接到虛擬機(jī)中的守護(hù)進(jìn)程中。

    官方文檔https://docs.docker.com/install/linux/docker-ce/ubuntu/

    安裝條件

    • 64位CPU構(gòu)架的計算機(jī)
    • 運行Linux 3.8以上內(nèi)核
    • 內(nèi)核須開啟cgroup和namespace功能
    • 適合的存儲驅(qū)動(storage driver)

    docker在ubuntu上支持overlay2,aufs和btrfs三種storage drivers,其中,btrfs僅支持企業(yè)版Docker的SLES;overlay2是默認(rèn)的也是官方推薦的一種。

    版本介紹

    docker有兩個版本:

    • docker-ce(社區(qū)版)
    • docker-ee(企業(yè)版)

    這里介紹安裝社區(qū)版,也就是docker-ce。

    安裝

  • 卸載舊版本
  • $ apt-get remove docker docker-engine docker.io containerd runc
  • 通過repository安裝
  • # 檢查內(nèi)核 $ uname -a# 檢查存儲管理 $ ls -l /sys/class/misc/device-mapper# 更新源 $ apt-get update && apt-get upgrade# 安裝必備軟件 $ apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common# 添加Docker官方 GPG key $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 驗證key $ apt-key fingerprint 0EBFCD88# 查詢系統(tǒng)版本 $ lsb_release -a# 設(shè)置repository,以Ubuntu18.04為例,codename為bionic $ add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \bionic \stable"# 安裝Docker $ apt-get install docker-ce docker-ce-cli containerd.io# 查看docker信息 $ docker info# 查看docker運行狀態(tài) $ service docker status# 開啟/關(guān)閉/重啟Docker $ service docker start/stop/restart
  • 更換阿里源
    為了加速Docker下載鏡像的速度,可以更換阿里源.
    阿里云-容器鏡像服務(wù)-鏡像中心-鏡像加速器中獲取加速器地址.
  • $ vim /etc/docker/daemon.json

    添加以下配置:

    {"registry-mirrors": ["https://wb87kbxd.mirror.aliyuncs.com"] }

    重啟服務(wù)使換源生效

    $ systemctl daemon-reload && systemctl restart docker

    卸載

    $ sudo apt-get purge docker-ce $ sudo rm -rf /var/lib/docker

    建立交互式容器

    這里建立了一個基于Ubuntu的容器,并啟動了一個bash.

    $ sudo docker run -i -t ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 5c939e3a4d10: Pull complete c63719cdbe7a: Pull complete 19a861ea6baf: Pull complete 651c9d2d6c4f: Pull complete Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110 Status: Downloaded newer image for ubuntu:latest

    啟動后可以看到終端已經(jīng)進(jìn)入了容器,前面變成了"root@6abd43f72939:/# "

    查看容器主機(jī)名

    root@6abd43f72939:/# hostname 6abd43f72939

    查看host文件

    root@6abd43f72939:/# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 6abd43f72939

    使用net-tools查看網(wǎng)絡(luò)配置

    root@6abd43f72939:/# apt-get update root@6abd43f72939:/# apt-get install net-tools root@6abd43f72939:/# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)RX packets 11535 bytes 18505969 (18.5 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 11140 bytes 1042829 (1.0 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    查看容器進(jìn)程

    root@6abd43f72939:/# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 18508 3504 pts/0 Ss 08:51 0:00 /bin/bash root 260 0.0 0.0 34400 2864 pts/0 R+ 11:39 0:00 ps -aux

    原生的ubuntu源下載更新的速度較慢,這里可以更換阿里源

    # 備份 root@6abd43f72939:/# cp /etc/apt/sources.list /etc/apt/sources.list.bak# 打開源文件,注釋掉原有源,添加阿里源 root@6abd43f72939:/# vim /etc/apt/sources.list# 更新 root@6abd43f72939:/# apt-get update

    P.S. 阿里源如下:

    deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

    安裝vim程序順便驗證一下?lián)Q源后的有效性

    root@6abd43f72939:/# apt-get install vim

    退出容器

    root@6abd43f72939:/# exit exit

    退出后可以通過docker ps -a查看當(dāng)前系統(tǒng)中所有的容器,docker ps可以查看當(dāng)前正在運行的容器

    $ sudo docker ps -a [sudo] password for wangfeaibn: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6abd43f72939 ubuntu "/bin/bash" 3 hours ago Exited (0) 2 minutes ago hopeful_varahamihira

    如果創(chuàng)建時未指定,會初始化一個隨機(jī)的容器name,上面通過docker ps可以看到容器名稱為"hopeful_varahamihira".容器名和ID都可以唯一確定容器,但是使用容器名相對更加直觀,我們一方面可以通過創(chuàng)建是指定name,一方面在創(chuàng)建后也可以通過docker rename進(jìn)行更改,命名支持大小寫字母,數(shù)字和_.-,正則表達(dá)式為[a-zA-Z0-9_.-]

    # 指定容器名創(chuàng)建 $ sudo docker run --name hello_world -i -t ubuntu /bin/bash# 重命名, rename的第一個參數(shù)可以是id,還可以是name $ sudo docker rename [new_containerName]/[new_containerID] hello_world

    容器重啟.注意重啟后不會像創(chuàng)建時自動進(jìn)入創(chuàng)建時的會話,但是可以通過attach可以重新回到容器的會話中.

    # 重啟容器 $ sudo docker start hello_world hello_world# 容器會話附著 $ sudo docker attach hello_world root@6abd43f72939:/#

    創(chuàng)建守護(hù)式容器

    常用的提供各種服務(wù)的容器一般為守護(hù)式容器,守護(hù)式容器daemonized container可以長期運行,沒有交互式會話.

    # 創(chuàng)建守護(hù)式容器 $ sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"# 跟蹤式日志 $ sudo docker logs -ft daemon_dave

    Docker常用命令

    # 查看docker運行狀態(tài) $ sudo service docker status # 開啟/關(guān)閉/重啟Docker $ sudo service docker start/stop/restart # 查看docker信息 $ sudo docker info# 查看所有的本地image $ sudo docker image ls # 刪除 image $ docker image rm [imageName]# 查看所有容器 $ sudo docker ps -a 或者 $ sudo docker ls --all# 新建容器 $ sudo docker run --name [containerName] -i -t ubuntu /bin/bash # 創(chuàng)建但不運行容器 $ sudo docker create [containerName] # 停止守護(hù)式容器 $ sudo docker stop [containerName]/[containerID] # 刪除容器 $ sudo docker rm [containerName]/[containerID] # 刪除所有容器,引號內(nèi)返回所有容器的名稱 $ sudo docker stop $(docker ps -a -q) # 刪除所有容器 $ docker rm $(docker ps -a -q) # 刪除所有數(shù)據(jù)卷 $ docker volume rm $(docker volume ls -q) # 重啟(正在運行)/啟動(未運行)現(xiàn)有容器 $ sudo docker restart\start [containerName]/[containerID]# 創(chuàng)建bash進(jìn)入容器 $ docker exec -it [containerName] bash # 查看容器進(jìn)程 $ sudo docker top [containerName]/[containerID] # docker容器統(tǒng)計,同時查詢支持多個容器 $ sudo docker stats [containerName1] [containerName2].. # 獲取容器詳細(xì)信息 $ sudo docker inspect --format='{{ .State.Status }}' [containerName] # 獲取容器某項信息 $ sudo docker inspect --format='{{ .State.Status }}' [containerName]

    更多文章見我的博客:LittlePeanut

    總結(jié)

    以上是生活随笔為你收集整理的博客上云历程(二):Docker入门介绍与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。