Docker安裝及管理
Centos7安裝docker
操作系統要求
要安裝 Docker Engine,您需要 CentOS 7 或 8 的維護版本。存檔版本不受支持或測試。
centos-extras
必須啟用存儲庫。此存儲庫默認啟用,但如果您已禁用它,則需要 重新啟用它。推薦使用overlay2
存儲驅動。
卸載舊版本
舊版本的 Docker 被稱為docker
或docker-engine
. 如果安裝了這些,請卸載它們以及相關的依賴項。
[root@localhost ~]# yum remove docker \ > docker-client \ > docker-client-latest \ > docker-common \ > docker-latest \ > docker-latest-logrotate \ > docker-logrotate \ > docker-engine
安裝新版本
您可以根據需要以不同的方式安裝 Docker Engine:
大多數用戶 設置 Docker 的存儲庫並從中安裝,以便於安裝和升級任務。這是推薦的方法。
在新主機上首次安裝 Docker Engine 之前,您需要設置 Docker 存儲庫。之后,您可以從存儲庫安裝和更新 Docker。
設置存儲庫
安裝yum-utils包(提供yum-config-manager 實用程序)並設置穩定的存儲庫。
[root@localhost ~]# yum install -y yum-utils
下載並安裝存儲庫
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看安裝的文件信息
[root@localhost ~]# ll /etc/yum.repos.d/ total 56 drwxr-xr-x. 2 root root 4096 Aug 30 2019 bak -rw-r--r--. 1 root root 2523 Dec 26 2020 CentOS-Base.repo -rw-r--r-- 1 root root 1309 Nov 23 2020 CentOS-CR.repo -rw-r--r-- 1 root root 649 Nov 23 2020 CentOS-Debuginfo.repo -rw-r--r-- 1 root root 314 Nov 23 2020 CentOS-fasttrack.repo -rw-r--r-- 1 root root 630 Nov 23 2020 CentOS-Media.repo -rw-r--r-- 1 root root 1331 Nov 23 2020 CentOS-Sources.repo -rw-r--r-- 1 root root 8515 Nov 23 2020 CentOS-Vault.repo -rw-r--r-- 1 root root 616 Nov 23 2020 CentOS-x86_64-kernel.repo -rw-r--r-- 1 root root 1919 Jan 5 15:22 docker-ce.repo -rw-r--r-- 1 root root 664 Dec 26 2020 epel.repo.rpmsave -rw-r--r-- 1 root root 636 May 14 2021 zabbix.repo
1:安裝最新 Docker引擎
安裝最新版本的 Docker Engine 和 containerd,或者進入下一步安裝特定版本:
[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
如果您啟用了多個 Docker 存儲庫,使用yum install 或yum update 安裝或更新的時候未指定版本庫,通常是安裝最新的版本,但是這樣可能不穩定。
此命令會安裝 Docker,但不會啟動 Docker。它還會創建一個 docker組,但是默認情況下它不會將任何用戶添加到該組中。
2: 要安裝特定版本的Docker Engine,請在 repo 中列出可用版本,然后選擇並安裝:
列出並排序當前存儲庫中可用的版本,此示例按版本號從最高到最低對結果進行排序。
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r * updates: mirrors.aliyun.com Loading mirror speeds from cached hostfile Loaded plugins: fastestmirror Installed Packages * extras: mirrors.aliyun.com docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.12-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.12-3.el7 @docker-ce-stable docker-ce.x86_64 3:20.10.11-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.10-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.15-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.14-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.13-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.12-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.11-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.10-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable * base: mirrors.aliyun.com Available Packages
通過其完全限定的包名稱安裝特定版本,即包名稱 ( docker-ce) 加上版本字符串(第 2 列),從第一個冒號 ( :) 開始,直到第一個連字符,用連字符 ( ) 分隔-。例如,docker-ce-18.09.1。
執行一下命令即可安裝需要的版本
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
我當前安裝的是最新的,即列表的最上面一個,版本號為:20.10.9 。
此命令會安裝 Docker,但不會啟動 Docker。它還會創建一個 docker組,但是默認情況下它不會將任何用戶添加到該組中。
3:啟動 Docker。
[root@localhost ~]# systemctl start docker
執行hello-world
hello-world 通過運行映像來驗證 Docker 引擎是否已正確安裝。
[root@localhost ~]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a Status: Downloaded newer image for hello-world:latest 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/
此命令下載測試映像並在容器中運行它。當容器運行時,它會打印一條消息(紅色部分)並退出。
這將安裝並運行 Docker 引擎。用於sudo運行 Docker 命令。繼續Linux 后安裝以允許非特權用戶運行 Docker 命令和其他可選配置步驟。
4:卸載 docker
刪除安裝包:
yum remove docker-ce
刪除鏡像、容器、配置文件等內容:
rm -rf /var/lib/docker
配置docker registry-mirrors,
docker下載鏡像過慢是因為默認的鏡像地址是國外的,我們只要配置一下docker的鏡像地址就可以了!
配置中國科技大學的源
vim /etc/docker/daemon.json
{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://almtd3fa.mirror.aliyuncs.com"] }
重新加載和啟動docker
systemctl daemon-reload systemctl restart docker.service
Compose介紹
詳細介紹: https://www.jianshu.com/p/87d701d0801d
Docker Compose是一個用來定義和運行復雜應用的Docker工具。一個使用Docker容器的應用,通常由多個容器組成。使用Docker Compose不再需要使用shell腳本來啟動容器。
Compose 通過一個配置文件來管理多個Docker容器,在配置文件中,所有的容器通過services來定義,然后使用docker-compose腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器,非常適合組合使用多個容器進行開發的場景。
Compose和Docker兼容性
compose文件格式版本 | docker版本 |
---|---|
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
安裝 docker-compose
最新發行的版本地址:https://github.com/docker/compose/releases
運行以下命令以下載Docker Compose的當前穩定版本:
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 664 100 664 0 0 1156 0 --:--:-- --:--:-- --:--:-- 1158
100 11.6M 100 11.6M 0 0 2253k 0 0:00:05 0:00:05 --:--:-- 2838k
其中地址中有系統參數,實際請求的地址是: https://github.com/docker/compose/releases/download/1.28.4/docker-compose-Linux-x86_64
注意: 如果無法下載,可以本地下載好后上傳到服務器即可:
下載地址:https://github.com/docker/compose/releases
將可執行權限應用於二進制文件:
注意:如果命令docker-compose
在安裝后失敗,請檢查您的路徑。您還可以創建指向/usr/bin
或路徑中任何其他目錄的符號鏈接。
測試安裝
[root@localhost bin]# docker-compose -v docker-compose version 1.28.4, build cabd5cfb
bash 命令補齊
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
卸載docker-compose
直接移除二進制包即可
rm /usr/local/bin/docker-compose
簡單示例:docker-compose 安裝redis
先創建redis啟動的compose文件: redis-compose.yml
version: '3' services: my-redis: image: redis:latest restart: always container_name: redis-server privileged: true ports: - 6379:6379 environment: TZ: Asia/Shanghai volumes: - /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf command: ["redis-server","/etc/redis/redis.conf"]
創建reids的配置文件 /usr/local/docker/redis/redis.conf 內容如下:
port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel verbose logfile /data/redis.log databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
配置項目:
1: Version 3.x
最新版本,也是推薦使用版本,推出該版的目的是為了在Compose和Docker Engine的swarm模式之間形成交叉兼容。
通過YAML的根配置項version來指定,具體配置如version: '3'或version: '3.1'等。
2: services: 服務配置
服務定義了該服務啟動的每個容器的配置
3: privileged: true #使用該參數,container內的root擁有真正的root權限,否則,container內的root只是外部的一個普通用戶權限,設置為true,不然數據卷可能掛載不了,啟動不起
4: restart: always #設置無論遇到什么錯,重啟容器
5:command: 覆蓋容器啟動后默認執行的命令 ,有 2種寫法
字符串形式: command: redis-server /etc/redis/redis.conf
JSON數組形式: command: ["redis-server","/etc/redis/redis.conf"]
執行命令:
docker-compose -f redis-compose.yml up -d
參數 -f 指定相關的compose文件,如果文件名為docker-compose.yml ,則可以不用當前參數,
Portainer.io管理工具
https://blog.csdn.net/qq_39177602/article/details/113854625
Docker之網絡配置和部署SpringCloud項目
https://copyfuture.com/blogs-details/20210617154040825s
使用Portainer-ce管理監控docker容器實例
https://blog.csdn.net/cnskylee/article/details/125005339
搭建docker中的portainer 訪問宿主機端口報錯 curl: (56) Recv failure: Connection reset by peer
解決方法 : 重建docker0網橋,但出現錯誤原因不清楚
重建docker0網橋步驟:
# 停止docker systemctl stop docker # 安裝bridge-utils yum install -y bridge-utils # 關閉docker0網橋 ip link set dev docker0 down # 刪除docker0網橋 brctl delbr docker0 # 添加docker0網橋 brctl addbr docker0 # 添加網橋信息 ip addr add 172.16.10.1/24 dev docker0 # 啟動docker0網橋 ip link set dev docker0 up # 查看網橋是否正常 ip addr # 啟動docker systemctl restart docker
可能每次重啟centos都要運行一遍這個
安裝問題:
1: 執行下來命令是出現錯誤
[root@xzkj-huanan2 docker]# docker run --name nginx-docker -p 8089:80 -d nginx:v3
617d51685ad437fec194da91f78ad8c8dd9da91e4161283fc5dace17b095c555
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx-docker (a5e8b9bf56ee08008d6aabc7ef434b0b6898cb578dc842e71b343e93e89971cc): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8089 -j DNAT --to-destination 172.17.0.3:80 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
詳細原因:docker服務啟動時定義的自定義鏈DOCKER,當 centos7 firewall 被清掉時,
firewall的底層是使用iptables進行數據過濾,建立在iptables之上,這可能會與 Docker 產生沖突。
當 firewalld 啟動或者重啟的時候,將會從 iptables 中移除 DOCKER 的規則,從而影響了 Docker 的正常工作。
當你使用的是 Systemd 的時候, firewalld 會在 Docker 之前啟動,但是如果你在 Docker 啟動之后操作 firewalld ,你就需要重啟 Docker 進程了。
解決方法:輸入指令 systemctl restart docker 重啟docker服務及可重新生成自定義鏈DOCKER
Ubuntu系統安裝Docker
1.卸載舊版本
ubuntu下自帶了docker的庫,不需要添加新的源。
但是ubuntu自帶的docker版本太低,需要先卸載舊的再安裝新的, 然后獲取軟件最新源
sudo apt-get remove docker docker-engine docker.io containerd runc sudo apt-get update
3.安裝 apt 依賴包,用於通過HTTPS來獲取倉庫
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
3.安裝GPG證書
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4.驗證
sudo apt-key fingerprint 0EBFCD88
5.設置穩定版倉庫
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
6. 更新 apt 包索引
sudo apt-get update
7.安裝最新版本docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
也可以選擇某個版本安裝:
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
8.配置用戶組
sudo usermod -aG docker your-user 比如:
sudo usermod -aG docker wb2010
二、卸載docker
1.刪除安裝包
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
2.刪除相關配置文件
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
3.卸載相關插件
sudo apt-get autoremove docker-ce-*