Docker部署与常见使用方法
作者:~莫子
Docker是一种容器化技术,用于管理应用的打包、部署和运行,它轻量级、一致且可移植,适用于各种部署场景,本文介绍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: iptables2、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),就可以直接进入游戏

到此这篇关于Docker部署与常见使用方法的文章就介绍到这了,更多相关Docker部署使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
