Docker部署与常见使用方法
·
目录
一、Docker
Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术
特点:
轻量级虚拟化
一致性
可移植性
高效的资源利用
易于部署和扩展
应用(通过docker企业可以更加高效的部署应用并更节省资源):
Laas:基础设施即服务
PaaS:平台即服务
SaaS:软件运营服务
除了安全性以外,docker全是优点
二、部署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 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
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
元数据缓存已建立。
# 查找docker软件包
[root@docker-node1 ~]# dnf search docker
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
上次元数据过期检查:0:00:19 前,执行于 2026年03月14日 星期六 14时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启动文件,设定其使用iptables的网络设定方式,默认使用nftables
[root@docker-node1 ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
# 激活内核网络选项
[root@docker-node1 ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
[root@docker-node1 ~]# modprobe -a br_netfilter
# 验证是否成功
[root@docker-node1 ~]# sysctl -a | grep iptables
net.bridge.bridge-nf-call-iptables = 1
# 修改内核参数
[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
# 再启动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.
# 查看系统信息
[root@docker-node1 ~]# docker info
三、Docker的常规使用方法
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
# 查看系统信息,此时还看不到加速器(因为没安装)
[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
# 使用查看系统信息,来查看加速器
[root@docker-node1 ~]# docker info
Registry Mirrors:
https://docker.1ms.run/
Live Restore Enabled: false
Firewall Backend: iptables
2、docker常用命令
(1)查看本地镜像
# 查看本地镜像
[root@docker-node1 ~]# docker images
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
(2)搜索查看镜像
# 搜索查看镜像
[root@docker-node1 ~]# docker search nginx
(3)下载镜像
# 下载(没指定版本,那么默认下载的就是最新的),从镜像仓库中拉取镜像
[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)导出镜像
# 导出镜像
[root@docker-node1 ~]# docker save -o nginx-1.26.tar nginx:1.26
(5)删除镜像
# 删除镜像
[root@docker-node1 ~]# docker rmi timinglee/mario:latest
(6)导入镜像
# 导入镜像
[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)运行镜像
# 运行镜像(--name是我们自己设定容器的名字)
# docker运行是交互式的,所有如果不想它占用终端,就可以加入参数-d,此时容器就会在后台运行
[root@docker-node1 ~]# docker run -d --name web nginx:1.26
6b50e55d0dfe8554477a06f42940c3095dc275a2bcda803ba90daa48b6aa1a8f
# 查看运行容器(镜像的运行状态是容器)
[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
# 查看系统所有在运行的容器
[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
# 交互模式运行容器
[root@docker-node1 ~]# docker run -it --name busybox busybox:latest
/ #
# 交互运行容器默认退出后会停止
[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
# 运行停止的容器
[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
# 在已经运行的容器中执行指定命令(非交互式的)
[root@docker-node1 ~]# docker exec busybox touch /root/haha
[root@docker-node1 ~]# docker exec busybox ls /root
haha
# 在已经运行的容器中执行指定命令(交互式的)
[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)内容提交
# 内容提交
[root@docker-node1 ~]# docker run -it --name test busybox:latest
/ # touch /root/file
/ # ls /root
file
[ctrl+qp 退出当前环境并继续运行容器]
[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)文件在镜像中的复制
# 文件在镜像中的复制
[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、容器外部网络访问
# 首先保证运行环境干净
[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端口或者你自己设立的端口没有被占用,我们可以查询一下,以防万一(比如我使用的是80端口)
[root@docker-node1 ~]# netstat -tulpn | grep :80
# -p 本地端口:容器端口
[root@docker-node1 ~]# docker run -d --name mario -p 80:8080 timinglee/mario:latest
e89143d08570cfa193424f83bcff8864e8edc412c849b88bf7d5963288ed47ef
# 之后在浏览器里面访问该主机的IP地址(172.25.254.10),就可以直接进入游戏

更多推荐
所有评论(0)