1. docker介紹、安裝、基本命令

1 介紹

容器就是在隔離的環(huán)境運(yùn)行的一個進(jìn)程,如果進(jìn)程停止,容器就會銷毀。隔離的環(huán)境擁有自己的系統(tǒng)文件、IP地址、主機(jī)名等。
容器共用宿主機(jī)內(nèi)核,不需要指令級模擬。

1.1 docker工作流程

1.2 docker核心技術(shù)

1.2.1 Namespace

實(shí)現(xiàn)Container的進(jìn)程、網(wǎng)絡(luò)、消息、文件系統(tǒng)和主機(jī)名隔離。目前l(fā)inux內(nèi)核實(shí)現(xiàn)的namespace主要有:

  1. Mount namespace(CLONE_NEWNS):系統(tǒng)掛載點(diǎn)
  2. UTS namespace (CLONE_NEWUTS):Hostname等信息
  3. IPC namespace(CLONE_NEWIPC):進(jìn)程間通訊
  4. PID namespace(CLONE_NEWPID):進(jìn)程號
  5. Network namespace(CLONE_NEWNET):網(wǎng)絡(luò)相關(guān)資源
  6. User namespace(CLONE_NEWUSER):用戶ID

1.2.2 Cgroup

實(shí)現(xiàn)對資源(cpu個數(shù)、內(nèi)存大小等)的配額和度量

1.3 docker特性

  • 文件系統(tǒng)隔離:每個容器運(yùn)行在完全獨(dú)立的根文件系統(tǒng)里
  • 資源隔離:系統(tǒng)資源,像CPU和內(nèi)存可以分配到不同的容器中,使用cgroup
  • 網(wǎng)絡(luò)隔離:每個進(jìn)程容器運(yùn)行在自己的網(wǎng)絡(luò)空間,虛擬接口和IP地址
  • 日志記錄:Docker收集和記錄每個進(jìn)程容器的標(biāo)準(zhǔn)流(stdout/stdin/stderr),用于實(shí)時檢索或批量檢索
  • 變更管理:容器文件系統(tǒng)的變更可以提交到新的鏡像中,并可重復(fù)使用以創(chuàng)建更多的container,無需使用模版或手動配置。
  • 交互式shell:Docker可以分配一個虛擬終端并關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸入上,例如運(yùn)行一個一次性交互shell

1.4 container運(yùn)行條件

docker容器內(nèi)的第一個進(jìn)程(初始命令)必須一直處于前臺運(yùn)行的狀態(tài),否則這個容器就會處于退出狀態(tài)。
業(yè)務(wù)在容器中運(yùn)行:夯住,啟動服務(wù)

1.5 container運(yùn)行時覆蓋3個文件

容器運(yùn)行時,會覆蓋/etc/hostname/etc/hosts、/etc/resolve.conf這3個文件。使容器有自己的主機(jī)名、hosts解析、dns服務(wù)器

2 安裝

2.1 安裝環(huán)境依賴

yum -y install yum-utils device-mapper-persistent-data lvm2

2.2 安裝yum源

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3 yum安裝

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

2.4 啟動docker

systemctl start docker
systemctl enable docker

2.5 鏡像加速

鏡像可以添加多個,中間用,分隔

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://阿里云頁面查看.mirror.aliyuncs.com","http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.6 默認(rèn)root目錄

/var/lib/docker

2.7 開啟路由轉(zhuǎn)發(fā)功能

yum安裝后默認(rèn)會開啟,確認(rèn)方式

cat /proc/sys/net/ipv4/ip_forward
1

手動開啟方法

vim /etc/sysctl.conf
...
net.ipv4.ip_forward = 1

sysctl -p

2.9 關(guān)閉防火墻

systemctl stop firewalld
systemctl disable firewalld

2.10 重啟docker

重啟docker,調(diào)用內(nèi)核模塊netfilter增加規(guī)則

systemctl restart docker

2.11(可選)重啟docker容器不會停止

修改配置文件/etc/docker/daemon.json一般不建議配置

{
  "registry-mirrors": ["..."],
  "live-restore": true
}
sudo systemctl daemon-reload
sudo systemctl restart docker

3 基本命令

3.1 docker info

docker info查看基本信息:

  • 默認(rèn)工作目錄:/var/lib/docker
  • 默認(rèn)請求的鏡像倉庫:https://index.docker.io/v1/
  • 自己配置的鏡像倉庫:Registry Mirrors部分
Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs

 Docker Root Dir: /var/lib/docker             #默認(rèn)工作目錄
 Debug Mode: false
 Registry: https://index.docker.io/v1/        #默認(rèn)請求的鏡像倉庫

 Registry Mirrors:                            #鏡像倉庫
  https://bigsky000.mirror.aliyuncs.com/

3.2 docker search

docker search [OPTIONS] image 搜索鏡像

[root@centos7-wht ~]# docker search centos
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                            The official build of CentOS.                   6638      [OK]       
ansible/centos7-ansible           Ansible on Centos7                              134                  [OK]
consol/centos-xfce-vnc            Centos container with "headless" VNC session…   129                  [OK]
jdeathe/centos-ssh                OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   118                  [OK]
centos/systemd                    systemd enabled base container.                 100                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   89                    


#NAME:鏡像名字,/前是項(xiàng)目名,/后是鏡像名
#OFFICIAL:是否 docker 官方發(fā)布
#STARS:表示點(diǎn)贊、喜歡的意思
#AUTOMATED:自動構(gòu)建

3.3 docker pull

docker pull [OPTIONS] NAME[:TAG|@DIGEST] 拉取鏡像

docker pull centos                                   #從默認(rèn)倉庫中下載鏡像
docker pull hub.c.163.com/library/tomcat:latest      #直接下載其他站點(diǎn)的鏡像

3.4 docker load

dokcer load -i image位置 導(dǎo)入已經(jīng)下載好的docker鏡像

3.5 docker images/docker image

3.5.1 docker images

查看現(xiàn)有鏡像

[root@centos7-wht ~]$  docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
busybox                  latest    69593048aa3a   7 weeks ago    1.24MB
127.0.0.1:5000/busybox   v1        69593048aa3a   7 weeks ago    1.24MB
registry                 latest    1fd8e1b0bb7e   3 months ago   26.2MB
centos                   centos7   8652b9f0cb4c   8 months ago   204MB

127.0.0.1:5000/busybox,這類的鏡像名表示鏡像來自127.0.0.1:5000倉庫,而非docker-hub官方庫

3.5.2 docker image

鏡像相關(guān)操作

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

例子:
registry鏡像打包成registry.tar文件

docker image  save -o registry.tar registry

載入tar格式的registry.tar鏡像

 docker image load -i registry.tar

3.6 docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 運(yùn)行一個container
OPTIONS 常用參數(shù):

通常-i和-t配合使用
-i                        以交互模式運(yùn)行

-t                        為容器分配一個偽輸入終端

-d                        后臺運(yùn)行容器,并返回容器ID

-c                        接在bash COMMAND后,為container中bash運(yùn)行的命令

-c --cpu-shares           后面接數(shù)字,限制容器的cpu權(quán)重,默認(rèn)權(quán)重是1024

-m --memory               單位b, k, m, or g,限制容器的內(nèi)存使用量

-p                        將host端口映射給container端口,默認(rèn)是tcp端口,要映射多個端口寫多個-p
                          eg:ip:[hostPort]:containerPort | hostPort:containerPort | hostPort:containerPort:udp

-P                        隨機(jī)將一個host端口映射給container

--name                    后面接container名字

-h                        后面接container的主機(jī)名

--restart                 always:在容器退出時總是重啟容器,容器會伴隨docker啟動
                          no:默認(rèn)策略,容器退出時不重啟
                          on-failure:在容器非正常退出時(退出狀態(tài)非0),才會重啟
                          on-failure:3:在容器非正常退出時(退出狀態(tài)非0),最多重啟3次
                          unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動時就已經(jīng)停止了的容器

-v                        HOST-DIR:CONTAINER-DIR[:權(quán)限] 將容器內(nèi)部的目錄mount到host的目錄下,權(quán)限是rw、ro等以逗號分隔,要mount多個目錄寫多個-v參數(shù)
                          volume:CONTAINER-DIR,容器在/var/lib/docker/volumes目錄下創(chuàng)建數(shù)據(jù)卷,刪除容器后數(shù)據(jù)卷不消失

--mount                   默認(rèn):source=volume名字,destination=CONTAINER-DIR。默認(rèn)情況下用來掛載volume,但也可以用來創(chuàng)建bind mount和tmpfs。
                          bind mount:type=bind,source=HOST-DIR,destination=CONTAINER-DIR,source必須是絕對路徑,且路徑必須已經(jīng)存在。

--volumes-from            掛載已有的數(shù)據(jù)卷

-e                        設(shè)置container內(nèi)部的環(huán)境變量,eg: -e "SSH_PWD=123",SSH_PWD為容器內(nèi)部定義的變量

--privileged              Docker將啟用對宿主機(jī)上所有設(shè)備的訪問,允許容器對宿主機(jī)的訪問幾乎與在宿主機(jī)上容器外部運(yùn)行的進(jìn)程相同,可以直接掛載宿主機(jī)的磁盤

--rm                      容器命令運(yùn)行結(jié)束后,自動刪除容器,自動釋放資源

--device                  onhost:incontainer[:mode],將host的設(shè)備映射給container,/dev/sdc:/dev/xvdc:rwm

--device-write-bps        單位kb、mb、gb,限制容器寫IO速度

--device-read-bps         單位kb、mb、gb,限制容器讀IO速度

--ip                      設(shè)置容器的IPv4地址

--network                 設(shè)置容器連接的網(wǎng)絡(luò),默認(rèn)是docker0

例子:
以交互模式運(yùn)行centos,并運(yùn)行container中的bash

docker run -it  centos:latest  bash

后臺運(yùn)行container,每隔10s不斷輸出hello world

docker run -d  centos:latest  bash -c "while true;do echo hello world;sleep 10;done"

3.7 docker ps

docker ps列出正在運(yùn)行的容器狀態(tài)


docker ps -a列出所有容器的狀態(tài),包括沉睡/退出狀態(tài)的容器

docker ps -q 只顯示容器的CONTAINER ID
docker ps -l 只顯示最后創(chuàng)建的容器信息
docker ps --no-trunc 不縮略,顯示容器的全部信息

3.8 docker logs

docker logs 容器ID/名字從容器中取日志,檢查docker的標(biāo)準(zhǔn)輸出。

docker logs 4336a96cc275
hello world
hello world
hello world

3.9 docker kill

docker kill 容器ID/名字殺死一個container實(shí)例

3.10 docker rename

docker rename 舊容器名 新容器名 更改容器名

3.11 docker update

docker update 參數(shù) 容器ID/名字 更新容器參數(shù),只能更新cpu、內(nèi)存、io、pid策略、重啟策略

docker update --restart always centos

3.12 docker exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 進(jìn)入創(chuàng)建一個偽終端,類似于ssh,不會因?yàn)檩斎雃xit而終止容器
OPTIONS 常用參數(shù):

通常-i和-t配合使用
-i                        以交互模式執(zhí)行
-t                        為容器分配一個偽輸入終端

-d                        后臺執(zhí)行

例子:
以交互模式在container中運(yùn)行bash

docker exec -it centos bash

3.13 docker attach

會通過連接stdin,連接到容器內(nèi)輸入輸出流,會在輸入exit后終止進(jìn)程。會進(jìn)入第1個偽終端。

3.14 臨時回到host主機(jī)

ctrl+p,ctrl+q 臨時回到host主機(jī)
docker attach ...再次回到docker偽終端

3.15 docker rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]刪除已經(jīng)建立的容器
刪除建立的所有容器

docker rm -f `docker ps -a -q` 

3.16 docker inspect

docker inspect [OPTIONS] 容器NAME|容器ID [NAME|ID...] 查看容器的祥細(xì)信息

docker inspect ssh_nginx
[
    {
        "Id": "973c9487f8dbf2c6dfa5c443dd3b2697eced2ac78d896dd9cd50b00cf87f6816",
        "Created": "2021-09-01T08:32:08.645237423Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23325,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-09-01T08:32:08.951092626Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...

3.17 docker build

以dockerfile創(chuàng)建鏡像,PATH為dockerfile所在目錄
docker build -t name:tag PATH

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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