Docker笔记 结合Centos 8部署Docker - 严千屹博客 (qianyios.top) 搭建的Docker实现本次笔记的所有内容及例子
也可以使用以下Centos7部署Docker CE 19.03实现本实验的所有例子
Centos7部署Docker CE 19.03 (2023年4月8日01点00分)当前最常用的 Docker 版本是 Docker CE 19.03。这是 Docker 社区版(Community Edition)的最新版本,它包括一些更新和新功能,如多阶段构建、Dockerfile 中的 ARG 和 FROM 指令以及与 Kubernetes 的更好集成等。另外,Docker CE 19.03 支持 Windows、MacOS 和 Linux 操作系统。
卸载旧版本 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo yum -y remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose docker-machine docker-swarm sudo rm /etc/yum.repos.d/docker-ce.repo sudo rm -rf /var /lib/docker
安装docker 1 2 3 4 5 6 7 8 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https:// download.docker.com/linux/ centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io -y sudo systemctl start docker docker version sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/ local/bin/ docker-compose sudo chmod +x /usr/ local/bin/ docker-compose docker-compose --version
Docker的常用命令 1 2 3 docker version docker info docker 命令 --help
镜像命令 镜像命令 1 2 3 4 5 6 docker images -a,--al1 -q,--quiet REPOSITORY TAG IMAGE ID CREATED SIZE 镜像的仓库源 镜像的标签 镜像的id 镜像的创建时间 镜像的大小
搜索命令 1 2 3 4 [root@docker ~]# docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos DEPRECATED 检索Docker仓库中的Ubuntu镜像
拉取镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@docker ~] [root@docker ~] Using default tag: latest latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest docker.io/library/centos:latest 从docker库拉去centos镜像 [root@docker ~] REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5 d0da3dc9764 18 months ago 231 MB
删除镜像 1 2 3 4 5 6 7 8 9 10 11 docker rmi -f 镜像名/id docker rmi -f 镜像名1 镜像名2 镜像名3 docker rmi -f $ (docker images -aq ) [root @docker ~] REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5 d0da3dc9764 18 months ago 231 MB [root @docker ~] Untagged: centos:latest 。。。。。。 (一般情况下 删除镜像id 只需要输入前面3 个字符就行了)
查看镜像分层
镜像资源包 1 2 3 4 5 curl -O http://mi rrors.douxuedu.com/cloud/ docker.zip unzip docker.zip docker load < 镜像名.tar 例如: [root@localhost ~]
容器命令 新建容器并启动 1 2 3 4 5 6 7 8 9 10 11 12 docker run [可选参数] 镜像名 --name=Name -d -it -p -P 进入容器 [root@docker ~] [root@4018 f9ac2f33 /] /exit Ctrl+P+Q
查看容器列表 1 2 3 4 5 6 7 8 查看容器列表 (若加 -a可以查看所有容器包括为运行的) [root@docker ~] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4018 f9ac2f33 centos "/bin/bash" About a minute ago Up About a minute test [可选参数] -a -n=? -q
删除容器 1 2 3 4 (一般情况下 删除容器id 只需要输入前面3 个字符就行了) docker rm 容器id docker rm -f $ (docker ps -aq ) docker ps -a -q |xargs docker rm
启动和停止容器 1 2 3 4 docker start 容器id docker restart 容器id docker stop 容器id docker kill 容器id
进入正在运行的容器 1 2 3 4 进入容器后开启一个新的终端,可以在里面操作 docker exec -it 容器id /bin/bash 进入容器正在执行的终端,不会启动新的进程 docker attach 容器id
拷贝容器内的文件到主机上 1 2 3 4 5 6 7 8 9 10 11 12 13 docker cp 容器id:容器内路径 目的主机路径 [root@docker ~]# docker exec -it 401 /bin/bash [root@4018f9ac2f33 /]# echo "11" > test.txt [root@4018f9ac2f33 /]# cat test.txt 11 Ctrl+P+Q # 容器不停止退出 [root@docker ~]# docker cp 401:test.txt /root/ Preparing to copy... Successfully copied 2.048 kB to /root/ [root@docker ~]# cat test.txt 11
停止容器,将容器打包成新镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@docker ~] [可选参数]:- a :提交的镜像作者;- c :使用Dockerfile指令来创建镜像;- m :提交时的说明文字;- p :在commit时,将容器暂停。 [root@localhost ~]sha256 :29ffb8423a78853c5a49918c99e8d513239f9c3365cca06e1fc0027f589b7f59 [root@localhost ~] REPOSITORY TAG IMAGE ID CREATED SIZE test/centos v1 29ffb8423a78 3 seconds ago 233MB centos latest 5d0da3dc9764 18 months ago 231MB
Docker数据卷
数据卷用途:使容器内部的文件跟容器外面的文件同步
数据卷的特点:
数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
数据卷基本命令 1 2 docker volume ls docker volume inspect 卷名
指定路径挂载 1 docker run -v 主机目录:容器内目录
卷名挂载 1 docker run -v 卷名(不是目录了):容器内 目录
匿名挂载
数据卷权限 1 2 3 docker run -v 主机目录:容器内目录:ro docker run -v 主机目录:容器内目录:rw
数据卷容器 1 --volumes-from 要同步文件的容器 # 实现多个容器的数据同步与共享
1、数据库1使用的命令
1 2 3 docker run -d -p 主机端口:3306 / -v /etc/my sql/conf.d -v / var/1ib/my sql / -e MYSQL_ROOT_PASSWORD=数据库密码 --name mysql01 mysql
2、数据库2使用的命令
1 2 3 4 docker run -d -p 主机端口:3306 / --volumes-from mysql01 / -e MYSQL_ROOT_PASSWORD =数据库密码 --name mysql02 mysql Copy
3、数据库3使用的命令
1 2 3 docker run -d -p 主机端口:3306 / --volumes-from mysql01 / -e MYSQL_ROOT_PASSWORD =数据库密码 --name mysql03 mysql
DockerFile DockerFile是用来构建Docker镜像的构建文件。
! 注意事项
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
DockerFile命令 1 2 3 4 5 6 7 8 9 10 11 12 FROM MAINTAINER RUN ADD WORKDIR VOLUME EXPOSE CMD ENTRYPOINT ONBUILD COPY ENV
用DockerFile文件创建镜像 1 2 3 docker build -f DockerFile文件名 -t 镜像名:版本号 .
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@docker ~] [root@docker ~] [root@docker centos] [root@docker centos]FROM centos:latestMAINTAINER qianyios xiaoohu2002@163 .comRUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* RUN yum install -y wget RUN wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo RUN yum clean all && yum makecache RUN mkdir /test RUN echo 'test' > /test/test.txt [root@docker centos] [root@docker centos] REPOSITORY TAG IMAGE ID CREATED SIZE centos-test v1 b1f4c91e59ee 2 minutes ago 328 MB
用这个镜像创建容器,且将容器中的/test挂载到主机目录下的/opt/test
b1f是镜像id前三个字符
1 2 3 4 5 6 docker run -it -v /opt/ test:/test --name test -p 80:80 b1f / bin/bashexit 退出exit 之后查看/opt/ test是否有test.txt文件 [root@docker ~] test 成功!!!
配置镜像加速器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cat > /etc/docker/daemon.json << EOF { "registry-mirrors" : [ "http://hub-mirror.c.163.com" , "https://docker.mirrors.ustc.edu.cn/" ], "insecure-registries" : [], "debug" : false , "experimental" : false , "features" : { "buildkit" : true } } EOF sudo system ctl daemon-reload sudo system ctl restart docker
Docker 网络 docker网络主要是解决容器联网问题,也是我们使用容器中最重要的一个环节,如果容器没有网络则无法向网络中提供服务。
网络管理命令:docker network 1 2 3 4 5 6 7 8 9 10 11 [root@docker ~ ]# docker network Usage: docker network COMMAND Manage networks Commands: connect 连接容器到网络 create 创建网络 disconnect 断开容器与网络的连接 inspect 显示一个或多个网络的详细信息 ls 列表网络 prune 删除所有未使用的网络 rm 删除一个或多个网络
docker网络类型 创建容器的时候可以通过—network命令来指定容器的网络,网络类型有以下四种
bridge
host
none
容器网络或联盟网络
bridge 桥接网络是指容器通过桥接的方式将容器网卡 桥接到宿主机的docker0网桥 ,然后在通过宿主机防火墙的NAT表实现与外网的联系。
宿主机docker0网桥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [root@docker ~] docker0: flags =4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17 .0.1 netmask 255.255 .0.0 broadcast 172.17 .255.255 inet6 fe80::42 :c7ff:fe37:8 e8 prefixlen 64 scopeid 0 x20<link> ether 02 :42 :c7:37 :08 :e8 txqueuelen 0 (Ethernet) RX packets 6618 bytes 277975 (271.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8152 bytes 24675021 (23.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 .....省略了本机的网卡信息 vethf75a942: flags =4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::9085 :f5ff:fe34:77 b5 prefixlen 64 scopeid 0 x20<link> ether 92 :85 :f5:34 :77 :b5 txqueuelen 0 (Ethernet) RX packets 2850 bytes 158484 (154.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3397 bytes 11613136 (11.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 如果想看更清楚一下 可以使用 ip add show命令 [root@docker ~]4 : docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02 :42 :c7:37 :08 :e8 brd ff:ff:ff:ff:ff:ff inet 172.17 .0.1 /16 brd 172.17 .255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42 :c7ff:fe37:8 e8/64 scope link valid_lft forever preferred_lft forever 容器网卡14 : vethf75a942@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 92 :85 :f5:34 :77 :b5 brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::9085 :f5ff:fe34:77 b5/64 scope link valid_lft forever preferred_lft forever 注意: 这里的vethf75a942@if13指的就是容器网卡,V代表虚拟网卡的意思,eth 以太网卡,f75a942网卡编号,if13指的是宿主机网桥(docekr0)的一个端口,对应容器的网卡编号加一。 所以容器内的网卡编号应该是 eth0@if14 通过在容器中执行命令 ip add show 也可以看到 [root@docker ~]1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00 :00 :00 :00 :00 :00 brd 00 :00 :00 :00 :00 :00 inet 127.0 .0.1 /8 scope host lo valid_lft forever preferred_lft forever13 : eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02 :42 :ac:11 :00 :03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17 .0.3 /16 brd 172.17 .255.255 scope global eth0 valid_lft forever preferred_lft forever
防火墙的NAT表内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@docker ~]# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere !loopback/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.17 .0.0 /16 anywhere Chain DOCKER (2 references) target prot opt source destination RETURN all -- anywhere anywhere
docker0 与容器网卡桥接 1 2 3 4 通过brctl show命令可以看到容器网卡和docker0网卡的桥接信息 [root@docker ~]bridge name bridge id STP enabled interfaces docker0 8000 .0242 c73708e8 no vethf75a942
创建一个网络为bridge类型的容器,不指定默认也是这个类型
1 [root@docker ~] # docker run -d --network bridge --name centos1 baishuming2020/centos_nginx
host 容器和真机共用网卡及对应的端口,缺点就是同一个端口只能宿主机或者某个容器使用,其他容器不能用。
1 2 创建一个网络类型host的容器[root@docker ~] # docker run -d --network host --name centos2 baishuming2020/centos_nginx
none 容器仅有lo网卡,是一个不能联网的本地容器
1 2 创建一个网络类型为lo的容器[root@docker ~] # docker run -d --network none --name centos3 baishuming2020/centos_nginx
实现网桥网络 目的:不同的服务容器组应用不同的网桥,避免同一网络内容器太多,保持容器网络独立性。
关于新网桥联网问题:创建网桥后,宿主机会自动帮你做NAT,所以不用担心联网问题
查看网络-ls 1 2 3 4 5 6 7 8 9 10 11 12 [root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE80982 d2613cd bridge bridge local 40 c179ab420a docker1 bridge local 04 aadb7475c0 docker100 bridge local ce79e9d7525a host host local 8 f0358469e57 none null local NETWORK ID 网桥ID NAME 名称DRIVER 网络类型 SCOPE 作用范围
创建网桥-create 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@docker ~]6 a410e27b66ea587142d967f7dff6f36c04ced3c27116a79831412f3743aba56 [root@docker ~] NETWORK ID NAME DRIVER SCOPE6 ee1e928b710 bridge bridge local ce79e9d7525a host host local 6 a410e27b66e mydocker0 bridge local 8 f0358469e57 none null local 修改docker网桥名字1 、修改名字 [root@docker ~]2 、重启docker服务 [root@docker ~]
删除未使用的网桥-prune 1 2 3 4 5 [root@docker ~] WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue ? [y/N] y Deleted Networks: docker1
删除某个网桥-rm 1 2 3 4 5 [root@docker ~]# docker network rm docker100 docker100 注意: 不能被活动容器占用
容器连接到网桥 前提是该容器是桥接网络
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 docker network connect 网卡 容器 [root@docker ~] [root@docker ~] eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 8 bytes 656 (656.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 发现centos1容器多了一块网卡,使用的正是docker1的网段 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255 ether 02:42:c0:a8:01:02 txqueuelen 0 (Ethernet) RX packets 16 bytes 1312 (1.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
容器断开网桥 1 2 将centos1容器的网络从docker1网桥断开 [root@docker ~]
常见故障 FAQ1:使用改名后的新网桥的容器可能无法解析域名 原因:没有配置新网桥的DNS
解决方法:为容器手动配置一个DNS地址即可
FAQ2:Networking will not work 1 2 3 4 5 6 7 8 9 10 [root@docker ~]# docker run -d --network docker100 --name centos4 baishuming2020/centos_nginxWARNING: IPv4 forwarding is disabled. Networking will not work. 67f2c276123c993cd66b9d7a99ba22402331a13f9ea8817e57324a934896b805 解决方案 1、打开转发 [root@docker ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf 2、重启网络 [root@docker ~]# systemctl restart network
不同主机间的容器通信 macvlan 在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动启用,Docker macvlan 只支持 bridge 模式
1 2 3 4 5 6 7 8 9 docker network create -d macvlan --subnet =172.16.10.0/24 --gateway =172.16.10.1 -o parent =ens224 mtacvlan-1 -o parent =网卡名称 指定用来给 macvlan 网络使用的物理网卡 注意,要在所有需要运行 macvlan 的主机上执行这条命令,但是要记得更改网关的地址,避免造成IP冲突 docker run -itd --network macvlan-1 centos /bin/bash
overlay 在 Docker 中,overlay 是众多 Docker 网络模型中的一种,并且是一种跨主机的全局网络模型,有一个数据库专门的来存储网络分配信息,避免 IP 冲突,同时内部还有一个小型的 DNS 我们可以直接通过主机名进行访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 consul 服务端: docker run -itd -h consul -h 主机名 –name 容器名 –restart =always 重启策略 progrium/consul 镜像名称 -server 以服务节点启动 -bootstrap 预期的启动节点数:自举 在浏览器内输入 IP地址+端口号 可以看到 web 页面 在所有主机上编辑 daemon.json 文件: { "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"], 监听相关端口 "cluster-store":"consul://192.168.1.150:8500", 集群的主机地址 "cluster-advertise":"192.168.1.150:2375” 宣告自己的地址 } 重启 docker 服务 创建 overlay 网络(全局网络):一台主机上创建自动同步 docker network create -d overlay overlay-1 启动容器测试: docker run -it --name docker-1 --network=overlay-1 centos /bin/bash docker run -it --name docker-2 --network=overlay-1 centos /bin/bash 验证:ping docker-1
常见故障 如发现各容器内分配的ip之间相互ping不通
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 原因:可能由于防火墙问题引起的,默认forward链是drop状态,需要打开才可以 解决方案: 执行下面操作,保证INPUT FORWARD链都是ACCEPT状态 清除其他规则[ root@docker_node1 ~] [ root@docker_node1 ~] [ root@docker_node1 ~] [ root@docker_node1 ~] [ root@docker_node2 ~] [ root@docker_node2 ~] [ root@docker_node2 ~] [ root@docker_node2 ~]
Docker私有仓库 在Docker中,当我们执行 docker pull xxx 的时候 ,它实际上是从 hub.docker.com 这个地址去查找,这就是 Docker 公司为我们提供的公共仓库。在工作中,我们不可能把企业项目 push 到公有仓库进行管理。所以为了更好的管理镜像,Docker 不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。
docker容器镜像仓库分类:
公网仓库:docker hub
私网仓库: registry、harbor
部署步骤 拉取registry镜像
创建registry仓库容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 、创建持久化存储,将容器镜像存储目录/var/ lib/registry 挂载到本地/opt/ qyck下: mkdir /opt/ qyck2 、创建 registry 容器: docker run -itd -p 5000 :5000 \ -v /opt/ qyck:/var/ lib/registry \ --restart=always registry:latest3 、查看容器是否运行 [root@qyck ~] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1ea79cc023f registry:latest "/entrypoint.sh /etc…" 10 seconds ago Up 9 seconds 0.0 .0.0 :5000 ->5000 /tcp, :::5000->5000/ tcp trusting_gates
测试容器应用
1 2 3 4 [root@zutuanxue_manage01 ~] {"repositories" :[] } 显示仓库中没有任何镜像
上传镜像 测试:拉取nginx镜像
1 2 3 4 5 6 docker pull nginx [root@qyck ~] REPOSITORY TAG IMAGE ID CREATED SIZE registry latest 65 f3b3441f04 9 days ago 24M B nginx latest 448 a08f1d2f9 2 weeks ago 142M B
设置docker仓库为registry本地仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #1 、修改docker进程启动文件,修改其启动方式,目的是为了让通过docker配置文件启动 [root@qyck ~]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/ lib/systemd/ system/docker.service #2 、设置docker 守护进程的配置文件 /etc/ docker/daemon.json,默认没有该文件 [root@qyck ~]# cat /etc/ docker/daemon.json { "insecure-registries" : ["http://192.168.48.128:5000" ] } insecure-registries 指定非安全的仓库地址,多个用逗号隔开 #3 、重启docker生效配置文件 systemctl daemon-reload systemctl restart docker
将镜像打tag
1 2 3 4 [root@qyck ~] # docker tag nginx:latest 192 .168 .48 .128 :5000 /nginx:v1[root@qyck ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE192.168.48.128:5000 /nginx v1 448a08f1d2f9 2 weeks ago 142MB
推送镜像到仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@qyck ~]# docker push 192.168 .48.128 :5000 /nginx:v1 The push refers to repository [192.168 .48.128 :5000 /nginx]1040838 fe30e: Pushed93 ee76f39c97: Pushed5684 be535bf1: Pushed6 bc8ae8fb3cf: Pushed a29cc9587af6: Pushed8553 b91047da: Pushed v1: digest: sha256:3 f01b0094e21f7d55b9eb7179d01c49fdf9c3e1e3419d315b81a9e0bae1b6a90 size : 1570 #2 、查看上传 [root@qyck ~]# curl http: {"repositories" :["nginx" ]} #查看存储文件夹 [root@qyck ~]# ls /opt/ qyck/docker/ registry/v2/ repositories / nginx
拉取镜像 在另外一台机拉取nginx镜像
1 2 3 4 5 6 7 8 9 10 11 #1、设置docker启动文件 [root@zutuanxue_node1 ~]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service #2、设置docker配置文件 [root@zutuanxue_node1 ~]# cat /etc/docker/daemon.json { "insecure-registries" : ["http://192.168.48.128:5000" ] } systemctl daemon-reload systemctl restart docker
拉取镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@qyck ~]v1: Pulling from nginx 9e3ea8720c6d: Pull complete bf36b6466679: Pull complete 15a97cf85bb8: Pull complete 9c2d6be5a61d: Pull complete 6b7e4a5c7c7a: Pull complete 8db4caa19df8: Pull complete Digest: sha256:3f01b0094e21f7d55b9eb7179d01c49fdf9c3e1e3419d315b81a9e0bae1b6a90 Status: Downloaded newer image for 192.168.48.128:5000/nginx:v1 192.168.48.128:5000/nginx:v1 [root@qyck ~] REPOSITORY TAG IMAGE ID CREATED SIZE registry latest 65f3b3441f04 9 days ago 24MB192.168.48.128:5000/nginx v1 448a08f1d2f9 2 weeks ago 142MB
Docker学习总结 ![1](../img/Docker node/f8242ed25c3cc4a0f16a604d1d53b5f885684b49.png)
docker run 参数解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 -d: 后台运行容器,并返回容器ID; -i : 以交互模式运行容器,通常与 -t 同时使用; -P: 随机端口映射,容器内部端口随机映射到主机的端口 -p : 指定端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;--name ="nginx-lb" : 为容器指定一个名称;--dns 8.8 .8.8 : 指定容器使用的DNS服务器,默认和宿主一致;--dns-search example.com : 指定容器DNS搜索域名,默认和宿主一致; -h "mars" : 指定容器的hostname; -e username="ritchie" : 设置环境变量;--env-file =[] : 从指定文件读入环境变量;--cpuset ="0-2" or --cpuset ="0,1,2" : 绑定容器到指定CPU运行; -m :设置容器使用内存最大值;--net ="bridge" : 指定容器的网络连接类型,支持 bridge/host/none /container: 四种类型;--link =[] : 添加链接到另一个容器;--expose =[] : 开放一个端口或一组端口;--volume , -v: 绑定一个卷
此笔记参考 开摆工作室 /Docker基础 精心整理
千屹博客旗下的所有文章,是通过本人课堂学习和课外自学所精心整理的知识巨著 难免会有出错的地方 如果细心的你发现了小失误,可以在下方评论区告诉我,或者私信我! 非常感谢大家的热烈支持!