docker配置

一、安裝docker

#加載docker-ce鏡像源并安裝docker
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker
docker run hello-world

#配置鏡像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3q8h3768.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker run hello-world

二、常用命令

1.幫助啟動類命令

啟動docker: systemctl start docker
停止docker: systemctl stop docker
重后docker: systemctl restart docker
查看docker狀態(tài): systemctl status docker
開機(jī)啟動: systemctl enable docker
查看docker概要信息:docker info
查看docker總體幫助文檔: docker --help
查看docker命令幫助文檔:docker 具體命令 --help

2.鏡像命令

docker images:列出本地主機(jī)上的鏡像

-a:列出本地所有的鏡像
-q :只顯示鏡像ID

docker search 某個xxx鏡像名字:云端鏡像查找

#--limit:只列出N個鏡像,默認(rèn)25個
docker search --limit 5 redis

docker pull 鏡像名字:下載鏡像

docker pull 某個xxx鏡像名字
docker pull 鏡像名字[:TAG]    #(TAG版本號,不寫默認(rèn)latest)

docker system df查看鏡像/容器/數(shù)據(jù)卷所占的空間
docker rmi 某個xxx鏡像名字ID:刪除鏡像

-f 強(qiáng)制刪除
docker rmi -f 鏡像ID    #刪除單個
docker rmi-f 鏡像名1:TAG 鏡像名2:TAG    #刪除多個
docker rmi -f $(docker images) -qa    #刪除全部

面試題:
談?wù)刣ocker虛懸鏡像是什么?
答:倉庫名、標(biāo)簽都是<none>的鏡像,俗稱虛懸鏡像dangling image
后續(xù)Dockerfile章節(jié)再介紹
如何查看當(dāng)前機(jī)器下有多少個容器,多少個鏡像?
答:docker system df

3.容器命令

①新建+啟動容器:docker run [OPTIONS]IMAGE[COMMAND][ARG...]

OPTIONS說明(常用)
--name="容器新名字"
為容器指定一個名稱;
-d:后臺運(yùn)行容器并返回容器D,也即啟動守護(hù)式容器(后臺運(yùn)行):
-i:以交互模式運(yùn)行容器,通常與t同時使用    #interactive
-t:為容器重新分配一個偽輸入終端,通常與-ⅰ同時使用;也即啟動交互式容器(前臺有偽終端,等待交互)    #tty
-P:隨機(jī)端口映射,大寫P
-p:指定端口映射,小寫p

②啟動交互式容器(前臺命令行)

docker run -it centos /bin/bash
參數(shù)說明:
-i: 交互式操作。
-t: 終端。
centos:centos 鏡像。
/bin/bash: 放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是/bin/bash。
要退出終端,直接輸入 exit

③列出當(dāng)前所有正在運(yùn)行的容器:docker ps
④退出容器

exit
run進(jìn)去容器,exit退出,容器停止run進(jìn)去容器
ctrl+p+q退出,容器不停止

⑥啟動己停止運(yùn)行的容器:docker start 容器id或者容器名
⑦重啟容器:docker restart 容器id或者容器名
⑧停止容器:docker stop 容器id或者容器名
⑨強(qiáng)制停止容器:docker kill 容器id或者容器名
⑩刪除己停止的容器:docker rm 容器id或者容器名

#強(qiáng)制刪除所有容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

重要
①啟動守護(hù)式容器(后臺服務(wù)器):docker run -d redis

若使用-d開啟centos會自動秒關(guān)閉,因?yàn)闆]有前臺守護(hù)進(jìn)程,redis則有

②查看容器日志:docker logs 容器id
③查看容器內(nèi)運(yùn)行的進(jìn)程:docker top 容器
④查看容器內(nèi)部細(xì)節(jié):docker inspect 容器,可以查看容器數(shù)據(jù)卷掛載信息
⑤進(jìn)入正在運(yùn)行的容器并以命令行交互docker exec -it 容器ID /bash/shell
重新進(jìn)入docker attach 容器ID

上述兩個區(qū)別
attach 直接進(jìn)入容器啟動命令的終端,不會啟動新的進(jìn)程用exit退出,會導(dǎo)致容器的停止。
exec 是在容器中打開新的終端,并且可以啟動新的進(jìn)程用exit退出,不會導(dǎo)致容器的停止。
推薦大家使用 docker exec 命令,因?yàn)橥顺鋈萜鹘K端,不會導(dǎo)致容器的停止

進(jìn)入redis容器
docker exec-it 容器ID /bin/bash
docker exec-it 容器ID redis-cli
一般用-d后臺啟動的程序,再用exec進(jìn)入對應(yīng)容器實(shí)例

⑥從容器內(nèi)拷貝文件到主機(jī)上:docker cp 容器ID:容器內(nèi)路徑目的主機(jī)路徑
⑦導(dǎo)入和導(dǎo)出容器:
export 導(dǎo)出容器的內(nèi)容留作為一個tar歸檔文件[對應(yīng)import命令]
import 從tar包中的內(nèi)容創(chuàng)建一個新的文件系統(tǒng)再導(dǎo)入為鏡像[對應(yīng)export]

docker export 容器ID>文件名.tar 
cat 文件名.tar | docker import - 鏡像用戶/鏡像名:鏡像版本號

4.自定義鏡像

1.安裝自定義軟件
agt-get update
apt-get -y install vim
2.封裝為鏡像

docker commit -m="備注內(nèi)容" -a="作者" 容器id 構(gòu)建的鏡像名稱:[標(biāo)簽名]

[root@lizj ~]# docker commit -m="vim cmd add ok" -a=" lizj" c1839f522391 atlizj/
sha256:741af495beca86a010862bddbcc852c4c4cc22ca2814b931095d41d2a43d8d65
3.鏡像發(fā)布到阿里云容器鏡像服務(wù)

命名空間>鏡像倉庫
① 登錄阿里云Docker Registry
$ docker login --username=lzj952809310 registry.cn-hangzhou.aliyuncs.com

用于登錄的用戶名為阿里云賬號全名,密碼為開通服務(wù)時設(shè)置的密碼。
您可以在訪問憑證頁面修改憑證密碼。

②從Registry中拉取鏡像
$ docker pull registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[鏡像版本號]
③將鏡像推送到Registry

$ docker login --username=lzj952809310 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[鏡像版本號]
$ docker push registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[鏡像版本號]

請根據(jù)實(shí)際鏡像信息替換示例中的[ImageId]和[鏡像版本號]參數(shù)。

3.構(gòu)建本地私有倉庫
docker pull registry
docker run -d -p 5000:5000 -v /lizjuse/myregistry/:/tmp/registry                                                                          --privileged=true registry

-v /lizjuse/myregistry/:/tmp/registry指定目錄。默認(rèn)情況,倉庫被創(chuàng)建在容器的/var/lib/registry目錄下建議自行用容器卷映射,方便于宿主機(jī)聯(lián)調(diào)
查看當(dāng)前本地倉庫下的存儲情況curl -XGET http://172.21.55.100:5000/v2/_catalog
復(fù)制鏡像并修改名稱docker tag 鏡像:Tag Host:Port/Repository:Tag

[root@lizj ~]# docker tag atlizj/myubuntu:1.3 172.21.55.100:5000/myubuntu:1.3
[root@lizj ~]# docker images
REPOSITORY                                          TAG       IMAGE ID       CREATED             SIZE
172.21.55.100:5000/myubuntu                         1.3       741af495beca   About an hour ago   188MB
atlizj/myubuntu                                     1.3       741af495beca   About an hour ago   188MB
registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos   1.3       741af495beca   About an hour ago   188MB

取消https限制:

[root@lizj ~]# vim /etc/docker/daemon.json
[root@lizj ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://3q8h3768.mirror.aliyuncs.com"],
  "insecure-registries": ["172.21.55.100:5000"]
}

上傳

[root@lizj ~]# docker push 172.21.55.100:5000/myubuntu:1.3                      The push refers to repository [172.21.55.100:5000/myubuntu]
130e2e093af5: Pushed
9f54eef41275: Pushed
1.3: digest: sha256:d974a028cd47ddb69094df75e8ebfce6d70e2092600bbdd530af4b69a895de18 size: 741

[root@lizj ~]# curl -XGET http://172.21.55.100:5000/v2/_catalog
{"repositories":["myubuntu"]}

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

指的是服務(wù)器指定文件夾掛載到容器中
docker run -d -p 50 0:5000 -v /lizjuse/myregistry/:/tmp/registry:ro --privileged=true --name u1 registry
docker run -it --privileged=true -v /宿主機(jī)絕對路徑目錄:/容器內(nèi)目錄:讀寫權(quán)限 鏡像名
容器內(nèi)讀寫權(quán)限限制
rw:讀寫(默認(rèn))、ro:read only只讀
Docker掛載主機(jī)目錄訪問如果出現(xiàn)cannot open directory.: Permission denied
解決辦法: 在掛載目錄后多加一個--privileged=true參數(shù)即可
不同容器的數(shù)據(jù)卷的繼承:docker run -it --privileged=true -- volumes- from u1 --name u2 ubuntu

三、理論知識

1.解析hello-world鏡像運(yùn)行

[root@lizj ~]# docker run hello-world
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 the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

步驟如下:
1.查找是否有hello-world鏡像,無則下載,有則運(yùn)行為容器
2.運(yùn)行結(jié)束后關(guān)閉hello-world鏡像容器


2.容器比虛擬化快的原因

(1)docker有著比虛擬機(jī)更少的抽象層

由于docker不需要Hypervisor(虛擬機(jī))實(shí)現(xiàn)硬件資源虛擬化,運(yùn)行在docker容器上的程序直接使用的都是實(shí)際物理機(jī)的硬件資源因此在CPU、內(nèi)存利用率上docker將會在效率上有明顯優(yōu)勢。

(2)docker利用的是宿主機(jī)的內(nèi)核,而不需要加載操作系統(tǒng)OS內(nèi)核

當(dāng)新建一個容器時,docker不需要和虛擬機(jī)一樣重新加載一個操作系統(tǒng)內(nèi)核。進(jìn)而避免引尋、加載操作系統(tǒng)內(nèi)核返回等比較費(fèi)時費(fèi)資源的過程,當(dāng)新建一個虛擬機(jī)時,虛擬機(jī)軟件需要加載OS,返回新建過程是分鐘級別的。而docker由于直接利用宿主機(jī)的操作系統(tǒng),則省略了返回過程.因此新建一個docker突器只需要幾秒鐘。


3.鏡像

①UnionFS(聯(lián)合文件系統(tǒng)):分層、輕量、可聚合的鏡像基礎(chǔ),支持對文件系統(tǒng)的修改作為一次疊加來一層層提交。
②鏡像加載原理:一層層的文件系統(tǒng)組成(UnionFS)
docker鏡像層只是可讀的,容器層是可寫的。當(dāng)容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層(rootfs)”

4.面試題

①談?wù)刣ocker虛懸鏡像是什么?
答:倉庫名、標(biāo)簽都是<none>的鏡像,俗稱虛懸鏡像dangling image
②如何查看當(dāng)前機(jī)器下有多少個容器,多少個鏡像?
答:docker system df
③進(jìn)入真正在運(yùn)行的容器的兩種方式是什么?區(qū)別是什么?一般用哪個?
答:docker exec -it 容器ID /bash/shelldocker attach 容器ID
attach 直接進(jìn)入容器啟動命令的終端,不會啟動新的進(jìn)程用exit退出,會導(dǎo)致容器的停止。
exec 是在容器中打開新的終端,并且可以啟動新的進(jìn)程用exit退出,不會導(dǎo)致容器的停止。
推薦大家使用 docker exec 命令,因?yàn)橥顺鋈萜鹘K端,不會導(dǎo)致容器的停止。

最后編輯于
?著作權(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)容