Docker教程文檔

課程說明

B站視頻:Docker小白快速入門+實戰(zhàn)
課程目的:幫助從未接觸過docker的同學(xué)快速入門并上手使用,在教程最后會有一個實戰(zhàn)階段。
操作系統(tǒng):Macos物理機+Centos虛擬機
編程語言:Golang為主
Github:課程文檔、源碼
DockerHub:實戰(zhàn)課的鏡像
Docker官方文檔:docs.docker.com

環(huán)境安裝

sudo yum install -y yum-utils  
sudo yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo  
sudo yum install -y docker-ce docker-ce-cli containerd.io  
sudo systemctl enable docker  
sudo systemctl start docker  

Docker簡介

Build, Ship and Run Any App, Anywhere(一次封裝,到處運行)

核心概念

注冊服務(wù)器、鏡像倉庫、鏡像、容器

  • 注冊服務(wù)器:存放鏡像倉庫
  • 鏡像倉庫:存放鏡像
  • 鏡像:創(chuàng)建容器的模板
  • 容器:一個鏡像的運行實例,應(yīng)用程序在容器中運行

與虛擬機對比

Docker容器可以類比虛擬機,但比虛擬機啟動更快、資源占用更少

常用命令

鏡像

  • 查看鏡像列表:docker images 或者 docker image ls
  • 查看鏡像明細:docker inspect 鏡像id
  • 拉取鏡像:docker pull hello-world,指定tag
  • 鏡像提交歷史:docker history 鏡像名:tag/id
  • 刪除鏡像:docker rmi 鏡像名:tag/鏡像id
  • 創(chuàng)建鏡像tag:docker tag 鏡像名:tag 新鏡像名:新tag(如果鏡像的名稱和tag已經(jīng)存在,那么此命令就是新增。否則是修改)
  • 鏡像導(dǎo)出:docker save 鏡像id > 1.tar 或者 docker save -o 1.tar 鏡像id(導(dǎo)出進行的詳細信息)
  • 鏡像導(dǎo)入:docker load < 1.tar 或者 docker load -i 1.tar
  • 在組成服務(wù)器中搜索鏡像倉庫:docker search nginx
  • docker run 創(chuàng)建并啟動一個容器(后面總結(jié))
  • docker create 創(chuàng)建一個容器

容器

  • 查看正在運行的容器:docker ps
  • 查看所有容器:docker ps -a
  • 容器的啟動、暫停、恢復(fù)、停止: docker start|pause|unpause|stop 容器id
  • 查看容器內(nèi)的日志:docker logs 容器id
  • 刪除容器:docker rm 容器id
  • 查看容器詳情:docker inspect 容器id
  • 容器導(dǎo)出:docker export 1.tar 容器id(只是導(dǎo)出當(dāng)前信息)
  • 容器導(dǎo)入:docker import 1.tar 鏡像名:tag(是導(dǎo)入為一個鏡像)
  • 基于當(dāng)前容器創(chuàng)建一個鏡像:docker commit

數(shù)據(jù)卷

具名和匿名掛載

-- docker run -v 宿主機地址:容器地址 鏡像id
-- docker run -v 數(shù)據(jù)卷名稱:容器地址 鏡像id

數(shù)據(jù)卷容器

共享容器的數(shù)據(jù)卷
-- docker run --volume-from=容器id 鏡像id

網(wǎng)絡(luò)

-- docker run -P 宿主機隨機分配一個端口和容器內(nèi)部開放端口進行綁定
-- docker run -p 宿主機端口:容器端口
-- docker run --link 容器id
-- docker network create mynet 創(chuàng)建一個網(wǎng)絡(luò)
-- docker run --network mynet 容器id(同一個網(wǎng)絡(luò)內(nèi)的容器可以互相ping)

Dockerfile命令

  • arg 定義構(gòu)建時需要的參數(shù) arg varname=default_varvalue 或者 arg varname
  • from 定義鏡像時的基礎(chǔ)鏡像 from golang:1.17
  • label 定義進行的標(biāo)簽 label author=pingwazi
  • expose 聲明暴露的端口,給dockerfile文件維護者提供信息,在容器啟動的時候使用-P命令可以可宿主機的端口進行映射 expose 8080
  • env 定義環(huán)境變量,在運行的容器中會存在 env username=pingwazi
  • entrypoint 容器啟動時執(zhí)行的命令,存在多個命令時只有最后一個生效 entrypoint ["echo","hello"]
  • volume 指定數(shù)據(jù)卷掛載點 volume ["/root","/home"] 或者 volume /root /home
  • user 指定容器啟動后使用的用戶
  • workdir 設(shè)置run、cmd、entrypoint、copy、add命令的工作目錄
  • onbuild 當(dāng)基于此鏡像構(gòu)建新的鏡像時執(zhí)行的命令 onbuild run ["echo","hello"]
  • stopsignal 給送給容器退出的信號
  • healthcheck 容器健康檢查,healthcheck none 禁止容器健康檢查,healthcheck --interval=3 --timeout=1 --retries=1 curl --fail http://localhost:8080/ping ||exit 1
  • shell 指定shell類型命令所使用的終端類型
  • run 執(zhí)行命令,在進行生成過程中執(zhí)行
  • cmd 執(zhí)行命令,dockerfile中只有最后一個cmd命令生效,在啟動容器時如果指定了命令,dockerfile中的cmd也會失效
  • add 添加文件到容器指定目錄,文件可以是宿主機上下文目錄中的、可以url的、也可以使壓縮包(會自動解壓)
  • copy 拷貝宿主機上下文目錄中的文件到容器中

實戰(zhàn)

  • 1、寫一個非常簡單的go web程序
  • 2、編寫dockerfile文件
  • 3、生成鏡像并上傳到dockerhub中
  • 4、另外一臺機器上pull這個鏡像,并啟動
  • 5、瀏覽器訪問

Dockerfile文件內(nèi)容

# 構(gòu)建編譯文件
FROM golang:1.17 as builder
# 拷貝項目文件到鏡像中
COPY . /bin/app
# 設(shè)置命令工作目錄
WORKDIR /bin/app
# 執(zhí)行命令編譯項目文件
RUN go build -o /bin/app/web-app .

# 構(gòu)建運行時文件
FROM alpine:3.13
# 添加作者
LABEL author=pingwazi
# 設(shè)置工作目錄
WORKDIR /bin/app
# 從上一階段中拷貝可執(zhí)行文件
COPY --from=builder /bin/app/web-app /bin/app/web-app
# 聲明暴露的端口
EXPOSE 8080/tcp
# 調(diào)整動態(tài)鏈接地址
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
# 啟動服務(wù)
ENTRYPOINT [ "/bin/app/web-app" ]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容