devops docker笔记

docker

 

 

 

 

docker能干啥? 

解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术;

 

 

 

 

 

 

 

 

 CentOS6安装docker

 docker-ce 是社区版本,不收费;常用;

 

 centos7配置文件如上: /etc/docker/daemon.json

CentOS7 虚拟机配置ip ;  ip addr

  https://jingyan.baidu.com/article/ac6a9a5eb188fc6b643eac11.html

dev.aliyun.com      我的用户名 noman_hw  密码 我的常用密码

 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

我的加速器地址:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d5kixxee.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

 docker run hello-world

hello-world:latest    latest是标签;

 

 

 帮助命令:

docker version
docker info
docker -help
docker --help

 docker 镜像命令

[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
[root@192 ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
[root@192 ~]# docker images -q
feb5d9fea6a5
[root@192 ~]# docker images -qa
feb5d9fea6a5

docker images --digests

docker images --no-trunc

[root@192 ~]# docker search tomcat                    结果中的OFFICIAL表示官方的;

与dockerhub 的镜像相同;  https://registry.hub.docker.com/search?q=tomcat&type=image

过滤:

[root@192 ~]# docker search tomcat -f stars=30 --no-trunc      标星数超过30的镜像

[root@192 ~]# docker pull tomcat        
Using default tag: latest   不加标签默认是最新版(:tag)

docker rmi hello-world

docker rmi -f hello-world

docker rmi -f nginx hello-world

全部删除:

docker rmi -f $(docker images -qa)

-----------------容器

准备docker 里面跑centos

[root@192 ~]# docker pull centos

新建并启动容器:

[root@192 ~]# docker run -it 5d0da3dc9764

[root@4308cd6731e2 /]# pwd
/

[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4308cd6731e2 5d0da3dc9764 "/bin/bash" 2 minutes ago Up 2 minutes optimistic_napier

exit   

[root@192 ~]# docker run -it --name mycentos01 centos

docker 容器命令:
docker ps docker ps -l docker ps -a docker ps -n 3 docker ps -q docker ps -lq history | grep docker docker run -it --name mycentos01 centos docker ps -n a docker ps -n 2 docker start 4308cd6731e2 docker restart 4308cd6731e2 docker ps docker stop 06c59a05c6f3 docker ps docker kill 4308cd6731e2 docker ps -l docker ps -n 2 docker rm 4308cd6731e2 docker ps -n 2

 

docker run -d centos
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
docker logs -t -f c4af4a6e
docker logs -t -f --tail 3 c4af4a6e
docker top c4af4a6e86df
docker inspect c4af4a6e86df
docker kill c4af4a6e86df
docker run -it centos
docker run -it centos /bin/bash
docker ps
docker attach 588240ca6945
docker exec -t 4e0b0cb555bf ls -l /tmp
docker exec -t 4e0b0cb555bf ls -l /bin/bash
docker exec -t 4e0b0cb555bf /bin/bash
docker cp 588240ca6945:/tmp/ks-script-x6ei4wuu /root

 

 

 

 

 

 

 

 

 

 

 

docker 启动tomcat 出现404问题,解决方法:

https://blog.csdn.net/bigestt/article/details/106711195/

tomcat 为6666时,chrome浏览器报:ERR_UNSAFE_PORT  ssh browser sftp  ; 修改为其他端口即可;

docker run -it -p 8888:8080 tomcat
docker commit -a="dyx" -m="tomcat with webapps files" c4a5afaff331 aiguigu/mytomcat1.2                aiguigu是命名空间
docker run -d -p 7788:8080 aiguigu/mytomcat1.2

 

 

docker run -it -v /myDataVolume:/dataVolumeContainer centos
docker ps -n 3
docker start cbe223e50884
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos        只可以宿主机修改传给容器,容器只能查看,不能修改

 

 

 

 

  

cd /mydocker
[root@192 mydocker]# cat Dockerfile

# volume test
FROM centos
VOLUME ["/dataVolumenContainer1","/dataVolumenConainer2"]
CMD echo "finished,-----success1"
CMD /bin/bash


执行
docker build -f /mydocker/Dockerfile -t zzyy/centos .   注意【.】

docker images zzyy/centos
docker run -it zzyy/centos
默认挂载到如下:
/var/lib/docker/volumes/e2d697c2c059fac70edb4d2709051bf54575344bc060b9698a441681dbdb564c/_data

 

 

 

 

docker run -it --name dc01 zzyy/centos
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker ps
docker run -it --name dc03 --volumes-from dc01 zzyy/centos
docker ps
docker attach dc01
docker rm -f dc01
docker ps
docker attach dc02
docker attach dc03

Dockerfile

 

 官网centos镜像Dockerfile示例

Dockerfile的解析过程

 

 

CMD 命令会被最后的CMD覆盖

ENTRYPOINT 可以多行,相当于命令追加

 

 

 

 

  

 案例

 

 

 

 

Dockerfile2文件

FROM centos
MAINTAINER zzyy<zzyy167@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "success---------------ok"
CMD /bin/bash



======linux操作


docker images
docker rmi mycentos1.3
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .

docker images
docker images mycentos

docker history 1dc576e5bdf7

docker run -it mycentos:1.3

vi Dockerfile3
===========
FROM centos
RUN yum install -y curl
CMD ["curl","-s","https://ip.cn"]

docker build -f /mydocker/Dockerfile3 -t myip .
docker run -it myip
# 想要-i 显示请求头,则需要完整命令
curl -s https://ip.cn -i
docker run myip curl -s https://ip.cn -i
docker run myip -i  不能生效


vi Dockerfile4
=============
FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","https://ip.cn"]

docker build -f /mydocker/Dockerfile4 -t myip2 .
docker run myip2
docker run myip2 -i  能生效
clear
history

vi Dockerfile4
=============
FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","https://ip.cn"]
ONBUILD echo "father is onbuild"

docker build -f /mydocker/Dockerfile4 -t myip_father .

[root@192 mydocker]# cat Dockerfile5
FROM myip_father
RUN yum install -y curl
CMD ["curl","-s","https://ip.cn"]

docker build -f /mydocker/Dockerfile5 -t myip_son .

 

mkdir -p /zzyyuse/mydockerfile/tomcat9/
cd /zzyyuse/mydockerfile/tomcat9/

[root@192 tomcat9]# ll
total 192612
-rw-r--r--. 1 root root  11582777 Dec  2 09:34 apache-tomcat-9.0.56.tar.gz
-rw-r--r--. 1 root root         0 Jan  2 11:42 c.txt
-rw-r--r--. 1 root root      1043 Jan  2 11:55 Dockerfile
-rw-r--r--. 1 root root 185646832 Jan  2 11:51 jdk-8u181-linux-x64.tar.gz

vi Dockerfile
FROM         centos
MAINTAINER    zzyy<zzyybs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.56.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.56
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.56
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.56/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.56/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.56/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.56/bin/logs/catalina.out


docker build -t zzyytomcat9 .
docker images

docker run -d -p 9080:8080 --name myt9  \
 -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.56/webapps/test \
 -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.56/logs \
 --privileged=true zzyytomcat9docker ps

docker ps
docker exec d891d47a513f ls -l
docker exec d891d47a513f java -version

  

在上例子tomcat9 test文件夹下发布服务参考:

https://my.oschina.net/u/4395639/blog/4073219 

cd /zzyyuse/mydockerfile/tomcat9/test
mkdir WEB-INF
vi WEB-INF/web.xml
vi a.jsp
docker exec d891d47a513f ls -l /usr/local/apache-tomcat-9.0.56/webapps/test
docker ps
docker restart d891d47a513f
vi a.jsp
cd /zzyyuse/mydockerfile/tomcat9/tomcat9logs/
http://192.168.79.132:9080/test/a.jsp
tail -f catalina.out

 

 

 

docker 启动mysql 
docker pull mysql:5.6 docker images docker run -p 12345:3306 --name mysql docker run -p 12345:3306 --name mysql \ -v /zzyyuse/mysql/conf:/etc/mysql/conf.d \ -v /zzyyuse/mysql/logs:/logs \ -v /zzyyuse/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.6 数据备份 [root@192 tomcat9logs]# docker exec 1e65a8d94e63 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /zzyyuse/all-databases.sql Warning: Using a password on the command line interface can be insecure. [root@192 tomcat9logs]# ll /zzyyuse/ total 3328 -rw-r--r--. 1 root root 3404304 Jan 2 12:46 all-databases.sql drwxr-xr-x. 3 root root 21 Jan 2 11:41 mydockerfile drwxr-xr-x. 5 root root 42 Jan 2 12:40 mysql

 

docker pull redis:3.2

docker run -p 6379:6379  \
    -v /zzyyuse/myredis/data:/data \
    -v /zzyyuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
    -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf \
	--appendonly yes
	
	--appendonly yes : 表示开启redis AOF,持久化到文件中

ll /zzyyuse/myredis/conf/redis.conf
docker exec f4af5b1372  ls -l /usr/local/etc/redis/redis.conf
vi /zzyyuse/myredis/conf/redis.conf/redis.conf      # 编写配置文件


docker exec -it f4af5b13727b redis-cli        -> set k1 v1   -> SHUTDOWN

cd /zzyyuse/myredis/data # 查看持久化数据
cat appendonly.aof


-------------redis配置文件含义
# 默认redis不是以后台进程的方式启动,如果需要在后台运行,需要将这个值设置成yes
# 以后台方式启动的时候,redis会写入默认的进程文件/var/run/redis.pid
daemonize yes
 
# redis启动的进程路径
pidfile/var/run/redis.pid
 
# 启动进程端口号,这里最好不要使用默认的6379,容易被攻击
port 7179
 
tcp-backlog 511
 
# 配置redis监听到的ip地址,可以是一个也可以多个
# bind 127.0.0.1 192.168.79.132
 
# redis的sock路径
unixsocket/tmp/redis.sock
unixsocketperm 755
 
# 超时时间
timeout 0
 
#指定TCP连接是否为长连接,"侦探"信号有server端维护。默认为0.表示禁用
tcp-keepalive 0
 
# 日志级别,log 等级分为4 级,debug,verbose,notice, 和warning。生产环境下一般开启notice
loglevel notice
 
# 日志文件地址
logfile"/usr/local/redis/logs/redis.log"
 
 
 
# 设置数据库的个数,可以使用SELECT 命令来切换数据库。默认使用的数据库是0号库。默认16个库
databases 16
 
#RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件:
save 900 1    # 900秒内有至少1个键被更改则进行快照
save 300 10   # 300秒内有至少10个键被更改则进行快照
save 60 10000  # 60秒内有至少10000个键被更改则进行快照
 
# 持久化数据存储目录
dir/usr/local/redis/data
 
 
#当持久化出现错误时,是否依然继续进行工作,是否终止所有的客户端write请求。默认设置"yes"表示终止,一旦snapshot数据保存故障,那么此server为只读服务。如果为"no",那么此次snapshot将失败,但下一次snapshot不会受到影响,不过如果出现故障,数据只能恢复到"最近一个成功点"
stop-writes-on-bgsave-errorno
 
#在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大,有利于存储/备份/传输/数据恢复
rdbcompression yes
 
#checksum文件检测,读取写入的时候rdb文件checksum,会损失一些性能
rdbchecksum yes
 
#镜像备份文件的文件名,默认为dump.rdb
dbfilename dump.rdb
 
#当主master服务器挂机或主从复制在进行时,是否依然可以允许客户访问可能过期的数据。在"yes"情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期;在"no"情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知"error"
slave-serve-stale-datayes
 
# 如果是slave库,只允许只读,不允许修改
slave-read-only yes
 
 
#slave与master的连接,是否禁用TCPnodelay选项。"yes"表示禁用,那么socket通讯中数据将会以packet方式发送(packet大小受到socket buffer限制)。可以提高socket通讯的效率(tcp交互次数),但是小数据将会被buffer,不会被立即发送,对于接受者可能存在延迟。"no"表示开启tcp nodelay选项,任何数据都会被立即发送,及时性较好,但是效率较低,建议设为no,在高并发或者主从有大量操作的情况下,设置为yes
repl-disable-tcp-nodelayno
 
 
#适用Sentinel模块(unstable,M-S集群管理和监控),需要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举
slave-priority 100
 
#限制同时连接的客户数量。当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到error 信息。默认为10000,要考虑系统文件描述符限制,不宜过大,浪费文件描述符,具体多少根据具体情况而定
maxclients 10000
 
#redis-cache所能使用的最大内存(bytes),默认为0,表示"无限制",最终由OS物理内存大小决定(如果物理内存不足,有可能会使用swap)。此值尽量不要超过机器的物理内存尺寸,从性能和实施的角度考虑,可以为物理内存3/4。此配置需要和"maxmemory-policy"配合使用,当redis中内存数据达到maxmemory时,触发"清除策略"。在"内存不足"时,任何write操作(比如set,lpush等)都会触发"清除策略"的执行。在实际环境中,建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/slave中"maxmemory""policy"配置一致。
maxmemory 0
 
 
#内存过期策略,内存不足"时,数据清除策略,默认为"volatile-lru"。
#volatile-lru  ->对"过期集合"中的数据采取LRU(近期最少使用)算法.如果对key使用"expire"指令指定了过期时间,那么此key将会被添加到"过期集合"中。将已经过期/LRU的数据优先移除.如果"过期集合"中全部移除仍不能满足内存需求,将OOM.
#allkeys-lru ->对所有的数据,采用LRU算法
#volatile-random ->对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止. 如果如果"过期集合"中全部移除全部移除仍不能满足,将OOM
#allkeys-random ->对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止
#volatile-ttl ->对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据.
#noeviction ->不做任何干扰操作,直接返回OOM异常
#另外,如果数据的过期不会对"应用系统"带来异常,且系统中write操作比较密集,建议采取"allkeys-lru"
maxmemory-policyvolatile-lru
 
# 默认值5,上面LRU和最小TTL策略并非严谨的策略,而是大约估算的方式,因此可以选择取样值以便检查
maxmemory-samples 5
 
#默认情况下,redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。所以redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。如果不经常进行数据迁移操作,推荐生产环境下的做法为关闭镜像,开启appendonly.aof,同时可以选择在访问较少的时间每天对appendonly.aof 进行重写一次。
#另外,对master机器,主要负责写,建议使用AOF,对于slave,主要负责读,挑选出1-2台开启AOF,其余的建议关闭
appendonly yes
 
#aof文件名字,默认为appendonly.aof
appendfilename"appendonly.aof"
 
# 设置对appendonly.aof 文件进行同步的频率。always表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。no不主动fsync,由OS自己来完成。这个需要根据实际业务场景进行配置
appendfsync everysec
 
# 在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被立即同步
no-appendfsync-on-rewriteno
 
#当Aof log增长超过指定比例时,重写logfile,设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage100
#触发aof rewrite的最小文件尺寸
auto-aof-rewrite-min-size64mb
 
#lua脚本执行的最大时间,单位毫秒
lua-time-limit 5000
 
 
 
#慢日志记录,单位微妙,10000就是10毫秒值,如果操作时间超过此值,将会把command信息"记录"起来.(内存,非文件)。其中"操作时间"不包括网络IO开支,只包括请求达到server后进行"内存实施"的时间."0"表示记录全部操作
slowlog-log-slower-than10000
 
#"慢操作日志"保留的最大条数,"记录"将会被队列化,如果超过了此长度,旧记录将会被移除。可以通过"SLOWLOG<subcommand> args"查看慢记录的信息(SLOWLOG get 10,SLOWLOG reset)
slowlog-max-len 128
notify-keyspace-events""
 
#hash类型的数据结构在编码上可以使用ziplist和hashtable。ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样.因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。
#这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128
hash-max-ziplist-entries512
#ziplist中允许条目value值最大字节数,默认为64,建议为1024
hash-max-ziplist-value64
 
#同上
list-max-ziplist-entries512
list-max-ziplist-value64
 
#intset中允许保存的最大条目个数,如果达到阀值,intset将会被重构为hashtable
set-max-intset-entries512
 
#zset为有序集合,有2中编码类型:ziplist,skiplist。因为"排序"将会消耗额外的性能,当zset中数据较多时,将会被重构为skiplist。
zset-max-ziplist-entries128
#zset中允许条目value值最大字节数,默认为64,建议为1024
zset-max-ziplist-value64
 
 
#是否开启顶层数据结构的rehash功能,如果内存允许,请开启。rehash能够很大程度上提高K-V存取的效率
activerehashing yes
 
#客户端buffer控制。在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除。
 
#buffer控制类型包括:normal -> 普通连接;slave->与slave之间的连接;pubsub ->pub/sub类型连接,此类型的连接,往往会产生此种问题;因为pub端会密集的发布消息,但是sub端可能消费不足.指令格式:client-output-buffer-limit <class> <hard><soft><seconds>",其中hard表示buffer最大值,一旦达到阀值将立即关闭连接;soft表示"容忍值",它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也将立即关闭连接,如果超过了soft但是在seconds之后,buffer数据小于了soft,连接将会被保留.其中hard和soft都设置为0,则表示禁用buffer控制.通常hard值大于soft.
client-output-buffer-limitnormal 0 0 0
client-output-buffer-limitslave 256mb 64mb 60
client-output-buffer-limitpubsub 32mb 8mb 60
 
 
#Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。"间歇性task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于0且小于500。此值过小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。
hz 10
 
#当一个child在重写AOF文件的时候,如果aof-rewrite-incremental-fsync值为yes生效,那么这个文件会以每次32M数据的来被同步,这大量新增提交到磁盘是有用的,并且能避免高峰延迟。
aof-rewrite-incremental-fsyncyes

 

 

发布镜像到阿里云

 https://cr.console.aliyun.com/repository/cn-beijing/dyxnamespace/mycentos/details

注册、登录账号 noman_hw Noman@1949,创建仓库

https://blog.csdn.net/wchzh2015/article/details/89094798

可以选择公开(但是我没有找到阿里的dockerhub中搜索到我上传的,在我自己的账号库下有),选择本地仓库

docker commit -a zzyy -m "new mycentos1.4 with vim ,ifconfig" 80da27db49c4 mycentos:1.4
登录阿里云镜像服务后,在web页面有部分提示命令如下(定制化):

docker login --username=noman_hw registry.cn-beijing.aliyuncs.com    <--Noman@1949
docker tag 7f4e4b9acfaa registry.cn-beijing.aliyuncs.com/dyxnamespace/mycentos:1.4.1  <--对本地镜像mycentos:1.4打标签为1.4.1
docker push registry.cn-beijing.aliyuncs.com/dyxnamespace/mycentos:1.4.1

docker pull registry.cn-beijing.aliyuncs.com/dyxnamespace/mycentos:1.4.1

  

 Centos7 安装docker

https://docs.docker.com/engine/install/centos/

https://www.cnblogs.com/lyh233/p/12563537.html

 

 

  docker load 

       docker save 

https://docs.docker.com/engine/reference/commandline/save/

  

原文地址:https://www.cnblogs.com/xhzd/p/15746754.html