https://www.docker.com: docker官网 https://docs.docker.com: docker文档学习 https://hub.docker.com: docker仓库地址 E586rs:云服务登录密码
docker容器没有相应命令:(这是乌班图的下载方式) 更新源库:apt-get update 安装vim:apt-get install vim
安装docker: 一:在线yum仓库安装
-
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2.yum install -y yum-utils device-mapper-persistent-data lvm2 :安装docker必备工具
3.yum-config-manager \ :安装docker的yum源 -add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager \ 安装docker的yum源 --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repe
Step 3: 更新并安装Docker-CE
阿里云的dicker下载仓库(网上可以搜到)
4.更新yum索引:yum makecache fast 5.安装docker docker-ce docker-ce社区 ee 企业版y yum install docker-ce docker-ce-cli containerd.io
启动dockers:systemctl start docker 升级docker引擎:1.去docker官方下载对应系统的安装包 2.安装下载号的docker包:yum install -y 包的位置 卸载docker:1.yum remove docker-ce docke-ce-cli containerd.io 2.yum rm -rf 路径 有了镜像才可以下载容器
docker常用命令:
1.docker version:docker版本信息 2.docker info: 显示docker的系统信息,包括镜像和容器的数量 3.docker --help:显示帮助信息 4docker images :docker镜像显示 --all , -a 显示所有图像(默认隐藏中间图像) --digests 显示摘要 --filter , -f 根据所提供的条件进行滤波器输出 --format 使用 Go 模板打印图像 --no-trunc 不截断输出 --quiet , -q 仅显示数字 ID
5.docker search:docker搜索 --automated 废弃仅显示自动生成 --filter , -f 根据所提供的条件进行滤波器输出 --format 使用 Go 模板进行漂亮打印搜索 --limit 25 搜索结果的最大数量 --no-trunc 不截断输出 --stars , -s 废弃仅显示至少 x 星 例:focker search 服务镜像名字如(mysql) 后面在家相应的选项 6.docker pull:dicker镜像下载 --all-tags , -a 下载存储库中所有标记的图像 --disable-content-trust true 跳过图像验证 --platform 实验(守护神)API 1.32+设置平台,如果服务器是多平台功能 --quiet , -q 抑制详细输出 例:docker pull 服务名字:版本号(下载服务版本号对于的镜像) 7.docker rm:删除docker容器: --force , -f 强制删除正在运行的容器(使用 SIGKILL) --link , -l 删除指定的链接 --volumes , -v 删除与容器关联的匿名卷 例:docker rm -f $(docker ps -aq):删除所有容器 或:docker ps -a -q|xargs docker rm 例子:docker rm -f 容器ID :删除某个容器;但是正在后台运行的容器不可以删除 8.docker rmi:删除docker镜像: --force , -f 强制删除图像 --no-prune 不要删除未标记的父母 例子:删除所有:docker rmi -f $(docker images -qa):递归删除所有查出来的镜像 例:docker rmi -f id号(docker images 查出来的id号) 9.docker run :docker 运行:在容器中运行命令 --add-host 添加自定义主机到 IP 映射(主机:ip) --attach , -a 连接到 STDIN、STDOUT 或 STDERR --blkio-weight 块 IO(相对权重),介于 10 和 1000 之间,或 0 禁用(默认 0) --blkio-weight-device 块 IO 权重(相对设备重量) --cap-add 添加 Linux 功能 --cap-drop 放弃 Linux 功能 --cgroup-parent 容器的可选父 cgroup --cidfile 将容器 ID 写入文件 --cpu-count CPU 计数(仅窗口) --cpu-percent CPU 百分比(仅窗口) --cpu-period 限制 CPU CFS(完全公平的调度程序)周期 --cpu-quota 限制 CPU CFS(完全公平的调度程序)配额 --cpu-rt-period API 1.25+以微秒为单位限制 CPU 实时周期 --cpu-rt-runtime API 1.25+以微秒为单位限制 CPU 实时运行时间 --cpu-shares , -c CPU 共享(相对权重) --cpus API 1.25+CPU 数量 --cpuset-cpus 允许执行的 CPU (0-3, 0,1) --cpuset-mems 允许执行的 MEM (0-3, 0,1) --detach , -d 在后台运行容器并打印容器 ID --detach-keys 覆盖分离容器的键序列 --device 将主机设备添加到容器 --device-cgroup-rule 将规则添加到 cGroup 允许的设备列表 --device-read-bps 限制设备读取速率(字节/秒) --device-read-iops 限制设备读取速率(IO/秒) --device-write-bps 将写入速率(字节/秒)限制为设备 --device-write-iops 将写入速率(IO/秒)限制为设备 --disable-content-trust true 跳过图像验证 --dns 设置自定义 DNS 服务器 --dns-opt 设置 DNS 选项 --dns-option 设置 DNS 选项 --dns-search 设置自定义 DNS 搜索域 --domainname 容器 NIS 域名 --entrypoint 覆盖图像的默认入口点 --env , -e 设置环境变量 --env-file 在环境变量文件中读取 --expose 暴露端口或一系列端口 --gpus API 1.40+要添加到容器的 GPU 设备("全部"通过所有 GPU) --group-add 添加要加入的其他组 --health-cmd 命令运行以检查运行状况 --health-interval 运行检查之间的时间(ms=s=m=h)(默认 0s) --health-retries 报告不正常行为所需的连续故障 --health-start-period API 1.29+容器的开始周期在开始运行状况重倒数 (ms\s\m\h) (默认 0s) 之前初始化 --health-timeout 允许运行一个检查的最大时间(ms=s=m=h)(默认 0s) --help 打印用法 --hostname , -h 容器主机名 --init API 1.25+在容器内运行一个 init,该容器转发信号并收获进程 --interactive , -i 即使未连接,也保持 STDIN 打开 --io-maxbandwidth 系统驱动器的最大 IO 带宽限制(仅窗口) --io-maxiops 系统驱动器的最大 IOps 限制(仅窗口) --ip IPv4 地址(例如 172.30.100.104) --ip6 IPv6 地址(例如,2001:db8:33) --ipc 要使用的 IPC 模式 --isolation 容器隔离技术 --kernel-memory 内核内存限制 --label , -l 在容器上设置元数据 --label-file 在标签的行分隔文件中读取 --link 将链接添加到另一个容器 --link-local-ip 容器 IPv4/IPv6 链路本地地址 --log-driver 容器的日志记录驱动程序 --log-opt 日志驱动程序选项 --mac-address 容器 MAC 地址(例如 92:d0:c6:0a:29:33) --memory , -m 内存限制 --memory-reservation 内存软限制 --memory-swap 交换限制等于内存加交换:'-1',支持无限制交换 --memory-swappiness -1 调整容器内存交换(0 到 100) --mount 将文件系统装载附加到容器 --name 为容器分配名称 --net 将容器连接到网络 --net-alias 为容器添加网络范围别名 --network 将容器连接到网络 --network-alias 为容器添加网络范围别名 --no-healthcheck 禁用任何容器指定的运行状况检查 --oom-kill-disable 禁用 OOM 杀手 --oom-score-adj 调整主机的 OOM 首选项 (-1000 到 1000) --pid 要使用的 PID 命名空间 --pids-limit 调整容器皮斯限制(设置为 -1 无限制) --platform 实验(守护神)API 1.32+设置平台,如果服务器是多平台功能 --privileged 向此容器授予扩展权限 --publish , -p 将容器的端口发布到主机 --publish-all , -P(大写P) 将所有公开端口发布到随机端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 容器端口 --read-only 将容器的根文件系统装载为只读 --restart no 重新启动策略,在容器退出时应用 --rm 容器退出时自动移除容器 --runtime 用于此容器的运行时 --security-opt 安全选项 --shm-size 大小 /开发/shm --sig-proxy true 代理接收到进程的信号 --stop-signal SIGTERM 停止容器的信号 --stop-timeout API 1.25+停止容器的超时(以秒为单位) --storage-opt 容器的存储驱动程序选项 --sysctl Sysctl 选项 --tmpfs 装载 tmpfs 目录 --tty , -t 分配伪 TTY --ulimit 乌利米特选项 --user , -u 用户名或 UID(格式:<name{uid>\:<组\gid>\) --userns 要使用的用户名空间 --uts 要使用的 UTS 命名空间 --volume , -v 绑定装载卷 --volume-driver 容器的可选卷驱动程序 --volumes-from 从指定的容器中装载卷(两个或多个容器之间实现数据共享) --workdir , -w 容器内的工作目录 例:dcoker run -it 下载的容器名字如(centos) centos /bin/bash:启动并进入容器 例:docker run -d centos——后台启动centos 常见问题: 当后台启动这个容器和发现停止了 ,是因为:docker容器使用后台运行 就必须要有一个前台进程,docker发现没有应用,就会自动停止。 9.1(重要部分)——数据卷容器:(实现两个或多个容器之间的数据共享,实现热备份工作,即使其中的centos01死掉数据也会有,centos02和centos03数据也可以共享同步) 使用命令:docker run -it --volumes-from 第一步(创建一个新的容器): docker run -it --name centos01 镜像ID 第二步(新的容器centos02和centos01容器链接实现数据同步共享备份): docker run -it --name centos02 --volumes-from centos01 镜像ID 第三步(新的容器centos03和centos01,02 容器链接实现数据同步共享备份): docker run -it --name centos03 --volumes-from centos01 镜像ID
10.docker ps:列出容器:
--all , -a 显示所有容器(默认显示刚刚运行) --filter , -f 根据所提供的条件进行滤波器输出 --format 使用 Go 模板进行漂亮的打印容器 --last , -n -1 显示 n 个上次创建的容器(包括所有状态) --latest , -l 显示最新创建的容器(包括所有状态) --no-trunc 不截断输出 --quiet , -q 仅显示数字 ID --size , -s 显示文件总大小
11.容器的关闭,启动,重启:
docker start 容器ID :启动容器 --attach , -a 连接STDOUT/STDER 和前进信号 --checkpoint 实验(守护神)从此检查点还原 --checkpoint-dir 实验(守护神)使用自定义检查点存储目录 --detach-keys 覆盖分离容器的键序列 --interactive , -i 附加容器的 STDIN docker restart 容器ID :重启容器 --time , -t 10 秒等待停止,然后杀死容器 docker stop 容器ID :停止当前正在运行的容器 --time , -t 10 秒等待停止, 然后杀死它 docker kill 容器ID :强制停止当前容器 --signal , -s KILL 发送到容器的信号
12.docker logs:docker日志:查看容器日志信息
--details 显示提供给日志的额外详细信息 --follow , -f 跟随日志输出 --since 显示自时间戳(例如 2013-01-02T13:23:37)或相对(例如 42m 42 分钟)以来的日志 --tail all 从日志末尾显示的行数 --timestamps , -t 显示时间戳 --until API 1.35+在时间戳(例如 2013-01-02T13:23:37)或相对(例如 42m 42 分钟)之前显示日志 例:docker -logs -tf --tail 10 容器ID:显示对应的容器ID后10行的日志内容
13.docker top 容器ID:查看容器中进程信息
例子:docker top 容器ID
14.docker inspect 容器ID:查看容器的元数据
--format , -f 使用给定的 Go 模板格式化输出 --size , -s 如果类型是容器,则显示总文件大小 --type 返回指定类型的 JSON 例子:docker inspect 容器ID
15.进入当前正在运行的容器(通常容器都是使用后台方式运行的)(是起一个备份配置文件数据的作用)
命令: 方法一:docker exec -it 后台运行的容器ID /bin/bash:进入容器开启一个新的终端 方法二:docker attach 容器ID:进入容器正在执行的终端,不会启动新的进程 ctrl+p+q:推出当前容器不关闭
16.从容器内拷贝文件到主机上:(手动复制 只起一个备份作用)
命令: docker cp --archive , -a 存档模式(复制所有 uid/gid 信息) --follow-link , -L 始终在代码中跟随符号SRC_PATH 例子:docker cp 容器ID:容器内的绝对路径 主机上的某个绝对路径
17.docker stats :用于运行容器的实时数据流
--all , -a 显示所有容器(默认显示刚刚运行) --format 使用 Go 模板的漂亮打印图像 --no-stream 禁用流式统计,仅提取第一个结果 --no-trunc 不要截断输出 CONTAINER ID和Name 容器的ID和名称 CPU %和MEM % 主机的CPU和容器使用的内存的百分比 MEM USAGE / LIMIT 容器使用的总内存,以及允许使用的总内存量 NET I/O 容器通过其网络界面发送和接收的数据量 BLOCK I/O 容器从主机上的块式设备读取和编写的数据量 PIDs 容器创建的过程或线程数 例子:docker stats
-
docker commit :提交容器成为一个新的副本镜像
--author , -a 作者(例如,"约翰·汉尼拔·史密斯hannibal@a-team.com") --change , -c 将 Dockerfile 指令应用于创建的图像 --message , -m 提交消息 --pause , -p true 提交期间暂停容器 例子:docker commit -a="jzk" -m="x修改信息描述“ 容器ID 新的镜像名字
19.容器数据卷(容器的持久化和同步操作!容器间也可以数据共享)(可以挂在多个目录)
测试例子1:(docker run -it -v 主机目录:容器内目录) docker run -it -v /hmoe/dockermount:/hmoe centos /bin/bash (把centos容器内的/home目录挂在到主机的/home/dockermount下)
测试列子2:(mysql) docker run -d -p 3310:3306 -v /hmoe/dockermountmysql/conf:/etc/mysql/conf.d -v /hmoe/dockermountmysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:版本 (把mysq容器内的目录放到主机的目录下,-e:配置mysql环境(密码)。) # 具名和匿名挂载(匿名和具名挂载会将数据卷放到/var/lib/docker/voluem下) 1.匿名挂载:(不指定主机目录也不指定容器卷的名字,直接写容器内的目录,这种方式就是匿名挂载 匿名挂载默认挂载目录是:/var/lib/docker/voluem/容器名字是docker自己创建的/_data) 例子:docker run -d -v 容器内目录 镜像名称 2.具名挂载:(所有的docker容器内的卷,没有指定目录的情况下都是在:/var/lib/docker/volumes/自己写的卷名/_data 例子:docker run -d -v 卷名:容器内目录 镜像名称 3.指定路径挂载 {就是指定主机目录和容器内的目录实现数据的同步挂载方式为指定路径挂载(例1和例2)}(指定路径挂载的数据不会出现在voluem中)(主机的最后一条路径最后是空的) 扩展: 通过-v 容器内路径:ro,rw 改变(ro:只读/rw:读写)读写权限 docker run -d -v 卷名:容器内的路径:ro 或者 rw 镜像名称 #ro : 设置ro权限只能通过通过宿主机来操作,容器内部是无法操作的 #rw: 可读可写 9.1(重要部分)——数据卷容器:(实现两个或多个容器之间的数据共享,实现热备份工作,即使其中的centos01死掉数据也会有,centos02和centos03数据也可以共享同步,容器之间配置信息的传递,数据容器卷的生命周期一直持续到没有容器使用为止) 使用命令:docker run -it --volumes-from(需要结合dockerfile或者有挂载的容器来实现,因为在创建这些时只有其中一个挂载了本地数据才可以同步共享其他) 第一步(创建一个新的容器): docker run -it --name centos01 镜像ID 第二步(新的容器centos02和centos01容器链接实现数据同步共享 docker run -it --name centos02 --volumes-from centos01 镜像ID 第三步(新的容器centos03和centos01,02 容器链接实现数据同步共享备份): docker run -it --name centos03 --volumes-from centos01 镜像ID #一旦设置了容器权限,容器对我们挂载出了的内容就有权限限定了,而如果是只读就不可以在容器内修改数据,只能在挂载出了的数据卷或者目录来修改容器数据)
-
docker volume(docker volume容器卷的创建和查看)
1.docker volume create (创建新的卷) --driver,-d local 指定音量驱动程序名称 --label 为卷设置元数据 --name 指定音量名称 --opt,-o 设置驱动程序特定选项
2.docker volume inspect (查看卷的元数据) --format,-f 使用给定的 Go 模板格式化输出 3.docker volume ls (查看所有的volume卷(包括匿名挂载的和具名挂载的) --filter,-f 提供筛选值(例如"悬空=真实") --format 使用 Go 模板的精美打印卷 --quiet,-q 仅显示卷名称 4. docker volume rm(删除一个或多个volume卷) --force,-f 强制移除一个或多个卷 5. docker volume prune(删除所有本地未使用的卷,值没有挂载的只是创建出来了没用的) --filter 提供筛选器值(例如"标签+标签") --force,-f 不要提示确认
21.初始dockerfile(dockerfile 是用来创建docker镜像的构建文件,命令脚本!通过这个脚本可以生成一个镜像,dockerfile就是一个脚本,里面是一些命令来实现脚本对镜像和容器进行操作)
21.1docker history 镜像ID : (查看镜像的操作历史)
构建步骤: 1.编写一个dockefile 文件 2.通过 docker bulid 构建成为一个镜像 3.docker run 运行此镜像测试 4.docker push 发布镜像(可以发布到:dockersHub和阿里云镜像仓库) dockerfile构建过程(dockerfile是面向开发的) 基础知识: 1.每个保留关键字(指令)都是必须是大写字母 2.执行从上到下顺序执行 3.#表示注释 4.每个指令都会创建提交一个新的镜像层,并提交
dockerfile的指令: 1.FROM :基础镜像,就是docker images的镜像** 2.MAINTAINER : 镜像是谁写的,姓名+邮箱 3.RUN : 镜像构建的时候需要运行的命令 4.ADD : 编译镜像时复制文件到镜像中(可以用COPY 代替效果和结果一样)(ADD复制安装包的话会自动解压,COPY只是复制而不会过多操作,一般文件和文件夹) 5.WORKDIR : 镜像的工作目录 6.VOLUME : 挂载的目录 7.EXPOSE : 保留端口配置,指定对外的端口 8.CMD : 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替换 9.ENTRYPOINT : 指定这个容器启动的时候要运行的命令,可以追加命令 10.ONBUILD : 当构建一个被继承dockerfile这个时候就会运行ONBUILD的指令,出发指令 11.CP :类似ADD,将我们文件拷贝到镜像中 12.ENV : 构建的时候设置环境变量** CMD和ENYPOINT的区别: 1.如果容器是通过CMD 启动的执行的命令 在启动容器是添加参数书无效的 2.如果容器是通过ENTGRYPOINT 启动的执行的命令 在启动容器时是可以在后面追加参数的
例子:构建tomcat: 1.准备镜像文件 tomcat压缩包,jdk压缩包 2.编写dockerfile文件,官方命名Dockerfile ,build会自动寻找这个文件,就不需要-f指定了
FROM centos
MAINTAINER
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.33.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.33
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.33
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.33/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.33/bin/logs/catalina.out
3.构建镜像:docker build -f Dockerfile -t centos/tomcat .
4.启动镜像
5.访问测试
6.发布网页项目
22.docker build( 用于启动使用dockerfile脚本实现创建镜像等一系列操作)
使用方法:docker build
--add-host 添加自定义主机到 IP 映射(主机:ip) --build-arg 设置生成时间变量 --cache-from 要考虑为缓存源的图像 --cgroup-parent 容器的可选父 c 组 --compress 使用 gzip 压缩构建上下文 --cpu-period 限制 CPU CFS(完全公平的调度器)周期 --cpu-quota 限制 CPU CFS(完全公平的调度器)配额 --cpu-shares,-c CPU 股票(相对权重) --cpuset-cpus 允许执行的 CPU (0-3, 0,1) --cpuset-mems 允许执行的 MEM (0-3, 0,1) --disable-content-trust true 跳过图像验证 --file,-f 多克档案的名称(默认是"路径/多克档案")(dockerfile脚本文件的所在位置) --force-rm 始终拆下中间容器 --iidfile 将图像 ID 写入文件 --isolation 容器隔离技术 --label 为图像设置元数据 --memory,-m 内存限制 --memory-swap 交换限制等于内存加掉期:"-1",启用无限交换 --network API 1.25+在构建过程中为 RUN 说明设置联网模式 --no-cache 在构建图像时不要使用缓存 --output,-o API 1.40+输出目的地(格式:类型=本地,删除路径) --platform API 1.38+如果服务器具有多平台功能,则设置平台 --progress auto 设置进度输出类型(自动、纯、tty)。使用普通显示容器输出 --pull 始终尝试拉取图像的新版本 --quiet,-q 在成功时抑制生成输出并打印图像 ID --rm true 成功构建后拆下中间容器 --secret API 1.39+要暴露到生成的秘密文件(仅当已启用 BuildKit 时):ID=神秘,src=/本地/秘密 --security-opt 安全选项 --shm-size 大小 /开发/shm --squash 实验(戴蒙)API 1.25+将新构建的层挤压成单个新层 --ssh API 1.39+SSH 代理插座或密钥以暴露到构建(仅当已启用 BuildKit 时)(格式:默认|=id= |=键= --stream 流连接到服务器以协商构建上下文 --tag,-t 以"名称:标签"格式命名并选择标签(就是新的镜像名字和版本标识) --target 设置目标构建阶段以构建。 --ulimit 乌利米特选项
例子:docker build -f /jzk/docker/ceshi/dockerfilecentros -t jzk/centos0.1 . (执行dockerfilecentos 脚本文件,并新的镜像名字是jzk/centos0.1)(最后必须要有. 点很重要)
22.1: docker bulider(build的管理命令,创建——build——删除) 3.删除生成缓存: 使用方法:docker builder prune --all,-a 删除所有未使用的生成缓存,而不仅仅是悬垂缓存 --filter 提供筛选值(例如"直到+24h") --force,-f 不要提示确认 --keep-storage 用于缓存的磁盘空间量
23.发布自己镜像
1.进入dockerHub页面
2.注册账号并登录
3.在服务器上提交自己的镜像
docker login
--password ,-p | 密码 | |
---|---|---|
--password-stdin | 从斯坦丁取密码 | |
--username ,-u | 用户名 |
docker login -u jzk2020
输入密码 :
4.docker tag(标记 ID 引用的图像)
例子 docker tag 0e5574283393 fedora(docker的注册用户名,我的环境是jzk2020)/httpd:1.0(将带有 ID"0e5574283393"的本地图像标记到带有"版本1.0"的"Fedora"存储库中)
注意:删除tag标签引用必须要用标签名字和自己写的版本号
5.登录完毕后就可以提交镜像了,就是一步 docker push
--all-tags ,-a | 将所有标记图像推入存储库 | |
---|---|---|
--disable-content-trust | true | 跳过图像签名 |
--quiet ,-q | 抑制冗长的输出 |
docker push jzk/centos-tomcat:1.0
docker logout:注销退出登录
24.发布到阿里云
1.登录阿里云
2.找到容器镜像服务
3.创建命名空间(在阿里云的容器镜像服务里创建)
4.创建容器镜像
5.浏览阿里云信息
6.根据阿里云的提示来做相应操作(只是虚拟实验并不是真是环境)
1. 登录阿里云Docker Registry
$ docker login --username=jzkadmin registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ docker pull registry.cn-beijing.aliyuncs.com/jzk-centos/centos-tomcat01:[镜像版本号]
3. 将镜像推送到Registry
$ docker login --username=**** registry.cn-beijing.aliyuncs.com $ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/jzk-centos/centos-tomcat01:[镜像版本号](必须是阿里云用户名的tag标签) $ docker push registry.cn-beijing.aliyuncs.com/jzk-centos/centos-tomcat01:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-beijing.aliyuncs.com 作为Registry的域名登录。
5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB$ docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。
$ docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
25.docker save 和docker load
dockers save——将一个或多个图像保存到焦油存档(默认情况式传输到 STDOUT )
姓名,速记 | 违约 | 描述 |
---|---|---|
--output ,-o | 写到文件,而不是性病 |
例子1: dockers save 镜像名称 > 保存命名的压缩文件 (.tar)
例子2:--output的用法:
$docker save -o fedora-all.tar fedora $ docker save -o fedora-latest.tar fedora:latest
使用 gzip 🔗将图像保存到焦油.gz文件
您可以使用 gzip 来保存图像文件,并使备份变小。
docker save myimage:latest | gzip > myimage_latest.tar.gz
docker load——从焦油存档或 STDIN 加载图像
姓名,速记 | 违约 | 描述 |
---|---|---|
--input ,-i | 从焦油存档文件中阅读,而不是从STDIN阅读 | |
--quiet ,-q | 抑制负载输出 |
例子1:docker load < busybox.tar.gz(加载由docker save 保存的压缩文件 busybox.tar.gz)
例子2:docker load --input fedora.tar (--input 的用法)
26.Docker 网络(ip addr 查看所有IP)
1.原理:
1.每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,j就会有一个网卡docker0
桥接模式,使用的技术是evth-pair技术
2.容器和容器之间是可以ping通的
3.每启动一个容器都会新添加一个带ip的网络(docker分配的)
结论:每个docker容器在不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可以ip
2.docker使用的是linux的桥接,宿主机中是一个docker容器的网桥-docker0, docker中的所有的网络接口都是虚拟的,虚拟的传达效率高
3.docker如果把某个容器删掉同时docker的分配的虚拟网卡会消失
2.--link(docker run里的一个容器网络连接功能)不常用
1.用法:
--link 将链接添加到另一个容器 --link-local-ip 容器 IPv4/IPv6 链路本地地址
2.技术应用:
1.可以实现容器和容器之间的网络互相ping通,(相当于路由条目) 2.先以启动的容器为目标(容器1),让容器2ping连接容器1——(docker run -it --name tomcat02 ---link tomcat01 tomcat)
这样容器2就可以连通容器1(相当于正向给一个路由条目,然而做了这个路由条目之后容器2只可以连通容器1,容器1反向连通不了容器2
因为少一个对应的路由条目)
3.容器2就在容器2本地配置了容器1的IP加到了自己的网络中(/etc/hosts)
3.docker network (docker 网络)
命令 | 描述 |
---|---|
docker network connect [docker网络连接] | 将容器连接到网络 |
docker network create [docker网络创建] | 创建网络 |
docker network disconnect [docker网络断开] | 将容器与网络断开连接 |
docker network inspect [docker网络检查] | 在一个或多个网络上显示详细信息 |
docker network ls [docker网络ls] | 列表网络 |
docker network prune [docker网络修剪] | 删除所有未使用的网络 |
docker network rm [docker网络rm] | 删除一个或多个网络 |
1.docker network connect [docker网络连接] ——将容器连接到网络
姓名,速记 | 违约 | 描述 |
---|---|---|
--alias | 为容器添加网络范围别名 | |
--driver-opt | 网络的驱动程序选项 | |
--ip | IPv4 地址(例如,172.30.100.104) | |
--ip6 | IPv6 地址(例如,2001:db8::33) | |
--link | 添加链接到另一个容器 | |
--link-local-ip | 为容器添加链接本地地址 |
2.docker network create [docker网络创建]——创建网络
姓名,速记 | 违约 | 描述 |
---|---|---|
--attachable | API 1.25+ 启用手动容器附件 | |
--aux-address | 网络驱动程序使用的辅助 IPv4 或 IPv6 地址 | |
--config-from | API 1.30+ 复制配置的网络 | |
--config-only | API 1.30+ 创建仅配置网络 | |
--driver ,-d | bridge | 管理网络的驱动程序 |
--gateway | 主子网的 IPv4 或 IPv6 网关 | |
--ingress | API 1.29+ 创建群路由网格网络 | |
--internal | 限制外部访问网络 | |
--ip-range | 从子范围分配容器 ip | |
--ipam-driver | IP 地址管理驱动程序 | |
--ipam-opt | 设置IPAM驱动程序特定选项 | |
--ipv6 | 启用 IPv6 网络 | |
--label | 在网络上设置元数据 | |
--opt ,-o | 设置驱动程序特定选项 | |
--scope | API 1.30+ 控制网络范围 | |
--subnet | 以 CIDR 格式表示网络段的子网 |
3.docker network disconnect [docker网络断开]——将容器与网络断开连接
姓名,速记 | 违约 | 描述 |
---|---|---|
--force ,-f | 强制容器与网络断开连接 |
4.docker network inspect [docker网络检查]——在一个或多个网络上显示详细信息
姓名,速记 | 违约 | 描述 |
---|---|---|
--format ,-f | 使用给定的 Go 模板格式化输出 | |
--verbose ,-v | 用于诊断的冗长输出 |
5.docker network ls [docker网络ls]——列表网络
姓名,速记 | 违约 | 描述 |
---|---|---|
--filter ,-f | 提供筛选值(例如"驱动+桥") | |
--format | 使用 Go 模板的漂亮打印网络 | |
--no-trunc | 不要截断输出 | |
--quiet ,-q | 仅显示网络 ID |
6.docker network prune [docker网络修剪]—— 删除所有未使用的网络
姓名,速记 | 违约 | 描述 |
---|---|---|
--filter | 提供筛选值(例如"直到<时间戳>") | |
--force ,-f | 不要提示确认 |
7.docker network rm [docker网络rm]——删除一个或多个网络
删除网络
要删除名为"我的网络"的网络:
$ docker network rm my-network
删除多个网络
要在单个命令中删除多个网络,请提供多个网络名称或 ID。以下示例删除带有 ID 的网络和名为:docker network rm``3695c422697f``my-network
$ docker network rm 3695c422697f my-network
当指定多个网络时,命令会尝试依次删除每个网络。如果删除一个网络失败,命令将继续到列表中的下一个网络,并尝试删除该命令。命令报告每次删除的成败。
4.网络模式:
bridge:桥接 docker默认
none : 不配置网络
host : 和宿主机共享网络
container : 容器网络连通(用的少)
1.自定义网络
例子:docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet (创建一个新的docker网络,名称为mynet)
docker run -it -P --name tomcat-net-01 --network mynet tomcat
docker run -it -P --name tomcat-net-02 --network mynet tomcat
启动两个容器并以--net来连接网络,这样这个容器会分配mynet网络的网络ip,并且这两个容器可以互通。
2.网络连通(不同网络网段)
例子:docker network connect mynet tomcat03(让mynet的自定义网络连接到另一个自定义网络的tomcat03容器) connect会将tomcat03加到自己的自定义网络mynet中并分配一个ip,使其可以连通