在實際生產工作中,通常是沒法直接訪問公網的,但是有經常需要使用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 總結
通過以上步驟,你就完成了鏡像的拉取、封裝、分發、以及在目標機器上加載鏡像并部署容器。