docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署使用

Docker部署与常见使用方法

作者:~莫子

Docker是一种容器化技术,用于管理应用的打包、部署和运行,它轻量级、一致且可移植,适用于各种部署场景,本文介绍Docker部署与常见使用方法,感兴趣的朋友跟随小编一起看看吧

一、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),就可以直接进入游戏

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

您可能感兴趣的文章:
阅读全文