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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu上安装使用Docker

發(fā)布時(shí)間:2023/12/4 Ubuntu 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu上安装使用Docker 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Docker簡(jiǎn)介

  • Docker是一個(gè)開(kāi)源的容器引擎,他有助于更快的交付應(yīng)用。Docker可以將應(yīng)用程序和基礎(chǔ)設(shè)施層做隔離,并且能將基礎(chǔ)設(shè)施當(dāng)做程序一樣進(jìn)行管理。使用Docker,可以更快的打包,測(cè)試以及部署應(yīng)用程序,并且可以縮短從編寫(xiě)到部署運(yùn)行的代碼調(diào)試周期。
    Docker官網(wǎng)
    Docker 的GitHub

Docker 的架構(gòu)

  • 以下是Docker官方文檔的架構(gòu)圖
  • Docker daemon(Docker守護(hù)進(jìn)程):Docker daemon是一個(gè)運(yùn)行在宿主機(jī)(DOCKER_HOST)的后臺(tái)進(jìn)程??梢酝ㄟ^(guò)Docker客戶端與Docker daemon進(jìn)行通信
  • Client (Docker 客戶端): Docker客戶端是Docker的用戶界面,他可以接受用戶命令和配置標(biāo)識(shí),并與Docker daemon通信。途中,Docker build 等都是Docker的相關(guān)命令
  • Images(Docker 的鏡像):Docker鏡像是一個(gè)只讀的模板,他包含創(chuàng)建Docker容器的說(shuō)明。他和系統(tǒng)安裝光盤(pán)有點(diǎn)像----使用系統(tǒng)安裝光盤(pán)可以安裝系統(tǒng),同理,使用Docker鏡像可以運(yùn)行Docker鏡像中的程序。
  • Container(容器):容器是鏡像的可運(yùn)行實(shí)例。鏡像和容器的關(guān)系有點(diǎn)類(lèi)似面向?qū)ο笾械?#xff0c;類(lèi)之于對(duì)象的關(guān)系??赏ㄟ^(guò)Docker API或者CLI命令來(lái)啟動(dòng)停止,移動(dòng),刪除容器。
  • Registry(類(lèi)似代碼倉(cāng)庫(kù)):Docker Registry是一個(gè)集中存儲(chǔ)于分發(fā)鏡像的服務(wù)。構(gòu)建完Docker鏡像后,就可以在當(dāng)前宿主機(jī)上運(yùn)行。如果想在其他機(jī)器上運(yùn)行這個(gè)鏡像,需要手動(dòng)負(fù)責(zé),或者借助Docker Registry來(lái)避免負(fù)責(zé),經(jīng)Docker鏡像push到Docker Registry上,然后在其他機(jī)器上pull對(duì)應(yīng)鏡像。

Docker安裝

  • 準(zhǔn)備Ubuntu系統(tǒng),或者虛擬機(jī),安裝程序可參照網(wǎng)址
安裝Docker
  • 官方Ubuntu存儲(chǔ)庫(kù)中提供的Docker安裝包,但是可能不是最新的版本,為了確保獲取最新版,我們將從Docker官網(wǎng)存儲(chǔ)庫(kù)安裝Docker。因此,我們需要添加一個(gè)新的資源包,從Docker添加GPG以確保下載有效,然后安裝該包:
  • 首先更新現(xiàn)有包列表,新安裝的ubuntu這個(gè)步驟可能會(huì)久一點(diǎn):
sudo apt update
  • 接下來(lái)使用按apt 安裝一下運(yùn)行通過(guò)HTTPS才能使用的軟件包
sudo apt install apt-transport-https sudo apt install ca-certificates sudo apt install curl sudo apt install software-properties-common
  • 將官方Docker存儲(chǔ)的GPG秘鑰添加到系統(tǒng):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 將Docker存儲(chǔ)庫(kù)添加到APT源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
  • 接下來(lái),使用新添加的repo源中的Docker包更新數(shù)據(jù)庫(kù):
sudo apt update
  • 確保從Docker repo安裝,而不是默認(rèn)的Ubuntu repo:
apt-cache policy docker-ce
  • 看到如下的輸出,說(shuō)明是成功的,版本不同輸出的日志應(yīng)該有一點(diǎn)點(diǎn)差異:
docker-ce:Installed: (none)Candidate: 5:19.03.12~3-0~ubuntu-bionicVersion table:5:19.03.12~3-0~ubuntu-bionic 500500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
  • 現(xiàn)在Docker-ce還沒(méi)有安裝,用上面這個(gè)命令我們能看到安裝源來(lái)自Docker官方存儲(chǔ)庫(kù),最后安裝Docker:
sudo apt install docker-ce
  • 現(xiàn)在Docker已經(jīng)安裝好了,檢查一下是否正常運(yùn)行:
sudo systemctl status docker
  • 有類(lèi)似如下的輸出,標(biāo)準(zhǔn)狀態(tài)正常:
● docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: eActive: active (running) since Tue 2020-07-21 00:07:42 PDT; 34s agoDocs: https://docs.docker.comMain PID: 20120 (dockerd)Tasks: 8CGroup: /system.slice/docker.service└─20120 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/contai
  • Docker不僅僅提供Docker服務(wù),還提供了Docker命令行工具或者Docker客戶端。
非Sudo執(zhí)行Docker命令
  • 默認(rèn)情況下,Docker命令只能Root用戶或者Docker組中用戶運(yùn)行,改用戶在Docker安裝過(guò)程中自動(dòng)創(chuàng)建,如果想要不使用Sudo運(yùn)行,或不在docker組中的用戶運(yùn)行會(huì)有錯(cuò)誤提示信息:
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.
  • 想要在運(yùn)行docer時(shí)候不輸入sudo,需要將用戶添加到docker組中,首先創(chuàng)建docker用戶組
sudo groupadd docker
  • 將用戶添加到docker用戶組
sudo usermod -aG docker ${USER_NAME}
  • 重啟docker服務(wù)
sudo systemctl restart docker
使用Docker命令
  • 以下我都用的root用戶來(lái)執(zhí)行,Docker命令使用包括傳遞一系列docker選項(xiàng)和命令,后跟參數(shù)。語(yǔ)法格式如下:
docker [option] [command] [arguments]
  • 查詢所有子命令輸入 docker,有如下:
Commands:attach Attach local standard input, output, and error streams to a running containerbuild Build an image from a Dockerfilecommit Create a new image from a container's changescp Copy files/folders between a container and the local filesystemcreate Create a new containerdiff Inspect changes to files or directories on a container's filesystemevents Get real time events from the serverexec Run a command in a running containerexport Export a container's filesystem as a tar archivehistory Show the history of an imageimages List imagesimport Import the contents from a tarball to create a filesystem imageinfo Display system-wide informationinspect Return low-level information on Docker objectskill Kill one or more running containersload Load an image from a tar archive or STDINlogin Log in to a Docker registrylogout Log out from a Docker registrylogs Fetch the logs of a containerpause Pause all processes within one or more containersport List port mappings or a specific mapping for the containerps List containerspull Pull an image or a repository from a registrypush Push an image or a repository to a registryrename Rename a containerrestart Restart one or more containersrm Remove one or more containersrmi Remove one or more imagesrun Run a command in a new containersave Save one or more images to a tar archive (streamed to STDOUT by default)search Search the Docker Hub for imagesstart Start one or more stopped containersstats Display a live stream of container(s) resource usage statisticsstop Stop one or more running containerstag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEtop Display the running processes of a containerunpause Unpause all processes within one or more containersupdate Update configuration of one or more containersversion Show the Docker version informationwait Block until one or more containers stop, then print their exit codes
  • 查看有關(guān)Docker的系統(tǒng)信息:
docker info
  • 搜索鏡像:
socker search java
  • 執(zhí)行后可以看到如下表格信息
NAME DESCRIPTION STARS OFFICIAL AUTOMATED node Node.js is a JavaScript-based platform for s… 9044 [OK] tomcat Apache Tomcat is an open source implementati… 2785 [OK] openjdk OpenJDK is an open-source implementation of … 2347 [OK] java Java is a concurrent, class-based, and objec… 1976 [OK] ghost Ghost is a free and open source blogging pla… 1221 [OK] couchdb CouchDB is a database that uses JSON for doc… 358 [OK] jetty Jetty provides a Web server and javax.servle… 340 [OK] groovy Apache Groovy is a multi-faceted language fo… 97 [OK] lwieske/java-8 Oracle Java 8 Container - Full + Slim - Base… 46 [OK] nimmis/java-centos This is docker images of CentOS 7 with diffe… 42 [OK] fabric8/java-jboss-openjdk8-jdk Fabric8 Java Base Image (JBoss, OpenJDK 8) 28 [OK] frekele/java docker run --rm --name java frekele/java 12 [OK] fabric8/java-centos-openjdk8-jdk Fabric8 Java Base Image (CentOS, OpenJDK 8,11 [OK] blacklabelops/java Java Base Images. 8 [OK] ..............
  • 以上表格中五列含義如下:

    • NAME:鏡像倉(cāng)庫(kù)名稱
    • DESCRIPTION:鏡像倉(cāng)庫(kù)描述
    • STARS:鏡像倉(cāng)庫(kù)收藏?cái)?shù)量,標(biāo)識(shí)該鏡像受歡迎程度,類(lèi)似GitHub的Stars
    • OFFICAL:表示是否為官方倉(cāng)庫(kù),改列標(biāo)記為[OK] 的鏡像都是各軟件官方項(xiàng)目組創(chuàng)建和維護(hù)的。由結(jié)果可知,frekele/java 這個(gè)鏡像不是官方倉(cāng)庫(kù)。
    • AUTOMATED:表示是否是自動(dòng)構(gòu)建的鏡像倉(cāng)庫(kù)
  • 下載鏡像

    • 使用 docker pull 命令可以從Docker Registry上下載鏡像,例如:docker pull java
    • 命令執(zhí)行后,Docker會(huì)從Docker Hub上的java殘酷中下載最新版本的java鏡像。若鏡像下載緩慢可以配置加速器(以下會(huì)講解加速器配置)
  • 列出已有鏡像,使用docker images命令可以列出已經(jīng)下載的鏡像。執(zhí)行后有如下表格:

REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest adafef2e596e 2 weeks ago 73.9MB 645121107/ljmadmin myHelloWorld bf756fb1ae65 6 months ago 13.3kB hello-world latest bf756fb1ae65 6 months ago 13.3kB
  • 包括五列,分別有如下意義:
    • REPOSITORY:鏡像所屬的倉(cāng)庫(kù)名稱
    • TAG:鏡像標(biāo)簽,默認(rèn)是lastest,表示最新
    • IMAGE ID:鏡像ID,表示鏡像唯一標(biāo)識(shí)
    • CREATED:鏡像創(chuàng)建時(shí)間
    • SIZE:鏡像大小
  • 刪除鏡像:
docker rmi hello-world
  • 刪除鏡像可能遇到如下問(wèn)題,原因是提示有關(guān)聯(lián)的Docker容器,因?yàn)槲覀兛吹絙f756fb1ae65 對(duì)應(yīng)了兩個(gè)容器,一個(gè)是我們自己提交的tag,通過(guò)hello-world生成的一個(gè)鏡像,系統(tǒng)無(wú)法識(shí)別你要?jiǎng)h除的是哪一個(gè):
root@ljmadmin-virtual-machine:/home/ljmadmin# docker rmi bf756fb1ae65 Error response from daemon: conflict: unable to delete bf756fb1ae65 (must be forced) - image is referenced in multiple repositories
  • 我們刪除的時(shí)候可以用指定repository和tag的方式來(lái)刪除,比如:
root@ljmadmin-virtual-machine:/home/ljmadmin# docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
  • 如上,線上已經(jīng)被刪除成功
批量刪除鏡像
  • 刪除所有:
docker rm `docker ps -a -q`
  • 刪除所有鏡像
docker rmi `docker images -q`
  • 按條件刪除鏡像
//沒(méi)有標(biāo)簽情況 docker rmi `docker images -q | awk '/^<none>/ {pring $3}'` //鏡像名包含關(guān)鍵字 docker rmi --force `docker images | grep eureka | awk '{print $3}'` //其中eureka為關(guān)鍵字
Docker 容器常用命令
  • 新建并啟動(dòng)容器:使用docker run 命令可以新建并啟動(dòng)一個(gè)容器。該命令是常用命令,他有很多選項(xiàng),下面列舉某一些選項(xiàng):
    • -d選項(xiàng):表示后臺(tái)運(yùn)行
    • -p選項(xiàng):隨機(jī)端口映射
    • -p選項(xiàng):指定端扣映射,有以下四種格式:
      • ip:hostPort:containerPort
      • ip::containerPort
      • hostPort:containerPort
      • containerPort
    • –network選項(xiàng): 指定網(wǎng)絡(luò)模式,該選項(xiàng)有以下可選參數(shù):
      • –network=bridge:默認(rèn)選項(xiàng),表示連接到默認(rèn)的網(wǎng)橋
      • –network=host:容器使用宿主機(jī)網(wǎng)絡(luò)
      • –network=container:NAME_or_ID:告訴Docker讓新建的容器使用已有容器的網(wǎng)絡(luò)配置。
      • –network=none:不配置該容器網(wǎng)絡(luò),用戶可以自定義網(wǎng)絡(luò)配置
  • 示例一,這樣終端會(huì)打印Hello world,跟在本地執(zhí)行/bin/echo ‘Hello world’ 得到一樣的結(jié)果:
docker run java /bin/echo 'Hello world'
  • 示例二,啟動(dòng)一個(gè)Nginx容器,這里添加了兩個(gè)參數(shù),含義與命令如下所示:
docker run -d -p 91:80 nginx //沒(méi)有nginx鏡像時(shí)候,會(huì)先下載在啟動(dòng) // -d 表示后臺(tái)運(yùn)行 //-p 宿主機(jī)端口:容器端口 # 開(kāi)放容器端口到宿主機(jī)端口
  • 訪問(wèn)http://Docker宿主機(jī)IP:91,將會(huì)看到如下界面

  • 進(jìn)入容器,某些場(chǎng)景下需要進(jìn)入容器中。

    • 使用docker sttach命令進(jìn)入容器,弊端在于,使用此命令并不方便,當(dāng)多個(gè)窗口同事attach到同一個(gè)容器時(shí)候,所有窗口都會(huì)同步顯示。同樣,當(dāng)某個(gè)窗口發(fā)生阻塞,其他窗口也無(wú)法執(zhí)行操作。命令如下
    • 使用nsenter進(jìn)入容器:nsenter工具包含在util-linux2.23或者更高版本中。為了連接到容器,需要找到容器第一個(gè)進(jìn)程PID,可以以下命令獲取
    • 以上獲取到PID后,就可以使用nsenter進(jìn)入容器,完整命令如下
docker attach b8488a2dcef8 docker inspect --format "{{.State.Pid}}" $CONTAINER_ID nsenter --target "$PID" --mount --uts --ipc --net --pid - 完整案例如下圖:

配置鏡像加速器
  • 國(guó)內(nèi)訪問(wèn)Docker Hub的速度很不穩(wěn)定,有時(shí)候會(huì)出現(xiàn)鏈接不上的情況。我們可以通過(guò)配置國(guó)內(nèi)鏡像加速器的形式來(lái)解決問(wèn)題。目前,國(guó)內(nèi)很多公司云服務(wù)商提供了鏡像加速服務(wù)。常用鏡像加速器有:阿里云加速器,DaoCloud加速器。我用的阿里云的加速器,配置如下:
  • 注冊(cè)阿里云賬號(hào),登錄控制臺(tái)(https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors),如下圖
  • 按上圖所示進(jìn)行配置即可。
  • 使用Docker鏡像
    • Docker容器是從Docker進(jìn)行構(gòu)建的,默認(rèn)情況下,Docker從Docker Hub中pull下來(lái)的這些鏡像,這是一個(gè)由Docker管理的Docker鏡像市場(chǎng),這是Docker項(xiàng)目背后的公司。任何人都可以在Docker Hub上托管他們的Docker鏡像,所以你只要將你的應(yīng)用程序和LInux放再那邊托管就可以。
    • 我們用剛才pull的hello-world鏡像測(cè)試,輸入:
    docker run hello-world
    • 輸出下面的內(nèi)容說(shuō)明已經(jīng)成功運(yùn)行
    Hello from Docker! This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal. ..................
    運(yùn)行Docker容器
    • 上一步中,hello-world容器運(yùn)行并發(fā)出一個(gè)測(cè)試消息后退出容器,容器可以比這更有用,是可以相互交互的,比較,類(lèi)似虛擬機(jī),只是更加有利于資源。
    • 我們用ubuntu的鏡像做一個(gè)測(cè)試,通過(guò)-i, -t子命令提供了容器的交互shell訪問(wèn):
    docker pull ubuntu docker run -it ubuntu
    • 執(zhí)行以上兩個(gè)命令就可以進(jìn)入到ubuntu鏡像內(nèi)部,shell展示如下
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker run -it ubuntu root@b8488a2dcef8:/#
    • 如上命令提示符中的容器ID,在此處是b8488a2dcef8,在此shell中不需要sudo,因?yàn)槭怯胷oot用戶身份在容器中操作,我們?cè)诖绥R像中安裝一個(gè)node:
    apt update apt install nodejs node -v
    • 得到如下結(jié)果:
    root@b8488a2dcef8:/# node -v v10.19.0
    • 退出容器,直接輸入exit或者Ctrl+d 退出,兩種方式有如下區(qū)別
      • 對(duì)于創(chuàng)建的bash容器,當(dāng)使用exit命令退出后,容器就自動(dòng)處于退出(Exited)狀態(tài),這是因?yàn)閷?duì)Docker容器來(lái)說(shuō),當(dāng)運(yùn)行的應(yīng)用退出后,容器就沒(méi)有繼續(xù)運(yùn)行的必要
      • 而用Ctrl退出后,容器還會(huì)在運(yùn)行,他認(rèn)為你只是退出了命令界面的鏈接狀態(tài)而已
    Docker容器管理
    • 使用Docker后,可能有很多非運(yùn)行狀態(tài)的容器,我們需要查詢?nèi)萜鞯倪\(yùn)行狀態(tài)用如下命令:
    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8488a2dcef8 ubuntu "/bin/bash" 6 minutes ago Up 6 minutes adoring_knuth
    • 看到如上輸出,每一列的含義如下:

      • CONTAINER_ID:表示容器ID
      • IMAGE:表示鏡像名稱
      • COMMAND:表示啟動(dòng)容器時(shí)運(yùn)行的命令
      • CREATED:表示容器創(chuàng)建時(shí)間
      • STATUS:容器運(yùn)行狀態(tài),Up標(biāo)識(shí)運(yùn)行中,Exited表示停止
      • PORTS:容器對(duì)外的端口號(hào)
      • NAMES:表示容器名稱,默認(rèn)由Docker自動(dòng)生成,也可以docker run 命令后面–name自行指定。
    • 查看所有容器情況使用 docker ps -a,得到所有的信息,如下:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8488a2dcef8 ubuntu "/bin/bash" 15 minutes ago Up 15 minutes adoring_knuth 43971aec0ea0 hello-world "/hello" 26 minutes ago Exited (0) 26 minutes ago dazzling_hodgkin
    • 只查看已經(jīng)啟動(dòng)的容器:
    docker ps
    • 啟動(dòng)已經(jīng)停止的容器,使用Docker start ,后面跟上容器ID b8488a2dcef8 ,啟動(dòng)后status會(huì)變?yōu)閡p狀態(tài)
    • 同樣,停止容器,使用docker stop CONTAINER_ID,更容器id或者容器名稱
    • 批量停止容器 docker stop 51c20c4f5a04 22c37049f352 1ac1218c1a54
    • 刪除容器,當(dāng)我們不需要某個(gè)容器時(shí)候,可以docker rm刪除,上面內(nèi)容以及講過(guò)這個(gè)命令。
    將容器中的更改提交給Docker鏡像
    • 當(dāng)啟動(dòng)Docker鏡像后,可以像虛擬機(jī)一樣創(chuàng)建,修改,刪除文件。例如ubuntu鏡像,我們所有更改都僅僅在鏡像內(nèi)部而已。我們可以通過(guò)docker rm銷(xiāo)毀,但是會(huì)永久丟失。
    • 在ubuntu容器中安裝Nodejs后,我們現(xiàn)在想要將這個(gè)容器作為一個(gè)新的容器,可以如下操作:
    docker ps -a //找到對(duì)應(yīng)ubuntu鏡像id docker commit -m "my ubuntu" -a "ljmadmin" b8488a2dcef8 ljmadmin/ubuntu-nodejs
    • 如上commit命令,對(duì)于ljmadmin用戶,使用容器id b8488a2dcef8 作為目標(biāo)鏡像,打包成新鏡像 ljmadmin/ubuntu-nodejs ,得到如下所有images信息:
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ljmadmin/ubuntu-nodejs latest 6e1bc5c5a996 About a minute ago 163MB ubuntu latest adafef2e596e 2 weeks ago 73.9MB 645121107/ljmadmin myHelloWorld bf756fb1ae65 6 months ago 13.3kB hello-world latest bf756fb1ae65 6 months ago 13.3kB
    • 在如上列表中新鏡像ubuntu-nodejs 是動(dòng)Docker Hub的Ubuntu現(xiàn)有鏡像中衍生出來(lái)的,鏡像大小的差異可以看出有變化因此下次我們可以直接使用ubuntu-nodejs 新的鏡像。
    Dockerfile構(gòu)建鏡像
    • 待續(xù)
    將Docker鏡像推送到Docker存儲(chǔ)庫(kù)
    • 我們以上提到的從Docker Hub pull下來(lái)的鏡像都是在我們本地,包括我們自己commit生成的也是在本地,如果需要遷移需要先將鏡像推到遠(yuǎn)程倉(cāng)庫(kù),我們需要 一個(gè)Docker Hub的倉(cāng)庫(kù)賬號(hào)信息
    docker login -u docker-registry-username //docker-registry-username 標(biāo)識(shí)你注冊(cè)docker Hub的用戶名
    • 系統(tǒng)將提升輸入Docker Hub的密碼進(jìn)行身份驗(yàn)證,然后你可以使用以下方法推送自己的鏡像:
    • 第一步:獲取需要推送到遠(yuǎn)端鏡像的 容器ID(CONTAINER ID),此處我們用ubuntu來(lái)進(jìn)行測(cè)試提交,ID是b8488a2dcef8,如下命令:
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8488a2dcef8 ubuntu "/bin/bash" 3 hours ago Exited (0) 3 hours ago adoring_knuth 43971aec0ea0 hello-world "/hello" 4 hours ago Exited (0) 4 hours ago dazzling_hodgkin
    • 第二步將對(duì)應(yīng)Docker容器打包成鏡像:
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker commit -m "my first ubuntu" -a "ljmadmin" b8488a2dcef8 ljmadmin/ubuntu-nodejs sha256:acd28a5810ec9e3ecd656fcaf58551552804f7a5663e3c201a1d3d7712621120
    • 第三步Docker Images 命令查詢打包好的鏡像文件,并且獲取對(duì)應(yīng)鏡像ID:
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ljmadmin/ubuntu-nodejs latest acd28a5810ec 20 seconds ago 163MB ubuntu latest adafef2e596e 2 weeks ago 73.9MB hello-world latest bf756fb1ae65 6 months ago 13.3kB
    • 第四部:將需要提交的鏡像文件通過(guò)docker tag命令打包成自己倉(cāng)庫(kù)對(duì)應(yīng)的鏡像文件(之前的鏡像默認(rèn)是Docker hub公共的倉(cāng)庫(kù))
    root@ljmadmin-virtual-machine:/home/ljmadmin# docker tag acd28a5810ec 645121107/ljmadmin root@ljmadmin-virtual-machine:/home/ljmadmin# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 645121107/ljmadmin latest acd28a5810ec 15 minutes ago 163MB ljmadmin/ubuntu-nodejs latest acd28a5810ec 15 minutes ago 163MB ubuntu latest adafef2e596e 2 weeks ago 73.9MB 645121107/ljmadmin myHelloWorld bf756fb1ae65 6 months ago 13.3kB hello-world latest bf756fb1ae65 6 months ago 13.3kB
    • 此處沒(méi)有指定tag的名稱,如需指定名稱用以下命令:
    docker tag acd28a5810ec 645121107/ljmadmin:yourTagName
    • 如上images命令后可以看的多了一個(gè)倉(cāng)庫(kù)名稱(REPOSITORY)是645121107/ljmadmin的鏡像文件,并且該鏡像文件的id和我們之前通過(guò)tag打包成鏡像的id是同一個(gè),說(shuō)明他們是同一個(gè)文件,我們可以理解為將他的副本映射到了我們自己的倉(cāng)庫(kù)地址,以下是我創(chuàng)建的倉(cāng)庫(kù)

    • 第五步提交對(duì)應(yīng)鏡像文件,通過(guò)docker push命令提交

    root@ljmadmin-virtual-machine:/home/ljmadmin# docker push 645121107/ljmadmin
    • 執(zhí)行以上命令后會(huì)得到如下的輸出,因?yàn)槲募惺畮譓甚至100M,所以需要一定時(shí)間,以上命令和git push類(lèi)似,645121107/ljmadmin 其實(shí)就是遠(yuǎn)程倉(cāng)庫(kù)地址,如果ljmadmin 是別在包例如645121107/1234,docker hub也會(huì)自動(dòng)在遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建新的文件1234.
    • 在倉(cāng)庫(kù)中可以看到剛才提交的文件如下:
    • 第六部:驗(yàn)證提交的鏡像文件有效
    docker rmi docker rmi 645121107/ljmadmin:latest //通過(guò)rmi命令刪除本地對(duì)應(yīng)的鏡像文件 root@ljmadmin-virtual-machine:/home/ljmadmin# docker images //查看現(xiàn)有鏡像文件 REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest adafef2e596e 2 weeks ago 73.9MB root@ljmadmin-virtual-machine:/home/ljmadmin# docker pull 645121107/ljmadmin:latest
    • 如下圖所示,說(shuō)明以及在下載文件:
    查看Docker容器啟動(dòng)日志
    • 用的最多的一個(gè),實(shí)時(shí)日志跟蹤,類(lèi)似 tail -f -n 300 xxx.log
    sudo docker logs -f -t --tail 行數(shù) 容器名 //docker logs [OPTIONS] CONTAINER //sudo docker logs -f -t 300 CONTAINER_ID
    • Options操作如下:

      • –details 顯示更多信息
      • -f, --follow 跟蹤實(shí)時(shí)日志信息
      • –since string 顯示自某個(gè)timestamp之后的日志,或相對(duì)時(shí)間,如40m(40分鐘)
      • -tail string 從日志末尾開(kāi)始算顯示多少行日志,默認(rèn)是all
      • -t, --timestamp 顯示時(shí)間搓
      • –until string 顯示自某個(gè)timestamp之前的日志信息,或者相對(duì)時(shí)間,如40m(40分鐘)
    • 查看最近30分鐘的日志:

    docker logs --since 30m CONTAINER_ID
    • 查看某時(shí)間之后的日志:
    docker logs -f --since = "2020-08-26T13:23:37" CONTAINER_ID
    • 查看某時(shí)間段日志:
    docker logs -t --since= "2020-08-25T13:23:37" --until "2020-08-26T13:23:37" CONTAINER_ID

    下一篇 SpringCloud + Docker

    總結(jié)

    以上是生活随笔為你收集整理的Ubuntu上安装使用Docker的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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