Docker封装镜像、分发、部署实践:nginx

发布于:2025-03-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

在实际生产工作中,通常是没法直接访问公网的,但是有经常需要使用Docker部署应用,本文将介绍使用Docker从拉取nginx、打包、分发到加载部署nginx的全流程!

1 准备工作

1.1 安装docker

请参考:Docker入门指南:1分钟搞定安装 + 常用命令,轻松入门容器化!-CSDN博客

1.2 配置镜像地址

vim /etc/docker/daemon.json 
# 编辑/etc/docker/daemon.json文件,添加如下内容
{
        "registry-mirrors": [
                "https://proxy.1panel.live",
                "https://docker.1panel.top",
                "https://docker.1ms.run",
                "https://docker.ketches.cn",
                "https://docker.hpcloud.cloud",
                "https://docker.1panel.live",
                "http://mirrors.ustc.edu.cn",
                "http://mirror.azure.cn",
                "https://nrbewqda.mirror.aliyuncs.com",
                "https://dmmxhzvq.mirror.aliyuncs.com"
        ]
}
# 重新加载配置并重启docker
systemctl daemon-reload
systemctl restart docker.service
# 验证镜像地址是否生效可用,能够看到Registry Mirrors:说明正常
[root@node3 ~]# docker info
Client:
 Version:    27.3.1
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 27.3.1
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c
 runc version: v1.1.14-0-g2c9f560
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 3.10.0-1160.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 7.777GiB
 Name: node3
 ID: 11b2908d-4f1c-4d9f-9ea1-275e70e998f9
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://proxy.1panel.live/
  https://docker.1panel.top/
  https://docker.1ms.run/
  https://docker.ketches.cn/
  https://docker.hpcloud.cloud/
  https://docker.1panel.live/
  http://mirrors.ustc.edu.cn/
  http://mirror.azure.cn/
  https://nrbewqda.mirror.aliyuncs.com/
  https://dmmxhzvq.mirror.aliyuncs.com/
 Live Restore Enabled: false
 Product License: Community Engine

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@node3 ~]# 

2 拉取镜像并运行容器

2.1 拉取镜像

# 执行如下命令,拉取最新版镜像
docker pull nginx:latest

[root@node3 ~]# docker pull nginx:latest
latest: Pulling from library/nginx
7cf63256a31a: Downloading [===============================>                   ]  18.05MB/28.22MB
7cf63256a31a: Pull complete 
bf9acace214a: Pull complete 
513c3649bb14: Pull complete 
d014f92d532d: Pull complete 
9dd21ad5a4a6: Pull complete 
943ea0f0c2e4: Pull complete 
103f50cb3e9f: Pull complete 
Digest: sha256:9d6b58feebd2dbd3c56ab5853333d627cc6e281011cfd6050fa4bcf2072c9496
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@node3 ~]# 
# 查看拉取的镜像
[root@node3 ~]# docker images|grep nginx
nginx                          latest    b52e0b094bc0   5 weeks ago   192MB
[root@node3 ~]# 

2.2 试运行容器

[root@node3 ~]# docker run --name mynginx -p 8080:80 -d nginx 5545a43d8e06cf1290dd35b08de0d8ae8a850880ada02a96c893f570269d4bae 
[root@node3 ~]#

参数解释:

-d:后台模式运行容器

-p 8080:80:将主机的8080端口映射到容器的80端口

--name mynginx:指定容器名称为 mynginx

nginx:使用的镜像名称

2.3 验证运行结果

[root@node3 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                     NAMES
5545a43d8e06   nginx     "/docker-entrypoint.…"   16 minutes ago   Up 16 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   mynginx
[root@node3 ~]# 

3 封装并打包镜像

3.1 保存镜像为tar文件

docker save -o mynginx.tar nginx

参数解释:
-o my-nginx.tar:指定输出文件名为mynginx.tar
nginx:要保存的镜像名称

[root@node3 ~]# docker save -o mynginx.tar nginx
[root@node3 ~]# ls -lrht|grep mynginx.tar 
-rw-------  1 root    root    188M Mar 13 22:52 mynginx.tar
[root@node3 ~]# 

 3.2 压缩tar文件(可选)

# 如果文件太大,可以压缩tar文件,命令如下:
[root@node3 ~]# gzip mynginx.tar


[root@node3 ~]# ls -lrht|grep mynginx.tar
-rw-------  1 root    root     68M Mar 13 22:52 mynginx.tar.gz
[root@node3 ~]# 

3.3 分发镜像

# 将保存的进项分发到需要部署的主机上
[root@node3 ~]# scp mynginx.tar.gz root@192.168.10.30:/root/


root@192.168.10.30's password: 
mynginx.tar.gz                                                                                                                                 100%   68MB  13.3MB/s   00:05    
[root@node3 ~]# 

4 加载镜像

4.1 解压压缩包

[root@node1 ~]# gzip -d mynginx.tar.gz
[root@node1 ~]#ls |grep mynginx.tar
mynginx.tar
[root@node1 ~]# 

4.2 加载镜像

[root@node1 ~]# docker load -i mynginx.tar
5f1ee22ffb5e: Loading layer [==================================================>]  77.84MB/77.84MB
c68632c455ae: Loading layer [==================================================>]  118.3MB/118.3MB
cabea05c000e: Loading layer [==================================================>]  3.584kB/3.584kB
791f0a07985c: Loading layer [==================================================>]  4.608kB/4.608kB
f6d5815f290e: Loading layer [==================================================>]   2.56kB/2.56kB
7d22e2347c12: Loading layer [==================================================>]   5.12kB/5.12kB
55e9644f21c3: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@node1 ~]# 

4.3 验证加载情况

[root@node1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    b52e0b094bc0   5 weeks ago   192MB
[root@node1 ~]# 

4.4 运行容器

[root@node1 ~]# docker run --name mynginx -p 8080:80 -d nginx
702bffa6db25fb688a2c3d2ac5c9d657abc492e8978342fc71aab97c7174c513
[root@node1 ~]# 

4.5 验证运行结果

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                     NAMES
702bffa6db25   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   mynginx
[root@node1 ~]# 

5 总结

通过以上步骤,你就完成了镜像的拉取、封装、分发、以及在目标机器上加载镜像并部署容器。