1. 程式人生 > 實用技巧 >Docker入門

Docker入門

虛擬化之docker

linuxdocker安裝官方地址:https://docs.docker.com/engine/install/centos/

docker安裝操作:

環境:

#核心 
[root@test2 etc]# uname -r 
3.10.0-1127.18.2.el7.x86_64 #引數 [root@test2 etc]# cat /etc/os-release
NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)
" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"

安裝:

#1.解除安裝舊版本
 yum remove docker \          docker-client \          docker-client-latest \          docker-common \          docker-latest \          docker-latest-logrotate \          docker-logrotate \          docker-engine
#
2.需要的安裝包 yum install -y yum-utils #3.設定映象倉庫 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #國外的太慢 yum-config-manager \ --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里源
#更新yum軟體包索引
yum makecache fast
#4.安裝docker
yum install docker-ce docker-ce-cli containerd.io
#5.啟動docker
systemctl start docker #
6.docker version
[root@test2 ~]# docker version
Client: Docker Engine - Community Version: 19.03.12 API version: 1.40 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:46:54 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.12 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:45:28 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683 #7.解除安裝
yum remove docker-ce docker-ce-cli containerd.io

阿里映象加速

#建立檔案
sudo
mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {
  "registry-mirrors": ["https://3tcts5g3.mirror.aliyuncs.com"]
}
EOF

#啟動服務
sudo systemctl daemon-reload
sudo systemctl restart docker

底層原理

docker是怎麼工作的?

docker是一個cs結構的系統,docker的守護程序執行在主機上,通過socket從客戶端訪問

dockerServer 接受到docker-Client 的指令,會執行這個命令

docker為什麼比vm塊?

1.docker有著比虛擬機器更少的抽象層。

2.docker 利用的是宿主機的核心,vm 需要是 Guest OS。

 所以說,新建一個容器的時候,docker不需要像虛擬機器一樣重新載入一個作業系統核心,避免引導。虛擬機器載入Guest OS,分鐘級別的,而docker 是利用宿主機的作業系統,省略了這個複雜的過程,秒級別。

docker常用命令

命令地址doc:https://docs.docker.com/registry/spec/api/

映象倉庫hub:https://hub.docker.com/search?q=tomcat&type=image

映象命令:

映象命令:
[root@test2 ~]# docker images 
REPOSITORY  TAG                 IMAGE ID            CREATED             SIZE
#解釋
REPOSITORY:映象源
TAG:標籤
IMAGE ID:映象的id
CREATED:建立的時間
SIZE:映象的大小



#搜尋映象
[root@test2 ~]# docker serach mysql

#下載映象
[root@test2 ~]# docker pull mysql
#指定版本
[root@test2 ~]# docker pull mysql:5.7

#刪除映象
[root@test2 ~]# docker rmi -f +id/name
[root@test2 ~]# docker rmi -f $(docker images -qa)  #刪除所有
```

容器命令:

docker run [可選引數] iamge
# 引數說明
--name        容器名字
-d            後臺方式執行
-it           使用互動方式執行,進入容器檢視內容
-p            指定容器的埠
-P            隨機指定埠
-p:     -p ip:主機埠:容器埠     -p 主機埠:容器埠(常用)     -p 容器埠 容器埠

docker ps 命令
# 列出當前正在執行的容器
-a # 列出當前正則執行的容器+歷史執行過的容器
-n # 顯示最近建立過的容器
-q # 只顯示容器的編號

退出容器

exit # 直接容器停止並退出
ctrl + p + q # 容器不停止推出

刪除容器

docker rm 容器id # 刪除指定的容器,不能刪除正在執行的容器,強制刪除rm -f

docker rm -f $(docker ps -aq) # 刪除所有容器

docker start 容器id # 啟動容器
docker restart 容器id # 重啟容器
docker stop 容器id # 停止容器
docker kill 容器id # 強制停止當前命令

常用其他命令

後臺啟動容器
# docker run -d 映象名 [root@test2 ~]# docker run -d centos #問題: docker ps 發現 centos 停止了 docker 容器使用後臺執行,就必須要有一個前臺程序,docker發現沒有應用,就會自動停止


檢視日誌

# 顯示日誌
docker logs
-- tf # 顯示日誌
--tail number # 要顯示日誌條數

[root@test2 ~]# docker logs -tf --tail 10 b2f0ec7d634d #容器id

檢視容器中程序資訊

docker top 容器id

檢視映象元資料

docker inspect 容器 id

進入當前正在執行的容器

# 方式一:
docker exec -it 容器id /bin/bash #(bashshell)

# 方式二:
docker attach 容器id

# docker exec 進入容器後開啟一個新的終端,可以在裡面操作
# dicker attach 進入容器正在執行的終端,不會啟動進度程序

從容器內拷貝檔案到主機上

# 進入容器
[root@test2 ~]# docker run -it centos /bin/bash
# 建立檔案
[root@97aba928b05f home]# touch zz.linux
# cp測試
[root@test2 ~]# docker cp 97aba928b05f:/home/zz.linux /root
# 產看
[root@test2 ~]# ls
anaconda-ks.cfg test zz.linux

# 拷貝是一個手動過程,未來使用 -v 卷的技術,可以實現自動同步。

docker映象

映象是一種輕量級,可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含 執行一個軟體所需要的所有內容,包括程式碼,執行時,庫,環境變數和配置檔案。

UnionFS(聯合檔案系統)。

如何得到映象:
從遠處倉庫下載 ,朋友拷貝, 自己製作一個映象Dockerfile。

檔案聯合系統:

映象載入原理:

commit映象

docker commit 提交容器成為一個新的副本

# 命令和git相似
docker commit -m=“提交的描述資訊“ -a=”作者“ 容器id 目標映象名:[TAG]

實戰測試:

# 1,啟動一個預設的tomcat

# 2,發現預設tomcat 是沒有webapps應用,映象原因,官方映象預設webapps下沒有檔案

# 3,自己新增webapps基本檔案並做成映象

[root@test2 ~]# docker commit -a="zz" -m="add app" 79e252d4196c tomcat02:1.0
sha256:8a93171baa142dd426ead3657fda7b48e224cc247a039111516c74bcaa750759
[root@test2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 8a93171baa14 23 seconds ago 652MB
tomcat latest 2ae23eb477aa 2 weeks ago 647MB

結論:

commit 就相當於vm中的快照。

恭喜你入門了!