在实际生产工作中,通常是没法直接访问公网的,但是有经常需要使用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.1Context: defaultDebug Mode: falseServer:Containers: 0Running: 0Paused: 0Stopped: 0Images: 1Server Version: 27.3.1Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311crunc version: v1.1.14-0-g2c9f560init version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-1160.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 7.777GiBName: node3ID: 11b2908d-4f1c-4d9f-9ea1-275e70e998f9Docker Root Dir: /var/lib/dockerDebug Mode: falseExperimental: falseInsecure Registries:127.0.0.0/8Registry 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: falseProduct License: Community EngineWARNING: 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 总结
通过以上步骤,你就完成了镜像的拉取、封装、分发、以及在目标机器上加载镜像并部署容器。