Linux下Docker的安裝及使用


1.背景

類似於電腦,要在朋友的電腦上跑你寫的Java程序,就得檢查他電腦有沒有安裝Java環境.

類似的,要想在別的電腦上跑你寫的Python程序,又得檢查那台電腦有沒有裝python.

如何讓自己寫的程序換到別的電腦上后,可以便捷的運行起來?

將程序和程序的環境打包遷移,是一種解決方案.

  • 為啥不用虛擬機?

虛擬機安裝太麻煩,就好比一個完整的操作系統,啟動起來很費時間.

2.安裝

服務器版本:CentOS 8.2 64位

2.1 安裝yum-utils

yum install -y yum-utils

2.2 配置國內源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3 解決problem with installed package podman-1.6.4-10.的報錯

yum erase podman buildah

2.4 安裝Docker

yum install -y docker-ce docker-ce-cli  containerd.io --nobest

2.5 查看Docker版本

# 簡單信息
docker -v
# 查看docker的版本號,包括客戶端、服務端、依賴的Go等
docker version
# 查看系統(docker)層面信息,包括管理的images, containers數等
docker info

3.Docker服務相關

3.1 啟動

# 啟動
systemctl start docker
# 開機自啟
systemctl enable docker

3.2 停止

systemctl stop docker

3.3 重啟

systemctl restart docker

3.4 查看docker狀態

systemctl status docker

4.倉庫、鏡像和容器

類比win

鏡像: 程序安裝包

容器: 安裝好的程序

(鏡像的)倉庫: 放安裝包的倉庫.

4.1 Docker容器三個主要概念

  • 鏡像

    Docker鏡像里包含了已打包的應用程序及其所依賴的環境。它包含應用程序可用的文件系統和其他元數據,如鏡像運行時的可執行文件路徑。

  • 鏡像倉庫

    Docker鏡像倉庫用於存放Docker鏡像,以及促進不同人和不同電腦之間共享這些鏡像。當編譯鏡像時,要么可以在編譯它的電腦上運行,要么可以先上傳鏡像到一個鏡像倉庫,然后下載到另外一台電腦上並運行它。某些倉庫是公開的,允許所有人從中拉取鏡像,同時也有一些是私有的,僅部分人和機器可接入。

  • 容器

    Docker容器通常是一個Linux容器,它基於Docker鏡像被創建。一個運行中的容器是一個運行在Docker主機上的進程,但它和主機,以及所有運行在主機上的其他進程都是隔離的。這個進程也是資源受限的,意味着它只能訪問和使用分配給它的資源(CPU、內存等)。

4.2 一個簡單的流程

4.2.1 首先開發者在開發環境機器上開發應用並制作鏡像。

Docker執行命令,構建鏡像並存儲在機器上。

4.2.2 開發者發送上傳鏡像命令。

Docker收到命令后,將本地鏡像上傳到鏡像倉庫。

4.2.3 開發者向生產環境機器發送運行鏡像命令。

生產環境機器收到命令后,Docker會從鏡像倉庫拉取鏡像到機器上,然后基於鏡像運行容器。

preview

5.鏡像相關

類比win: 程序的安裝包

Docker鏡像(image)詳解

5.1 查看鏡像

docker images

5.2 搜索鏡像

docker search 鏡像名稱

5.3 拉取鏡像

docker pull 鏡像名稱:版本號

5.4 刪除鏡像

docker rmi 鏡像名稱:版本號

5.5 其他

5.5.1 鏡像信息

vim /var/lib/docker/image/overlay2/repositories.json

image-20210420095953865

repositories.json文件中保存了一些基本信息

image-20210420100033114

6.容器相關

類比win: 已經安裝好的程序

6.1 查看容器列表

# 查看正在運行的容器
docker ps
# 查看所有容器
docker ps -a

6.2 創建容器

容器創建后,在容器列表中即可看到該容器(相當於安裝好程序)

以后用后文的啟、停、刪就可以操作該容器了.

# eg: \是換行的意思
docker run -d -p 1337:1337 \
        --network kong-net \
        --name konga \
        -e "NODE_ENV=production"  \
        -e "DB_ADAPTER=postgres" \
        -e "DB_URI=postgresql://kong:kong@172.0.0.1:5432/konga" \
        pantsel/konga

linux中-和--的區別?

-后面一般跟簡寫,大多數是一個字母,如:

 ls  -l

--后面一般跟長的完整名字,如:

 chkconfig  --add

run參數

  • -rm

    在容器退出時自動清理容器內部的文件系統

    在Docker容器退出時,默認容器內部的文件系統仍然被保留,以方便調試並保留用戶數據.

    但是,對於前台運行的容器,由於其只是在開發調試過程中短期運行,其用戶數據並無保留的必要.

    啟動時設置-rm選項,這樣在容器退出時就能夠自動清理容器內部的文件系統.

  • -i

    保持容器運行

  • -p

    端口映射

  • -e

    傳遞環境變量

  • -t

    為容器重新分配一個偽輸入終端

  • -d

    以守護進程模式運行容器,退出后容器不會停止

  • -it

    創建一個交互式容器,推出后容器容器停止運行

  • -id

    創建一個守護容器;退出后容器不停止運行

  • –-name

    為創建的容器命名

6.3 進入容器

docker exec -it 容器名稱 /bin/bash
# eg:進入一個叫konga的容器
docker exec -it konga /bin/bash

# 在容器中執行了一個ping命令
ping 127.0.0.1
# 退出當前容器
exit

6.4 啟動容器

docker start 容器名稱 

6.5 停止容器

docker stop 容器名稱

6.6 刪除容器

docker rm 容器名稱

#刪除所有容器
docker rm `docker ps -aq`

6.7 查看容器詳細信息

docker inspect 容器名稱

6.8 其他

6.8.1 容器文件位置

cd /var/lib/docker/containers

image-20210420095851147

查看所有容器,其中的id:eb67258c80d1與上方文件夾對應

docker ps -a

# 顯示
CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS                  PORTS     NAMES
eb67258c80d1   mongo     "docker-entrypoint.s…"   7 days ago   Exited (0) 6 days ago             mongo

7.網絡相關

容器可以比擬做一個獨立的系統環境,能配置自己網絡,所以說容器里的localhost不一定等於宿主機的localhost

網絡模式

  • bridge:橋接docker(默認創建時,不指定網絡驅動,將使用bridge模式)

  • none:不配置網絡

  • host:和宿主機共享網絡

    例如:當你在容器上使用80端口訪問其他應用,使用的是宿主機的80端口.

  • container:容器網絡連通(用的少,局限很大)

Linux查看網絡信息

# if沒有打錯.
# 這里面能看到docker相關的網絡.
ifconfig

7.1 查看docker下的網絡列表

docker network ls

7.2 查看單個網絡詳細信息

docker network inspect networkname

7.3 創建網絡

# 不指定網絡驅動時,默認創建的是bridge網絡.
docker network create networkname

7.4 刪除網絡

docker network rm networkname

8.日志相關

docker logs [OPTIONS] CONTAINER

# Options參數
--details: 顯示更多的信息
--follow(-f): 跟蹤實時日志
--since string: 顯示自某個timestamp之后的日志,或相對時間,如40m(即40分鍾)
--tail string: 從日志末尾顯示多少行日志, 默認是all
--timestamps(-t): 顯示時間戳
--until string: 顯示自某個timestamp之前的日志,或相對時間,如40m(即40分鍾

示例

# 查看容器mysql 最近30分鍾的日志:
docker logs --since 30m mysql

# 查看容器mysql 某時間之后的日志:
docker logs -t --since="2019-11-02T13:23:37" mysql

#查看容器mysql 某時間段日志:
docker logs -t --since="2019-11-02T13:23:37" --until "2019-11-03T12:23:37" mysql

9.配置國內加速

vim  /etc/docker/daemon.json

# 鏡像信息
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM