上一篇介绍了一下,docker使用的有些基础命令。这次再来深入的了解一下较为复杂的docker命令

 
管理指令   说明
docker  container 用于管理容器
docker image 用于管理镜像
docker network 用于管理Docker网络
docker node 用于管理Swarm集群节点
docker plugin 用于管理插件
docker secret 用于管理Docker机密
docker service 用于管理Docker一些服务
docker stack 用于管理Docker堆栈
docker swarm 用于管理Swarm
docker system 用于管理Docker
docker volume 用于管理数据卷

 


我们可以构建属于自己的镜像,可以将其存放在仓库中,方便日后拉取和维护,目前较为普遍使用的镜像管理工具:Docker Hub 和Docker Registry

  Docker Hub:

  •   开源免费
  • 自动化进行项目管理
  • 适用于个人和小团队
  • 公开镜像免费,私有仓库默认一个,获取更多需要另付费
  • 适用于新手

  官方地址:https://hub.docker.com

  进行登录注册,申请一个账户,

常见操作:

  1 将本地镜像推送到远程Docker仓库中

    1)推送的镜像名称必须符合DockerID/repository的形式规范(DockerID为Docker Hub上的账号名, repository为镜像名)

如果名称不规范,需要先进行名称的修改
例如本地有个镜像: hello-docker docker tag hello-docker:latest lanlang/test:latest 这个时候 会在本地复制一个名称为 lanlang/test的镜像。原来的镜像名称不变,可以通过docker images 查看

    2)登录认证

推送到远程仓库的时候,需要进行登录验证
docker login 提示输入用户名和密码, 返回Login Succeeded则成功

    3)镜像推送

docker  push  lanlang/hello-docker:latest

    推送完成之后,就可以在Docker Hub 的test仓库中看到该镜像了

    因为是对外公开的,Docker Hub会定时的对上传的公开镜像进行索引,过段时间 任何人都可以搜索到该仓库镜像了

  Docker Registry:

  • 完全免费
  • 支持私有化管理
  • 需要手动配置,升级,维护和管理,没有Docker Hub功能强大
  • 适用于有一定经验的开发者

开始本地私有仓库的搭建之旅吧!!!

  1. 使用Docker官方提供的Registry镜像可以搭建本地私有镜像仓库

docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2

-d: 在后台运行该容器
-p: 将私有镜像仓库内部默认暴露的5000端口映射到宿主机的5000端口
--restart=always: 本地私有镜像仓库宕机后始终会自动重启
--name registry 指定的容器的名称
-v mnt/registry:/var/lib/registry: 表示容器内的默认存储为止/var/lib/registry中的数据挂在到宿主机/mnt/registry目录下,当容器销毁的时候, 在/var/lib/registry目录下的数据会自动备份到宿主机指定目录

  2. 重命名镜像

  本地私有仓库的镜像名必须符合 “仓库IP:端口/repository”

docker tag hello-docker:latest  localhost:5000/myhellodocker
这样镜像仓库中会多出一个localhost:5000/myhellodocker的镜像

  3. 镜像推送

docker push localhost:5000/myhellodocker

推送成功之后,就可以打开地址查看
localhost:5000/v2/myhellodocker/tags/list 显示:
{
name: "myhellodocker",
tags: [
"latest"
]
} 同时在本地磁盘/mnt/registry/docker/registry/v2/repositories目录下查看到

  至此我们本地私有仓库搭建成功,但是还是比较基础的。但是在实际的开发当中,无法保证系统的安全性和私密性,所以,我们还需要配置认证证书,登录账号等

  1. 首先,需要查看需要搭建私有仓库的服务器的IP地址,通过ifconfig

  2. 生成自签名证书

cd /home/

mkdir -p registry/certs && cd registry/certs/

openssl req -x509 -days 3650 -subj '/CN=172.21.0.6:5000/' -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt

-x509: x509是自签发证书的格式
-days 3650:表示证书的有效期
172.21.0.6:5000:表示具体搭建Docker Registry本地镜像仓库的地址和端口
rsa:2048:是证书算法长度
domain.key domain.crt 就是要生成的证书文件

  3. 生成用户名和密码

在刚才的certs目录中执行
cd .. && mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn lanlang 123456 > htpasswd 自此会生成本地私服访问的用户名和密码(lanlang 123456)

  4.启动Docker Registry本地惊喜那个仓库服务

  将之前启动的该服务删除  docker  rm -f registry

docker run -d -p 5000:5000 --restart=always --name registry
-v /mnt/registry:/var/lib/registry
-v `pwd`/auth:/auth
-e "REGISTRY_AUTH=htpasswd"
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
-v `pwd`/certs:/certs
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key
registry:2

  

  5.配置Docker Registry 访问接口

  服务启动后,需要在该主机上配置供其他Docker机器访问的接口

mkdir -p /etc/docker/certs.d/172.21.0.6:5000
cp certs/domain.crt /etc/docker/certs.d/172.21.0.6\:5000/

  第一步:创建一个证书目录,目录的名称要和启动的服务地址端口要一致

  第二步:将生成的domain.crt证书复制到该目录下

  6. 验证测试

    现在私有仓库服务已经可以提供正常服务,我们将本地的镜像推送进行测试

    1)

vim /etc/docker/daemon.json

{
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
],
"insecure-registries": [
"172.21.0.6:5000"
]
} 添加insecure-registries 部分

保存,重启docker systemctl restart docker

    2)准备测试镜像

docker tag lanlang/hello-docker:latest 172.21.0.6:5000/myhellodocker

    3)镜像推送

docker push 172.21.0.6:5000/myhellodocker

这个时候,会返回一个错误
no basic auth credentials
说明需要进行身份验证 首先,登录镜像仓库
docker login 172.21.0.6:5000
根据提示输入用户名和密码 再次推送即可

    4) 可以查看是否推送成功

ls /mnt/registry/docker/registry/v2/repositories/

  至此,Docker Registry 已经搭建完成,但是它却没有可视化管理工具,但是管理上感觉并不方便,其实有些社区已经开发了专门可视化管理工具。例如Portus,它集成了一些镜像管理功能,可以完全可视化的管理仓库镜像和访问用户。这个服务的搭建,我会后面专门开一篇文章介绍于搭建

docker之基本命令(2)的更多相关文章

  1. Docker容器基本命令注意点

    Docker 容器基本命令注意点 前言: a. 本文主要为 Docker的视频教程 笔记. b. 本机环境为 Windows 10 专业版,使用的命令行为 PowerShell. 1. docker ...

  2. 记录以下docker的基本命令

    docker search xxx(tag)      在OFFICIAL上ok的是官方镜像    这里也可以去dockerhub上面看到   搜索xxx镜像docker images查看本地所安装的 ...

  3. 【Docker】基本命令

    1.进入容器交互状态 docker exec -ti xxxx /bin/bash 2.查询镜像 docker images 3.查询容器 docker ps

  4. 【Docker】- 基本命令

    1.docker ps -a    显示所有容器 2.doker ps -l 显示最近一次启动的容器 3.docker ps   显示正在运行的容器 4.docker start [容器ID]  启动 ...

  5. 【Docker】基本命令使用介绍

    # docker命令行学习 ## docker run- docker run --help:老实说这条最管用了- docker run -it:交互模式,允许控制台输出 - docker run - ...

  6. docker 的基本命令

    查看命令 docker images 查看镜像 docker ps 查看正在运行的容器 docker ps -a 查看所有的容器 docker inspect container-name 记录着 D ...

  7. Docker安装基本命令操作,带你了解镜像和容器的概念!

    上一章节我们了解了Docker的基本概念,以及相关原理.这一章节进行实操. <Docker这么火爆.章节一:带你详尽了解Docker容器的介绍及使用> 一.Docker安装 声明:Dock ...

  8. Docker 02 基本命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  9. 七、docker基本命令

    Docker 基本命令 docker的基本命令 docker version :查看docker的版本号,包括客户端.服务端.依赖的Go等 [root@centos7 ~]# docker versi ...

  10. Docker 基本命令和使用

    Docker 基本命令 systemctl start docker : 启动 Docker systemctl stop docker : 停止 Docker systemctl restart d ...

随机推荐

  1. pyinstaller 打包成 exe

    生成 spec 和可执行文件: pyinstaller --onefile your_file.py 如果需要修改生成的spec文件,则后续可以这样运行: pyinstaller -F your_fi ...

  2. Redis 入门 - C#|.NET Core客户端库六种选择

    经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了.不过别担心我先头疼,今天就给大家介绍6款.NET系Redis ...

  3. JavaScript Library – Svelte

    前言 上一回我介绍了 Alpine.js.作为我开发企业网站 draft 版本的 render engine. 用了一阵子后,我觉得它真的非常不好用.所以打算换一个. 前端有好几个 framework ...

  4. RxJS 系列 – Observable & Creation Operators

    前言 RxJS 最大篇幅就是一堆的 operators, 但是那些概念并不多, 只要常用就能熟能生巧了. Observable 和 Subject 反而需要我们了解清楚. 所以这篇我们先来了解这 2 ...

  5. 升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server

    升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放.开源.共享.努力打造 .net 社区的一款优秀开源产品. 前段时间我发表了一系列文章,开始介绍基 ...

  6. 【linux】【docker】Docker默认网段配置导致无法访问

    背景 集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问! ...

  7. Flutter 2.5 更新详解

    Flutter 2.5 正式版已于上周正式发布!这是一次重要的版本更新,也是 Flutter 发布历史上各项统计数据排名第二的版本.我们关闭了 4600 个 Issue,合并了 3932 个 PR,它 ...

  8. SuperMap iServer数据动态更新刷新地图与数据服务

    更新:2022年6月27日 SuperMap iServer 11i 底层修改逻辑,增加智能指针.11i版本不需要以下操作即可实现 一.使用背景 有这么一个需求,后端也就通过SuperMap iDes ...

  9. linux 挂载硬盘报错 "mount: unknown filesystem type 'ntfs'"

    这个错误是说,系统无法识别ntfs格式的硬盘.所以不能直接挂载. 解决这个问题的思路有两个: 格式化磁盘为linux可以识别的格式. 通过工具使linux可以识别ntfs格式. 如果是第一次挂载硬盘可 ...

  10. thinkphp中的or,like,in等联合查询

    数据库中的两个字段有一个字段等于查询条件时,下面两个方法都是可以的: (1) $where['a.goods_name|a.goods_sn'] = array('like',"%$keyW ...