Docker部署與常見使用方法
一、Docker
- Docker是管理容器的引擎,為應(yīng)用打包、部署平臺(tái),而非單純的虛擬化技術(shù)
- 特點(diǎn):
- 輕量級虛擬化
- 一致性
- 可移植性
- 高效的資源利用
- 易于部署和擴(kuò)展
- 應(yīng)用(通過docker企業(yè)可以更加高效的部署應(yīng)用并更節(jié)省資源):
- Laas:基礎(chǔ)設(shè)施即服務(wù)
- PaaS:平臺(tái)即服務(wù)
- SaaS:軟件運(yùn)營服務(wù)
- 除了安全性以外,docker全是優(yōu)點(diǎn)
二、部署Docker
1、配置軟件倉庫
# 利用阿里云部署軟件倉庫 [root@docker-node1 ~]# cat >> /etc/yum.repos.d/docker.repo << EOF > [docker] > name = docker > baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/ > gpgcheck = 0 > EOF [root@docker-node1 ~]# cat /etc/yum.repos.d/docker.repo [docker] name = docker baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/ gpgcheck = 0 # 測試: [root@docker-node1 ~]# dnf makecache 正在更新 Subscription Management 軟件倉庫。 無法讀取客戶身份 本系統(tǒng)尚未在權(quán)利服務(wù)器中注冊??墒褂?"rhc" 或 "subscription-manager" 進(jìn)行注冊。 docker 2.0 kB/s | 2.0 kB 00:00 docker 38 kB/s | 46 kB 00:01 AppStream 3.1 MB/s | 3.2 kB 00:00 BaseOS 2.7 MB/s | 2.7 kB 00:00 元數(shù)據(jù)緩存已建立。 # 查找docker軟件包 [root@docker-node1 ~]# dnf search docker 正在更新 Subscription Management 軟件倉庫。 無法讀取客戶身份 本系統(tǒng)尚未在權(quán)利服務(wù)器中注冊??墒褂?"rhc" 或 "subscription-manager" 進(jìn)行注冊。 上次元數(shù)據(jù)過期檢查:0:00:19 前,執(zhí)行于 2026年03月14日 星期六 14時(shí)55分06秒。 ============================ 名稱 和 概況 匹配:docker ============================ docker-buildx-plugin.x86_64 : Docker Buildx plugin for the Docker CLI docker-ce-rootless-extras.x86_64 : Rootless support for Docker docker-compose-plugin.x86_64 : Docker Compose plugin for the Docker CLI docker-model-plugin.x86_64 : Docker Model Runner plugin for the Docker CLI pcp-pmda-docker.x86_64 : Performance Co-Pilot (PCP) metrics from the Docker daemon podman-docker.noarch : Emulate Docker CLI using podman ================================ 名稱 匹配:docker ================================ docker-ce.x86_64 : The open-source application container engine docker-ce-cli.x86_64 : The open-source application container engine
2、安裝Docker
# 安裝docker [root@docker-node1 ~]# dnf install docker-ce.x86_64 -y # 編輯docker啟動(dòng)文件,設(shè)定其使用iptables的網(wǎng)絡(luò)設(shè)定方式,默認(rèn)使用nftables [root@docker-node1 ~]# vim /lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true # 激活內(nèi)核網(wǎng)絡(luò)選項(xiàng) [root@docker-node1 ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf [root@docker-node1 ~]# modprobe -a br_netfilter # 驗(yàn)證是否成功 [root@docker-node1 ~]# sysctl -a | grep iptables net.bridge.bridge-nf-call-iptables = 1 # 修改內(nèi)核參數(shù) [root@docker-node1 ~]# cat > /etc/sysctl.d/docker.conf <<EOF > net.bridge.bridge-nf-call-iptables = 1 > net.bridge.bridge-nf-call-ip6tables = 1 > net.ipv4.ip_forward = 1 > EOF # 生效命令 [root@docker-node1 ~]# sysctl --system net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 # 再啟動(dòng)docker [root@docker-node1 ~]# systemctl enable --now docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service. # 查看系統(tǒng)信息 [root@docker-node1 ~]# docker info
三、Docker的常規(guī)使用方法
1、配置Docker加速器
# 一開始我們想要在docker中找到nginx,需要等很久,并且不一定找到
[root@docker-node1 ~]# docker search nginx
Error response from daemon: Get "https://index.docker.io/v1/search?q=nginx&n=25": dial tcp 162.125.80.6:443: connect: connection refused
# 查看系統(tǒng)信息,此時(shí)還看不到加速器(因?yàn)闆]安裝)
[root@docker-node1 ~]# docker info
# 配置加速器
[root@docker-node1 ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors":["https://docker.1ms.run"]
> }
> EOF
# 記得重啟
[root@docker-node1 ~]# systemctl restart docker
# 使用查看系統(tǒng)信息,來查看加速器
[root@docker-node1 ~]# docker info
Registry Mirrors:
https://docker.1ms.run/
Live Restore Enabled: false
Firewall Backend: iptables2、docker常用命令
(1)查看本地鏡像
# 查看本地鏡像 [root@docker-node1 ~]# docker images IMAGE ID DISK USAGE CONTENT SIZE EXTRA
(2)搜索查看鏡像
# 搜索查看鏡像 [root@docker-node1 ~]# docker search nginx
(3)下載鏡像
# 下載(沒指定版本,那么默認(rèn)下載的就是最新的),從鏡像倉庫中拉取鏡像
[root@docker-node1 ~]# docker pull nginx
[root@docker-node1 ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
61dfb50712f5: Pull complete
96cfb76e59bd: Download complete
Digest: sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
# 查看鏡像提交歷史
[root@docker-node1 ~]# docker history busybox:latest
IMAGE CREATED CREATED BY SIZE COMMENT
b3255e7dfbcd 17 months ago BusyBox 1.37.0 (glibc), Debian 13 4.49MB
[root@docker-node1 ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
busybox:latest b3255e7dfbcd 6.7MB 2.22MB
nginx:1.26 41b194461e4b 279MB 75.2MB(4)導(dǎo)出鏡像
# 導(dǎo)出鏡像 [root@docker-node1 ~]# docker save -o nginx-1.26.tar nginx:1.26
(5)刪除鏡像
# 刪除鏡像 [root@docker-node1 ~]# docker rmi timinglee/mario:latest
(6)導(dǎo)入鏡像
# 導(dǎo)入鏡像
[root@docker-node1 ~]# ls
anaconda-ks.cfg game2048-latest.tar nginx-1.26.tar
busy-latest.tar mario-latest.tar
[root@docker-node1 ~]# docker load -i game2048-latest.tar
Loaded image: timinglee/game2048:latest
[root@docker-node1 ~]# docker load -i nginx-1.26.tar
Loaded image: nginx:1.26
[root@docker-node1 ~]# docker load -i busy-latest.tar
Loaded image: busybox:latest
[root@docker-node1 ~]# docker load -i mario-latest.tar
Loaded image: timinglee/mario:latest
[root@docker-node1 ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
busybox:latest b3255e7dfbcd 6.7MB 2.22MB
nginx:1.26 41b194461e4b 279MB 75.2MB
timinglee/game2048:latest 8a34fb9cb168 77.2MB 17.8MB
timinglee/mario:latest 7758988210df 298MB 73.7MB(7)運(yùn)行鏡像
# 運(yùn)行鏡像(--name是我們自己設(shè)定容器的名字) # docker運(yùn)行是交互式的,所有如果不想它占用終端,就可以加入?yún)?shù)-d,此時(shí)容器就會(huì)在后臺(tái)運(yùn)行 [root@docker-node1 ~]# docker run -d --name web nginx:1.26 6b50e55d0dfe8554477a06f42940c3095dc275a2bcda803ba90daa48b6aa1a8f # 查看運(yùn)行容器(鏡像的運(yùn)行狀態(tài)是容器) [root@docker-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b50e55d0dfe nginx:1.26 "/docker-entrypoint.…" 32 seconds ago Up 31 seconds 80/tcp web # 查看系統(tǒng)所有在運(yùn)行的容器 [root@docker-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b50e55d0dfe nginx:1.26 "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp web # 交互模式運(yùn)行容器 [root@docker-node1 ~]# docker run -it --name busybox busybox:latest / # # 交互運(yùn)行容器默認(rèn)退出后會(huì)停止 [root@docker-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1b27167a247 busybox:latest "sh" 50 seconds ago Exited (0) 19 seconds ago busybox # 運(yùn)行停止的容器 [root@docker-node1 ~]# docker start busybox busybox [root@docker-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d6ebc31a1f1 busybox:latest "sh" 2 minutes ago Up 2 minutes busybox 6b50e55d0dfe nginx:1.26 "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 80/tcp web # 退出交互容器不對其停止 [root@docker-node1 ~]# docker attach busybox / # read escape sequence # [ctrl]+[p]+[q] # 按鍵 [root@docker-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d6ebc31a1f1 busybox:latest "sh" 2 minutes ago Up 2 minutes busybox 6b50e55d0dfe nginx:1.26 "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp web # 查看容器信息 [root@docker-node1 ~]# docker inspect busybox
(8)容器控制
# 容器控制 [root@Docker-node1 ~]# docker stop busybox # 停止容器 busybox [root@Docker-node1 ~]# docker kill busybox # 殺死容器,可以使用信號 [root@Docker-node1 ~]# docker start busybox # 開啟停止的容器 busybox # 在已經(jīng)運(yùn)行的容器中執(zhí)行指定命令(非交互式的) [root@docker-node1 ~]# docker exec busybox touch /root/haha [root@docker-node1 ~]# docker exec busybox ls /root haha # 在已經(jīng)運(yùn)行的容器中執(zhí)行指定命令(交互式的) [root@docker-node1 ~]# docker exec -it web /bin/bash root@6b50e55d0dfe:/# ls bin docker-entrypoint.d home media proc sbin tmp boot docker-entrypoint.sh lib mnt root srv usr dev etc lib64 opt run sys var root@6b50e55d0dfe:/# exit exit # 容器刪除 [root@docker-node1 ~]# docker rm -f busybox busybox [root@docker-node1 ~]# docker stop web web [root@docker-node1 ~]# docker rm web web
(9)內(nèi)容提交
# 內(nèi)容提交
[root@docker-node1 ~]# docker run -it --name test busybox:latest
/ # touch /root/file
/ # ls /root
file
[ctrl+qp 退出當(dāng)前環(huán)境并繼續(xù)運(yùn)行容器]
[root@docker-node1 ~]# docker commit -m "add file" test busybox-file:latest
sha256:174a4462dea47c06af9384ae9b4c3d66837f418f839382bc14d4ae92570adaa9
[root@docker-node1 ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
busybox-file:latest 174a4462dea4 6.71MB 2.21MB
busybox:latest b3255e7dfbcd 6.7MB 2.22MB U
nginx:1.26 41b194461e4b 279MB 75.2MB
timinglee/game2048:latest 8a34fb9cb168 77.2MB 17.8MB
timinglee/mario:latest 7758988210df 298MB 73.7MB
[root@docker-node1 ~]# docker run -it --name test busybox-file:latest
/ # exit(10)文件在鏡像中的復(fù)制
# 文件在鏡像中的復(fù)制 [root@docker-node1 ~]# docker run -it --name test busybox-file:latest / # [root@docker-node1 ~]# docker cp test:/root/file /mnt Successfully copied 1.54kB to /mnt [root@docker-node1 ~]# ls /mnt/ file [root@docker-node1 ~]# docker cp /etc/passwd test:/root/ Successfully copied 3.07kB to test:/root/ [root@docker-node1 ~]# docker exec test ls /root file passwd
3、容器外部網(wǎng)絡(luò)訪問
# 首先保證運(yùn)行環(huán)境干凈 [root@docker-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 59b1ebcbe2f7 busybox-file:latest "sh" 10 minutes ago Up 10 minutes test [root@docker-node1 ~]# docker rm -f test test [root@docker-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 前提:保證我們使用的80端口或者你自己設(shè)立的端口沒有被占用,我們可以查詢一下,以防萬一(比如我使用的是80端口) [root@docker-node1 ~]# netstat -tulpn | grep :80 # -p 本地端口:容器端口 [root@docker-node1 ~]# docker run -d --name mario -p 80:8080 timinglee/mario:latest e89143d08570cfa193424f83bcff8864e8edc412c849b88bf7d5963288ed47ef # 之后在瀏覽器里面訪問該主機(jī)的IP地址(172.25.254.10),就可以直接進(jìn)入游戲

到此這篇關(guān)于Docker部署與常見使用方法的文章就介紹到這了,更多相關(guān)Docker部署使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Idea+docker通過dockerFile往華為云發(fā)布項(xiàng)目實(shí)踐
本文介紹了使用IntelliJ IDEA和Docker將Spring Boot項(xiàng)目部署到華為云上,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
使用Docker-compose離線部署Django應(yīng)用的方法
這篇文章主要介紹了使用Docker-compose離線部署Django應(yīng)用的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
docker在windows創(chuàng)建卷后本地找不到的完美解決方法
這篇文章主要介紹了docker在windows創(chuàng)建卷后本地找不到的完美解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-02-02
Linux系統(tǒng)Docker 部署 ASP.NET Core應(yīng)用的流程分析
這篇文章主要介紹了Linux系統(tǒng)Docker 部署 ASP.NET Core應(yīng)用的流程分析,在操作過程中小編遇到很多問題,下面把我的經(jīng)驗(yàn)及處理方法分享到腳本之家平臺(tái),需要的朋友參考下吧2021-06-06
淺談docker --privileged=true參數(shù)作用
這篇文章主要介紹了淺談docker --privileged=true參數(shù)作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Docker Push常見報(bào)錯(cuò)及解決方案總結(jié)
這篇文章主要介紹了Docker Push常見報(bào)錯(cuò)及解決方案,包括HTTP響應(yīng)、insecure-registries配置、Registry使用HTTPS以及connection refused問題的詳細(xì)分析和解決方法,需要的朋友可以參考下2026-03-03

