文章目录

  • 一. Docker 镜像与制作
  • 手动制作nginx 镜像(不建议)
  • DockerFile 制作nginx 镜像(建议)
  • 手动制作编译版本 nginx 镜像(不建议)
  • 提交为镜像:
  • 装数据库
  • 二. 构建基础镜像:基础的命令等
  • 1. 基础镜像
  • 2. 构建jdk镜像
  • 3. 构建 tomcat Base 镜像
  • tomcat构建业务镜像 1
  • tomcat 构建业务镜像 2
  • 简单方法直接复制
  • 三. haproxy 镜像
  • 基于官方apline基础镜像制作
  • 基于官方Ubuntu基础镜像制作
  • 四. 实现动静分离
  • 切记里面的iptables规则
  • 五. 本地镜像上传至官方 docker 仓库
  • 1. 阿里云
  • 2.docker hub


一. Docker 镜像与制作

从镜像大小上面来说,一个比较小的镜像只有十几 MB,而内核文件需要一百多兆, 因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的 rootfs,即系统正常运行所必须的用户空间的文件系统,比如/dev/,/proc,/bin,/etc 等目录,所以容器当中基本是没有/boot目录的,而/boot 当中保存的就是与内核相关的文件和目录。

为什么没有内核
由于容器启动和运行过程中是直接使用了宿主机的内核,所以没有直接调用过物理硬件,所以也不会涉及到硬件驱动,因此也用不上内核和驱动,另外有内核的那是虚拟机

Docker 制作类似于虚拟机的镜像制作,即按照公司的实际业务务求将需要安装的软件、相关配置等基础环境配置完成,然后将其做成镜像,最后再批量从镜像批量生产实例,这样可以极大的简化相同环境的部署工作
Docker 的镜像制作分为手动制作和自动制作(基于 DockerFile)

手动制作nginx 镜像(不建议)

下载镜像并初始化系统
基于某个基础镜像之上重新制作,因此需要先有一个基础镜像,本次使用官方提供的 centos 镜像为基础:

[root@docker-server1 ~]# docker pull centos
[root@docker-server1 ~]# docker run -it /centos /bin/bash 
[root@37220e5c8410 /]# yum install wget -y
[root@37220e5c8410 /]# cd /etc/yum.repos.d/

	#更改 yum 源
[root@37220e5c8410 yum.repos.d]# rm -rf ./*
[root@37220e5c8410 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo 
http://mirrors.aliyun.com/repo/Centos-7.repo

[root@37220e5c8410 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo 
http://mirrors.aliyun.com/repo/epel-7.repo

yum 安装并配置 nginx

#yum 安装 nginx
[root@37220e5c8410 yum.repos.d]# yum install nginx –y 
	
	#安装常用命令
[root@37220e5c8410 yum.repos.d]# yum install -y vim wget pcre pcre-devel zlib \
zlib-devel openssl openssl-devel iproute net-tools iotop

关闭 nginx 后台运行

#关闭 nginx 后台运行
[root@37220e5c8410 yum.repos.d]# vim /etc/nginx/nginx.conf 
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
daemon off; #关闭后台运行

自定义 web 页面

[root@37220e5c8410 yum.repos.d]# vim /usr/share/nginx/html/index.html
[root@37220e5c8410 yum.repos.d]# cat /usr/share/nginx/html/index.html 
Docker Yum Nginx #自定义 web 界面

提交为镜像
在宿主机基于容器 ID 提交为镜像
另一个窗口,不能关闭上一个窗口

-a指定邮箱
     -m 备注
     -c 指定原生的docker指令
[root@docker-server1 ~]# docker commit -m "nginx image" f5f8c13d0f9f entos-nginx:v1

体积小的基础镜像 体积小的基础镜像图片_tomcat

带 tag 的镜像提交
提交的时候标记 tag 号: #标记 tag 号,生产当中比较长用,后期可以根据 tag 标记启动不同版本启动 image启动

[root@docker-server1 ~]# docker commit -m "nginx image" f5f8c13d0f9f centos-nginx:v1

从自己镜像启动容器

[root@docker-server1 ~]# docker run -d -p 80:80 --name my-centos-nginx jack/centos-nginx /usr/sbin/nginx
ce4ee8732a0c4c6a10b85f5463396b27ba3ed120b27f2f19670fdff3bf5cdb62

访问测试

体积小的基础镜像 体积小的基础镜像图片_tomcat_02

DockerFile 制作nginx 镜像(建议)

DockerFile 可以说是一种可以被 Docker 程序解释的脚本,DockerFile 是由一条条的命令组成的,每条命令对应 linux 下面的一条命令,Docker 程序将这些DockerFile 指令再翻译成真正的 linux 命令,其有自己的书写方式和支持的命令,Docker 程序读取 DockerFile 并根据指令生成 Docker 镜像,相比手动制作镜像的方式,DockerFile 更能直观的展示镜像是怎么产生的,有了 DockerFile,当后期有额外的需求时,只要在之前的 DockerFile 添加或者修改响应的命令即可重新生成新的 Docke 镜像,避免了重复手动制作镜像的麻烦

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_03


下载镜像并初始化系统

docker pull centos

docker run -it /centos /bin/bash 

cd /opt/ #创建目录环境

mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv

目录结构按照业务类型或系统类型等方式划分,方便后期镜像比较多的时候进行分类

cd dockerfile/web/nginx/

pwd
/opt/dockerfile/web/nginx

编写 Dockerfile
vim ./Dockerfile #生成的镜像的时候会在执行命
令的当前目录查找 Dockerfile 文件,所以名称不可写错,而且 D 必须大写

vim  Dockerfile
#My Dockerfile
	"#"为注释

	#第一行先定义基础镜像,后面的本地有效的镜像名,
	如果本地没有会从远程仓库下载,第一行很重要
	#FROM 是父镜像
FROM centos 
	#镜像维护者的信息
MAINTAINER qcq 

#USER #容器运行时的用户名和 UID

#WORKDIR /a #当前工作目录
#WORKDIR b #指定工作目录,最终为/a/b

#VOLUME ["/dir_1", "/dir_2" ..] 设置容器挂载主机目录

	#容器环境变量
ENV HOST 192.168.1.120

	# RUN 命令也会使用这面指定的用户执行
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
		#自动解压压缩包
			#包文件导入
	ADD nginx-1.10.3.tar.gz /usr/local/src/ 
	RUN cd /usr/local/src/nginx-1.10.3 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
	RUN cd /usr/local/nginx/
		#将配置好的文件导入
	ADD nginx.conf /usr/local/nginx/conf/nginx.conf
	RUN useradd nginx -s /sbin/nologin

RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "test nginx page" > /usr/local/nginx/html/index.html

EXPOSE 80 443 #向外开放的端口

	#运行的命令,每个 Dockerfile 只能有一条,如果有多条则只有最后一条被执行
CMD ["nginx"]

Dockerfile 构建的镜像里面的 CMD 命令,即指定的命令优先级更高,Dockerfile 的优先级较低一些

准备源码包与配置文件

#配置文件关闭后台运行
cp /usr/local/nginx/conf/nginx.conf .
	 #nginx 源码包
cp /usr/local/src/nginx-1.10.3.tar.gz .

执行镜像构建

如果Dockerfile有改变重新构建就可以

# 最后面是在那个目录下
docker build -it jack/nginx-1.10.3:v1 /opt/dockerfile/web/nginx/

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_04


开始构建

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_05


查看是否生成本地镜像

docker images

从镜像启动容器

docker run -d -p 80:80 --name yum-nginx nginx:v2 /usr/sbin/nginx
	#只是测试一下
docker run -it --rm -p 80:80 --name yum-nginx nginx:v2 bash

体积小的基础镜像 体积小的基础镜像图片_tomcat_06

手动制作编译版本 nginx 镜像(不建议)

过程为在 centos 基础镜像之上手动编译安装 nginx,然后再提交为镜像。

下载镜像并初始化系统

docker pull centos
docker run -it /centos /bin/bash 、

[root@86a48908bb97 /]# yum install wget -y
[root@86a48908bb97 /]# cd /etc/yum.repos.d/
	#更改 yum 源
[root@86a48908bb97 yum.repos.d]# rm -rf ./* 
[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo

[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo

编译安装 nginx

#安装基础包
[root@86a48908bb97 yum.repos.d]# yum install -y vim wget tree lrzsz gcc gcc-c++ \
automake pcre pcre-devel zlib zlib-devel openssl \
openssl-devel iproute net-tools iotop 

[root@86a48908bb97 yum.repos.d]# cd /usr/local/src/
[root@86a48908bb97 src]# wget http://nginx.org/download/nginx-1.10.3.tar.gz
[root@86a48908bb97 src]# tar xvf nginx-1.10.3.tar.gz
[root@86a48908bb97 src]# cd nginx-1.10.3
[root@86a48908bb97 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --withhttp_sub_module
[root@86a48908bb97 nginx-1.10.3]# make && make install
[root@86a48908bb97 nginx-1.10.3]# cd /usr/local/nginx/

关闭 nginx 后台运行

[root@86a48908bb97 nginx]# vim conf/nginx.conf
user nginx;
worker_processes auto;
daemon off;
	#创建软连
[root@86a48908bb97 nginx]# ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx

创建用户及授权

[root@86a48908bb97 nginx]# useradd nginx -s /sbin/nologin
[root@86a48908bb97 nginx]# chown nginx.nginx /usr/local/nginx/ -R

自定义 web 界面

[root@86a48908bb97 nginx]# echo "My Nginx Test Page" > 
/usr/local/nginx/html/index.html

提交为镜像:

[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97 jack/nginxtest-image
sha256:fce6e69410e58b8e508c7ffd2c5ff91e59a1144847613f691fa5e80bb68efbfa


[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97 jack/nginx-test-image:v1
sha256:474cad22f28b1e6b17898d87f040dc8d1f3882e2f4425c5f21599849a3d3c6a2

从自己的镜像启动容器

[root@docker-server1 ~]# docker run -d -p 80:80 --name my-centos-nginx 
jack/nginx-test-image:v1 /usr/sbin/nginx
8042aedec1d6412a79ac226c9289305087fc062b0087955a3a0a609c891e1122

访问测试
查看 Nginx 访问日志:在容器当中

装数据库

docker run -it -p 3306:3306 -d  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.34

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_07


在另一个窗口打开在另一个机器上安装客户端

体积小的基础镜像 体积小的基础镜像图片_tomcat_08


体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_09

二. 构建基础镜像:基础的命令等

作用:用于制作指定镜像前的操作
也就是会将这个镜像提交为一个base基础镜像 制作其他镜像以这个镜像为基础

缺点:如果给最上面的镜像加东西

就得把下面所有的镜像重新构建build

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_03

1. 基础镜像

vim /opt/centos/Dockerfile
FROM centos

RUN yum install  vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel zip unzip zlib-devel  net-tools lrzsz tree  telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute  -y

RUN useradd nginx -u 1101 && useradd tomcat -u 1102
  #修改 时区
RUN rm -rf /etc/localtime &&  ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

构建镜像

在本地
docker build -t centos-base:v1 .

构建镜像---->脚本

体积小的基础镜像 体积小的基础镜像图片_tomcat_11


执行bash

最后测试:主要是命令—时区

docker  run -it --rm centos-base:v1 bash

2. 构建jdk镜像

cd /opt/web/jdk

	上传 jdk 二进制包
rz

[root@ jdk]#vim Dockerfile 
	#父镜像为centos-base:v1
FROM centos-base:v1
	该文件必须在本目录下
ADD jdk-8u211-linux-x64.tar.gz /usr/local/src  
RUN ln -sv /usr/local/src/jdk1.8.0_211 /usr/local/jdk
	该文件必须在本目录下
ADD profile /etc/profile                                                                                                                       
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin

通过脚本构建

[root@docker-server1 jdk]# cat  
#!/bin/bash
docker build -t jdk-base:v1 .

最后测试

docker  run -it --rm jdk-base:v1 bash

体积小的基础镜像 体积小的基础镜像图片_docker_12

将镜像上传到 harbor

[root@docker-server1 jdk]# docker push 192.168.10.205/centos/centos-7.2.1511-
jdk1.7.0.79

镜像仓库验证

从其他 docker 客户端下载镜像并启动 JDK 容器: #启动的时候本地没有镜像,会从仓库下载,然后从镜像启动容器

体积小的基础镜像 体积小的基础镜像图片_nginx_13

3. 构建 tomcat Base 镜像

编辑 Dockerfile

[root@docker-server1 tomcat8-base]# pwd
/opt/dockerfile/system/centos/tomcat8-base
[root@docker-server1 tomcat8-base]# cat Dockerfile 
#Tomcat Base Image
FROM centos-7.5-jdk:v1

ADD apache-tomcat-8.0.49.tar.gz /apps 
RUN ln -sv /apps/apache-tomcat-8.0.49 /apps/tomcat && mkdir -p /data/tomcat/webapps

上传 tomcat 压缩包

[root@docker-server1 tomcat8-base]# ll apache-tomcat-8.0.49.tar.gz 
-rw-r--r-- 1 root root 9413703 Jul 2 10:06 apache-tomcat-8.0.49.tar.gz

通过脚本构建 tomcat 基础镜像

[root@docker-server1 tomcat8-base]# cat  
#!/bin/bash
docker build -t tomcat-base:v1 .

执行构建

体积小的基础镜像 体积小的基础镜像图片_docker_14


测试:端口映射

docker  run -it --rm -p 8080:8080 tomcat-base:v1 bash

体积小的基础镜像 体积小的基础镜像图片_tomcat_15

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_16


体积小的基础镜像 体积小的基础镜像图片_nginx_17

tomcat构建业务镜像 1

创建 tomcat-app1 和 tomcat-app2 两个目录,代表不同的两个基于 tomcat 的业务

准备 Dockerfile

[root@docker-server1 tomcat-app1]# pwd
/opt/dockerfile/system/centos/tomcat-app1

[root@docker-server1 tomcat-app1]# cat Dockerfile 
#Tomcat Web Image
FROM tomcat-base:v1 

ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
		#将数据与配置分开写
RUN mkdir /data/tomcat/webapps/myapp/

ADD myapp/* /data/tomcat/webapps/myapp/

ADD server.xml  /apps/tomcat/conf
	#增加权限
RUN chown -R tomcat.tomcat /apps/tomcat/ /apps/apache-tomcat-8.5.42/  /data/tomcat/

CMD ["/apps/tomcat/bin/run_tomcat.sh"]

EXPOSE 8080 8009

需要修改server.xml文件

也就是修改<Host目录
	# 前提是自己配置好s
ADD server.xml /apps/tomcat/conf

体积小的基础镜像 体积小的基础镜像图片_nginx_18

准备自定义 myapp 页面

mkdir myapp
echo "Tomcat Web Page1" > myapp/index.html

cat myapp/index.html 
Tomcat Web Page1

准备容器启动执行脚本

[root@docker-server1 tomcat-app1]# cat run_tomcat.sh 
#!/bin/bash
echo "1.1.1.1 " >> /etc/hosts
echo "nameserver 223.5.5.5" > /etc/resolv.conf
/apps/tomcat/bin/ start
su - tomcat -c "tail -f /etc/hosts"

chmod +x run_tomcat.sh

准备构建脚本:

[root@docker-server1 tomcat-app1]# cat  
#!/bin/bash
docker build -t tomcat-web:app1 .

执行构建

体积小的基础镜像 体积小的基础镜像图片_tomcat_19


从镜像启动容器测试: 不需要加bash

[root@docker-server1 tomcat-app1]# docker run -it -d -p 8888:8080 tomcat-web:app1

访问测试

体积小的基础镜像 体积小的基础镜像图片_nginx_20

tomcat 构建业务镜像 2

准备 Dockerfile

[root@docker-server1 tomcat-app2]# pwd
/opt/dockerfile/system/centos/tomcat-app2
[root@docker-server1 tomcat-app2]# cat Dockerfile 
#Tomcat Web2 Image
FROM tomcat-base:v1
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD myapp/* /apps/tomcat/webapps/myapp/
RUN chown www.www /apps/ -R
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
EXPOSE 8080 8009

准备自定义页面

[root@docker-server1 tomcat-app2]# mkdir myapp
[root@docker-server1 tomcat-app2]# echo "Tomcat Web Page2" > myapp/index.html
[root@docker-server1 tomcat-app2]# cat myapp/index.html 
Tomcat Web Page2

准备容器启动脚本

[root@docker-server1 tomcat-app2]# cat run_tomcat.sh 
#!/bin/bash
echo "1.1.1.1 " >> /etc/hosts
echo "nameserver 223.5.5.5" > /etc/resolv.conf
su - www -c "/apps/tomcat/bin/ start"
su - www -c "tail -f /etc/hosts"

准备构建脚本

[root@docker-server1 tomcat-app2]# cat  
#!/bin/bash
docker build -t tomcat-web:app2 .

执行构建:

体积小的基础镜像 体积小的基础镜像图片_docker_21


从镜像启动容器

[root@docker-server1 tomcat-app2]# docker run -it -d -p 8889:8080 tomcat-web:app2

访问测试

简单方法直接复制

cd /opt/dockerfile/web/tomcat/
mkdir tomcat-app2/
cp tomcat-app1/* tomcat-app2/ -pv
cd tomcat-app2/
vim myapp/index.html 
Tomcat Web Page2
cat tomcat-app2/
#!/bin/bash
docker build -t tomcat-app2-base:v1 .
docker run -it -d -p 8889:8080 tomcat-app2-base:v1
如果失败 给后面加一个 bash

三. haproxy 镜像

前提准备两个页面

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_22

准备 Dockerfile

[root@docker-server1 haproxy]# pwd
/opt/dockerfile/system/centos/haproxy
[root@docker-server1 haproxy]# cat Dockerfile 
FROM centos-base:v1                                                                                                                            

RUN yum install make -y

ADD haproxy-1.8.17.tar.gz /usr/local/src

RUN cd /usr/local/src/haproxy-1.8.17 && make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && cp haproxy /usr/sbin/ && mkdir /usr/local/haproxy/run 

ADD haproxy.cfg /etc/haproxy/

ADD run_haproxy.sh /usr/bin

EXPOSE 80 9999

CMD ["/usr/bin/run_haproxy.sh"]

准备 haproxy 源码文件:

准备 haproxy 配置文件

[root@docker-server1 haproxy]# cat haproxy.cfg 
global
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
#打开这项功能
stats uri /haproxy-status
stats auth haadmin:123456

listen web_port
bind 0.0.0.0:80
mode http
log global
balance roundrobin
server web1 192.168.100.101:8888 check inter 3000 fall 2 rise 5
server web2 192.168.100.101:8889 check inter 3000 fall 2 rise 5

运行脚本

cat run_haproxy.sh 
#!/bin/bash
haproxy -f /etc/haproxy/haproxy.cfg
tail -f /etc/hosts

chmod +x run_haproxy.sh

准备构建脚本

[root@docker-server1 haproxy]# cat  
#!/bin/bash
docker build -t centos-haproxy-base:7.5-1.8.12 .

执行构建 haproxy 镜像
从镜像启动容器:

[root@docker-server1 haproxy]# docker run -it -d -p80:80 -p9999:9999 centos-haproxy-base:7.5-1.8.12

脚本如果不成功: 启动
haproxy  -f /etc/haproxy/haproxy.cfg

web 访问验证

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_23

基于官方apline基础镜像制作

体积小的基础镜像 体积小的基础镜像图片_nginx_24


体积小的基础镜像 体积小的基础镜像图片_docker_25

基于官方Ubuntu基础镜像制作

体积小的基础镜像 体积小的基础镜像图片_docker_26

四. 实现动静分离

体积小的基础镜像 体积小的基础镜像图片_docker_27

首先在本机实现tomcat镜像
并且在web界面访问成功
然后通过镜像打包

docker save tomcat-app1:v1 > /opt/tomcat-app1.tar.gz
docker save tomcat-app2:v1 > /opt/tomcat-app2.tar.gz

将镜像分别拷贝到101和102

scp

然后在主机101和102
分别导入镜像

在101
docker load -i /opt/tomcat-app1.tar.gz

	在102
docker load -i /opt/tomcat-app2.tar.gz

在100的haproxy配置后端两个tomcat的地址

最后测试

切记里面的iptables规则

一般需要备份
iptables-restore < iptables-rule.txt

五. 本地镜像上传至官方 docker 仓库

1. 阿里云

http://cr.console.aliyun.com

  1. 准备账户
    登录到 docker hub 创建官网创建账户,登录后点击 settings 完善账户信息

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_28


体积小的基础镜像 体积小的基础镜像图片_tomcat_29


然后在管理中看具体操作

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_30

登陆

体积小的基础镜像 体积小的基础镜像图片_docker_31


打标签

体积小的基础镜像 体积小的基础镜像图片_docker_32


上传

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_33


体积小的基础镜像 体积小的基础镜像图片_tomcat_34

下载

体积小的基础镜像 体积小的基础镜像图片_nginx_35

2.docker hub

https:///

在虚拟机使用自己的账号登录

docker login https:///

体积小的基础镜像 体积小的基础镜像图片_nginx_36


体积小的基础镜像 体积小的基础镜像图片_nginx_37

查看认证信息

登录成功之后会在当前目录生成一个隐藏文件用于保存登录认证信息

给镜像做 tag 并开始上传

docker images #查看镜像 ID
#为镜像做标记

docker tag 678e2f074b0d /zhangshijie/centos-nginx

上传至仓库

docker login #默认即登录到 docker 官方网站

docker push /zhangshijie/centos-nginx

体积小的基础镜像 体积小的基础镜像图片_docker_38

下载

体积小的基础镜像 体积小的基础镜像图片_体积小的基础镜像_39

本地hub仓库(建议)