主頁 >  其他 > Docker不會?不,你缺的是一篇博客( •? ω •? )?

Docker不會?不,你缺的是一篇博客( •? ω •? )?

2022-01-18 10:01:51 其他

Docker 進階篇

docker學不會?no,no,no,有時候你缺的只是一篇博客而已!
docker大全,全是干貨,趕緊整起來吧!

文章目錄

  • Docker 進階篇
    • Docker入門
      • 什么是Docker?
      • 為什么要用docker?
      • 相關概念:
    • Docker常用命令
      • Docker 幫助指令:
      • 鏡像操作命令:
      • 容器操作命令:
    • Docker網路
        • docker的網路模式
        • docker 自定義網路:
        • 容器的埠暴露
    • Docker資料卷
        • 資料卷的使用場景
        • 資料卷實驗
          • 創建資料卷
          • 清理資料卷
          • 實驗展示:
        • 資料卷容器
    • Dockerfile
        • **構建步驟:**
        • **基礎知識:**
        • dockerfile 分層原理:
        • dockerfile指令:
        • 優化方式:
        • 發布自己的鏡像
          • 1、我們先 push 到dockerHub上:
          • 2、鏡像push到阿里云上:

Docker入門

什么是Docker?

  • Docker 是世界領先的軟體容器平臺,
  • Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用介面,
  • Docker 將應用程式與該程式的依賴,打包在一個檔案里面,運行這個檔案,就會生成一個虛擬容器,程式在這個虛擬容器里運行,就好像在真實的物理機上運行一樣,有了 Docker,就不用擔心環境問題,

像我們經常說的“在我的機器上可以正常運行,到你的機器上就不行”,這個一般都是環境引起的,而docker可以完美的解決這個問題,

為什么要用docker?

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小,傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可,

docker優勢:

1、更快速的交付和部署;

2、更高效的虛擬化;

3、更輕松的遷移和擴展;

4、更簡單的管理;

相關概念:

Docker是CS架構;

  • Docker daemon: 運行在宿主機上,Docker守護行程,用戶通過Docker client(Docker命令)與Docker daemon互動
  • Docker client: Docker 命令列工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通信并將結果回傳給用戶,Docker client也可以通過socket或者RESTful api訪問遠程的Docker daemon,

了解一下Docker的三個主要概念:

  • Docker image:鏡像是只讀的,鏡像中包含有需要運行的檔案,鏡像用來創建container,一個鏡像可以運行多個container;鏡像可以通過Dockerfile創建,也可以從Docker hub/registry上下載,
  • Docker container:容器是Docker的運行組件,啟動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程式運行在一個相對安全的環境中,
  • Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像,官方地址為https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry,

鏡像就相當于打包好的版本,鏡像啟動之后運行在容器中,倉庫就是裝存盤鏡像的地方,

Docker常用命令

Docker 幫助指令:

在操作docker時,我們常需要輸入一些指令,那這些指令怎么用呢?

這里我們可以借助官方檔案進行查看指令的用處;(這里我們需要登入一下dockerhub ,沒有的話我們就注冊一個);

在這里插入圖片描述
在這里插入圖片描述

另外,我們也可以在docker中查看指令怎么用;

#查看幫助指令
docker 指令 --help

在這里插入圖片描述


鏡像操作命令:

#下載鏡像
docker pull 鏡像名[:tag]
docker pull centos:7   #如果不指定tag,默認是pull最新的 latest

也可以去官網 pull 鏡像

https://hub.docker.com/_/centos?tab=tags

在這里插入圖片描述
在這里插入圖片描述

#查看鏡像的資訊:
docker images
#獲取鏡像資訊
docker inspect 鏡像ID

#有些時候我們pull下來的鏡像,在自己這添加了一些功能后,可以為其添加標簽在 push到dockerhub上
#為鏡像添加標簽:
#如,為nginx:latest 鏡像添加標簽
docker tag nginx:latest nginx:lnmp

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

當我們不需要某些鏡像時,我們還可以刪掉某些鏡像:

#洗掉鏡像
docker rmi 鏡像名或ID
#洗掉鏡像標簽
docker rmi 鏡像名:tag
#還可以批量洗掉所有鏡像
docker rmi `docker images -q`   #這里的-q 只會輸出鏡像ID

[root@docker ~]#docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    605c77e624dd   2 weeks ago    141MB
hello-world   latest    feb5d9fea6a5   3 months ago   13.3kB
[root@docker ~]#docker images -q
605c77e624dd
feb5d9fea6a5

在這里插入圖片描述

有些時候,我們自己創建的鏡像,如果在沒網的情況下,要使用的話,我們就需要先把他匯出來,在沒網的時候導進去即可;

#鏡像的匯出匯入
docker save -o 檔案名 鏡像名 
示例:
docker save -o nginx_docker nginx:latest

#鏡像匯入
docker load < nginx_docker

鏡像匯出匯入的意義?

  • Docker鏡像的匯入匯出,用于遷移、備份、升級等場景;
  • 若是只想備份images,使用save、load即可;
  • 若是在啟動容器后,容器內容有變化,需要備份容器,則使用export、import;

當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改,

  • 1、從已經創建的容器中更新鏡像,并且提交這個鏡像
  • 2、使用 Dockerfile 指令來創建一個新的鏡像

容器操作命令:

首先安裝好docker和啟動docker:

#運行容器
docker run hello-world
#卸載docker
#洗掉安裝包:
yum remove docker-ce
#洗掉鏡像、容器、組態檔等內容
rm -rf /var/lib/docker

我們可以自己創建容器:

#創建容器
docker create -it nginx:latest /bin/bash   
#-i:提供一個操作容器的介面
#-t:是一個偽終端,使操作容器有個落腳點
#/bin/bash:放在鏡像名后的是命令,這里我們希望有個互動式 Shell,因此用的是 /bin/bash,

在這里插入圖片描述

在創建完容器后,我們要啟動他:

#啟動容器
docker start 容器id
#停止容器
docker stop 容器ID

#有些時候我們可以在創建的時候就啟動它
#并在啟動后讓他執行一些指令,列如:-c 后面表示要執行的命令
docker run -it centos:7 /bin/bash -c ls /   #但它是一次性的,執行完后就會退出

在這里插入圖片描述
在這里插入圖片描述

#查看docker 相關資訊
docker version
#或者 
docker info
docker inspect 容器name(id)

啟動容器的幾種方式:

#啟動容器:
#這種情況會在你退出容器時而停止容器運行
docker run -it nginx:latest /bin/bash

#持續后臺運行容器,這里借助了死回圈陳述句
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"

#查看所有容器
docker ps -a
#查看所有容器id
docker ps -aq

在這里插入圖片描述

但在大部分的場景下,我們希望 docker 的服務是在后臺運行的,我們可以過 -d 指定容器的運行模式,

#注意:這里加-d 不會進入容器;
docker run -itd centos:7 /bin/bash

#進入容器
docker exec -it 容器ID /bin/bash   exec下(容器必須為開啟狀態)

在這里插入圖片描述

三種運行容器的區別

  • docker run -it會創建前臺行程,但是會在輸入exit后終止行程,
  • docker attach 會通過連接stdin,連接到容器內輸入輸出流,會在輸入exit后終止容器行程,
  • docker exec -it 會連接到容器,可以像ssH一樣進入容器內部,進行操作,可以通過exit退出容器,不影響容器運行,
#容器的匯出與匯入
#容器匯出
docker export 容器ID >檔案名 
示例:
docker export nginx:latest >nginx_a

#容器匯入(生成鏡像)
docker import 匯出的檔案名(容器)指定鏡像名稱
示例:
docker import nginx_a nginx:latest
cat 檔案名(容器)| docker import - nginx:latest
##洗掉容器
docker rm 容器工D
docker rm `docker ps -aq`

#強制洗掉容器(正在運行的)
docker rm -f 容器ID

#批量洗掉容器(正則匹配)
docker ps -a \ awk '{print "docker rm "$1} ' l bash#洗掉非up狀態的rm -f強制洗掉
docker rm `docker ps -q`

#批量洗掉"exit"狀態(指定狀態)的容器
for i in `docker ps -a | grep -i exit | awk '{print $1}'; do
docker rm -f$i; done

#查詢所有當前容器資源消耗資訊
docker stats 容器ID

#查看容器資訊:
docker inspect 容器id

#搜索容器:
docker search 容器name

#查詢最后一次創建的容器:
docker ps -l

Docker網路

前面我們實作了通過網路埠來訪問運行在 docker 容器內的服務,

容器中可以運行一些網路應用,要讓外部也可以訪問這些應用,可以通過 -P-p 引數來指定埠映射,

首先了解docker網路之前我們先看看宿主機上有哪些網卡:

1、lo:回環網卡;檢測TCP/IP是否生效

2、ens33網卡:宿主機網卡,只有centos7是叫ens33,其他linux發行版都是eth0網卡;

3、virbr0網卡:是服務器硬體網卡;

4、docker 0:容器的網關,系結物理網卡,負責做NAT地址轉換、埠映射;docker0本身也是一種容器;

在這里插入圖片描述

另外還有就是 weth-pair對:

veth對:一組虛擬設備,用戶連接兩個不同的名稱空間;宿主機內就是veth;

在這里插入圖片描述

這都是一對一對出現的,如 9: vethd8e28c8@if8,11: vethd058aa4@if10;

docker的網路模式

  • Host模式:-net=host;容器和宿主機共享Network namespace(網路名稱空間/網路協議堆疊),
  • Container模式:-net=container:NAME or ID;多個容器共享一 個Network namespace ,
  • None模式:-net=none;容器有獨立的Network namespace,但并沒有對其進行任何網路設定,如分配veth pair和網橋連接,配置IP等(自閉空間),
  • Bridge模式:-net=bridge(默認為該模式);默認模式通過Veth對連接容器與docker0網橋,網橋分配給容器IP,同時docker0作為“局域網“內容器的網關,最后和宿主機網卡進行通訊,

在這里插入圖片描述
在這里插入圖片描述

這些都是docker自帶的,除了這些,我們還可以對docker 自定義網路;

docker 自定義網路:

docker network ls ##查看網路串列

#還可以查看容器網關,IP,埠等資訊
docker inspect 容器ID

在這里插入圖片描述
在這里插入圖片描述

這里默認的都是從172.17.0.1/16 開始,

接下來我們自定義網路:

首先了解一下自定義網路的好處:

1、如果我們用docker默認的網路,當我們的容器停止修改優化后,再上線時IP會換成其他的IP,不再是原來的那個IP,這會導致訪問不到我們的業務,并可能照成業務癱瘓,

2、為了解決這種情況,我們就需要自定義網路,讓每個容器有自己的IP,即使容器老掉線,但只要再次上線,他就還是原來的那個IP,

#指定分配容器IP地址
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash
	--network:指定網路型別
	--ip:指定ip地址
#注意:這里會報錯,因為這是容器默認給的IP,不可以修改

在這里插入圖片描述

我們要先自定義一個網路,才可以給他固定的IP;

#自定義網路,固定IP
docker network create --subnet=172.18.0.0/16 mynetwork   #先自定義個網路
docker run -itd --name test02 --net mynetwork --ip 172.18.0.100 centos:latest /bin/bash   #這里就可以給容器指定IP了

在這里插入圖片描述
在這里插入圖片描述

容器的埠暴露

在我們配置到IP后,我們要將業務暴露出去,給別人訪問,例如:我們這有一個nginx服務容器,那我們怎么才能讓別人訪問到我們的容器呢?

這里我們就需要將我們的nginx容器的服務埠暴露到宿主機上,這樣別人訪問我們 宿主機IP:暴露埠 就可以訪問到我們的業務了,

#暴露埠
#-p自定義埠(宿主機埠:容器內埠)
docker run -itd -p 90:80 nginx:latest /bin/bash

#-P隨機埠(-P 49153起始,49153到65535)
docker run -itd -P nginx:latest /bin/bash

在這里插入圖片描述

#我們把nginx運行起來看看效果
docker exec 684f2a3263d8 nginx

在這里插入圖片描述

這里的隨機埠也是這樣測驗的,只不過隨機埠不用指定埠映射,他默認從49153開始;

不過要注意的是,當你隨機了一個容器埠映射后,再把這個容器刪掉,之后在創建容器隨機映射埠后,他會從下一個開始,一直這樣下去,不會有重復的;并且這里的隨機埠也是偽隨機,他是從49153開始一直排下去的;

Docker資料卷

在Docker中,要想實作資料的持久化(所謂Docker的資料持久化即***資料不隨著Container的結束而結束***),需要將資料從宿主機掛載到容器中,目前Docker提供了三種不同的方式將資料從宿主機掛載到容器中:

(1)volumes:Docker管理宿主機檔案系統的一部分,默認位于 /var/lib/docker/volumes 目錄中;(最常用的方式

(2)bind mounts:意為著可以存盤在宿主機系統的任意位置;(比較常用的方式

但是,bind mount在不同的宿主機系統時不可移植的,比如Windows和Linux的目錄結構是不一樣的,bind mount所指向的host目錄也不能一樣,這也是為什么bind mount不能出現在Dockerfile中的原因,因為這樣Dockerfile就不可移植了,

(3)tmpfs:掛載存盤在宿主機系統的記憶體中,而不會寫入宿主機的檔案系統;(一般都不會用的方式

資料卷的使用場景

  • 在多個容器之間共享資料,多個容器可以同時以只讀或者讀寫的方式掛載同一個資料卷,從而共享資料卷中的資料,
  • 當宿主機不能保證一定存在某個目錄或一些固定路徑的檔案時,使用資料卷可以規避這種限制帶來的問題,
  • 當你想把容器中的資料存盤在宿主機之外的地方時,比如遠程主機上或云存盤上,
  • 當你需要把容器資料在不同的宿主機之間備份、恢復或遷移時,資料卷是很好的選擇,

在這里插入圖片描述

資料卷實驗

docker 專門提供了 volume 子命令來操作資料卷:

#我們通過--help指令來看下 volume怎么使用
docker volume --help
Usage:  docker volume COMMAND
Commands:
create       創建資料卷
inspect      顯示資料卷的詳細資訊
ls           列出所有的資料卷
prune        洗掉所有未使用的 volumes,并且有 -f 選項
rm           洗掉一個或多個未使用的 volumes,并且有 -f 選項
創建資料卷
docker volume create 卷名
#查看卷
docker volume ls
#詳細查看
docker volume inspect 卷名

在這里插入圖片描述

有了自定義容器卷,我們可以創建一個使用這個資料卷的容器,這里我們以nginx為例:

docker run -itd --name=nginx01 -v nginx_vol:/usr/share/nginx/html nginx

其中,-v代表掛載資料卷,這里使用自定資料卷nginx_vol,并且將資料卷掛載到 /usr/share/nginx/html (這個目錄是yum安裝nginx的默認網頁目錄),

如果沒有通過-v 指定,那么Docker會默認幫我們創建匿名資料卷進行映射和掛載,

清理資料卷

如果不再使用自定義資料卷了,那么可以手動清理掉:

docker stop nginx01   #暫停容器實體
docker rm nginx01     #// 移除容器實體
docker volume rm nginx_vol     #// 洗掉自定義資料卷
實驗展示:
docker pull nginx

#宿主機目錄/mnt 掛載容器中的/data01
#注意:這里的data01 容器中沒有他會自己創建
docker run -v /mnt:/data01 --name nginx01 -itd nginx /bin/bash
#進入容器中創建檔案檢測
docker exec -it 59403edfdabe /bin/bash
ls
cd /data01
touch 1.txt

#在宿主機中的 /mnt 目錄下查看

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

注意:上面的 vim 不可以用,是因為容器中的centos還沒有這個功能,要自己 yum install -y vim;

資料卷容器

容器間資料同步

在這里插入圖片描述

這里我們啟動三個容器:

我們讓centos01 容器作為父容器;centos02和centos03作為子容器:

docker run --name centos01 -v /data01 -it centos:7 /bin/bash
docker run -it --volumes-from centos01 --name centos02 centos:7 /bin/bash
docker run -it --volumes-from centos01 --name centos03 centos:7 /bin/bash

在這里插入圖片描述

在這里插入圖片描述

接下來我們來測驗一下:

在父容器中創建資料,在兩個子容器中查看:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

通過上面結果我們看出,在 /data01 這個目錄下的資料是共享的,無論是誰在這里寫資料,其他容器都可以看到;

這個 /data01 目錄還掛載在我們的宿主機,所以容器間的共享資料就可以持久化的保存下來,

這里有個小問題:怎么把宿主機的檔案傳入到容器內部呢?

哎,這里我們可以借助docker cp 指令,

#docker cp 源檔案路徑 容器ID:目標檔案位置
[root@docker ~]#docker cp --help
Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
	      docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#這里通過 --help 知道有兩種寫法,那種簡單選那種就可以
docker cp /opt/2.txt a9a03fc65822:/data01
#然后我們去centos01 查看

在這里插入圖片描述
在這里插入圖片描述

Dockerfile

dockerfile 是用來構建docker鏡像的檔案!命令引數腳本!

構建步驟:

1、撰寫一個dockerfile 檔案;
2、docker bulid 構建成為一個鏡像;
3、docker run 運行鏡像;
4、docker push 發布鏡像(dockerHub公共倉庫,阿里云鏡像倉庫);

基礎知識:

1、每個保留關鍵字(指令)都必須是大寫字母
2、指令是從上到下順序執行
3、# 表示注釋
4、每一個指令創建提交都會產生一個新的鏡像層

dockerfile 分層原理:

docker鏡像分層(基于AUFS構建),AUFS是檔案聯合系統;

Docker鏡像位于bootfs之上;
每一層鏡像的下一層成為父鏡像;
第一層鏡像成為base image(作業系統環境鏡像)容器層(可讀可寫),在最頂層(writable);
容器層以下都是readonly;

contaier 讀寫層(可讀可寫)
images (只讀)
base image
bootfs +rootfs + aufs/overlay2 +LXC (kernel)

bootfs + rootfs :作用是加載、引導內核程式+掛載使用linux 作業系統(centos ubantu)等等一些關鍵的目錄檔案;

對于一個精簡的os,rootfs可以很小,只需要包括最基本的命令、工具和程式庫就可以了,因為底層直接用Host的kernel;
自己只需要提供rootfs就行了,由此可見對于不同的linux發行版,bootfs基本是一致的,rootfs會有差別,
因此不同的發行版可以公用bootfs;

AUFS和 overlay:
AUFS是一種聯合檔案系統,它使用同一個Linuxhost上的多個目錄,逐個堆疊起來,對外呈現出一個統一的檔案系統,
AUFS使用該特性,實作了Docker鏡像的分層;

docker 使用了overlay/overlay2存盤驅動來支持分層結構;
overlayFs將單個Linux主機上的兩個目錄合并成一個目錄,這些目錄被稱為層,統一程序被稱為聯合掛載

overlay結構:
overlayfs在linux主機上只有兩層,一個目錄在下層,用來保存鏡像(docker),另外一個目錄在上層,用來存盤容器資訊,

在這里插入圖片描述

dockerfile指令:

FROM         #基礎鏡鏡像,—切從這里開始構建
MAINTAINER   #鏡像是誰寫的,姓名+郵箱
RUN          #鏡像構建的時候需要運行的命令
ADD          #步驟: tomcat鏡像,這個tomcat壓縮包!添加內容
WORKDIR      #鏡像的作業目錄
VOLUME       #掛載的目錄
EXPOSE       #暴露埠
CMD          #指定這個容器啟動的時候要運行的命令,只有最后一個會生效,可被替代
ENTRYPOINT   #指定這個容器啟動的時候要運行的命令,可以追加命令
ONBUILD      # 當構建一個被繼承 DockerFile這個時候就會運行ONBUILD的指令,觸發指令,
COPY         #類似ADD,將我們檔案拷貝到鏡像中
ENV          #構建的時候設定環境變數!

在這里插入圖片描述

鏡像構建完后,我們還可以查看鏡像構建程序:

#查看鏡像構建程序:
docker history 鏡像ID

在知道Dockerfile 怎么撰寫后,我們來嘗試寫一個Dockerfile:

我們就寫一個簡單的Dockerfile 檔案:

vim Dockerfile

FROM centos:7
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
ADD nginx-1.12.0 /opt
WORKDIR /opt/nginx-1.12.0
RUN ./configure --prefix=/usr/local/nginx 
RUN make && make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off"]

#撰寫好Dockerfile檔案后,我們要去構建鏡像
docker build -f Dockerfile檔案位置 -t 鏡像名 .   
#這里若果我們撰寫的鏡像檔案是 Dockerfile的話,那就可以省略不寫,因為這是官方的寫法,他會自己去找Dockerfile檔案,還有就是要注意后面的這一個點,不能忘記;
docker build -t nginx:v1 .

#構建好鏡像后,我們就來運行這個容器
docker run -d -p 90:80 nginx:v1

有提到指令最后一個 . 是背景關系路徑,那么什么是背景關系路徑呢?

背景關系路徑,是指 docker 在構建鏡像,有時候想要使用到本機的檔案(比如復制),docker build 命令得知這個路徑后,會將路徑下的所有內容打包,

在這里插入圖片描述
在這里插入圖片描述

這里我們自己撰寫的dockerfile 檔案構建出來的鏡像有472MB,相比我們pull nginx的話,顯然是有點大的,那他們是怎么做到的呢?

在這里插入圖片描述

這里我們就得說下Dockerfile 的優化了;

因為docker 鏡像是分層思想,每層他都會有快取,上一層構建時可能會用到下層的快取,所以層數越多,他站的快取也就越多,所以構建完后的大小就越大;

在撰寫Dockerfile 時,都是一層一條指令的;

所以要想大小變小,我們可以優化層數,減少 RUN 指令的使用;

優化方式:

1、減少RUN 指令的使用;

2、將執行后的快取/不用的輸出丟入黑洞 (減少快取);

3、多階段構建;

4、使用更小體積的linux發行版本;更加輕量級的centos的版本;

發布自己的鏡像

當我們撰寫好一個 Dockerfile 檔案,構建好鏡像,運行容器后,覺得非常好用,這時候我們就可以 push 到 dockerHub 上或者阿里云上,給別人使用,或者作為私有倉庫保存到里面,用到的時候在pull 下來,

如:我撰寫好一個Tomcat的Dockerfile 后,我想push到dockerHub和阿里云上,可以這樣做:

#我撰寫的Dockerfile 檔案
vim Dockerfile

FROM centos:7
ADD apache-tomcat-9.0.16.tar.gz /opt/tomcat
ADD jdk-8u201-linux-x64.tar.gz /opt/tomcat
ENV JAVA_HOME /opt/tomcat/jdk1.8.0_201/
ENV CATALINA_HOME /opt/tomcat/apache-tomcat-9.0.16
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
EXPOSE 8080
CMD ["/opt/tomcat/apache-tomcat-9.0.16/bin/catalina.sh","run"]

#構建鏡像和運行容器
docker build -t tomcat:v1 .
docker run -d -p 9090:8080 tomcat:v1
1、我們先 push 到dockerHub上:

先去docker官網注冊自己的賬號;https://www.docker.com/

在這里插入圖片描述
在這里插入圖片描述

在我們的服務器上push鏡像:

#我們查看一下怎么登錄
docker login --help
Usage:  docker login [OPTIONS] [SERVER]
Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
#docker login -u 用戶名
password:    #密碼

在這里插入圖片描述

出現登錄成功后,我們就可以push 自己的鏡像了;

#首先我們要添加個 tag,帶上你的用戶名
docker tag 鏡像ID 名字:tag
docker tag 5ceee19144d9 tiks821/tomcat:v1
#然后在push 上去,不然會報錯
docker push tiks821/tomcat:v1

#沒有添加用戶名 tag,報的錯資訊:
denied: requested access to the resource is denied

在這里插入圖片描述

這里服務器push到dockerHub上是非常慢的,因為dockerHub 服務器在國外,我們的網路是比較吃力的;

所以針對這種情況,我們就把鏡像 push到阿里云上;

2、鏡像push到阿里云上:

01、我們得登錄阿里云;

02、搜索容器鏡像服務;

這里我們前面用過阿里的容器鏡像加速;

在這里插入圖片描述

03、我們創建自己的個人實體:

在這里插入圖片描述

04、創建好后我們進入個人實體,創建命名空間和鏡像倉庫:

注意:這里的名稱空間每個用戶只能創建三個;

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

05、鏡像倉庫創建好后,我們就可以push 鏡像了;

這里我們可以看阿里云給的檔案,他會告訴我們怎么 push 鏡像;

在這里插入圖片描述
在這里插入圖片描述

接下來我們來push 我們的鏡像;

#首先是登錄阿里云
docker login --username=蕭楚河 registry.cn-hangzhou.aliyuncs.com
#然后添加 tag,這里跟dockerHub一樣,都要添加tag
docker tag 鏡像ID registry.cn-hangzhou.aliyuncs.com/tiks/studydocker:tomcat_v1
#最后push 鏡像
docker push registry.cn-hangzhou.aliyuncs.com/tiks/studydocker:tomcat_v1

在這里插入圖片描述

再去阿里云上看,就會有我們push的鏡像了;

在這里插入圖片描述
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414022.html

標籤:其他

上一篇:學習記錄:-)

下一篇:泛型基本知識

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more