docker之基本命令(2)
上一篇介绍了一下,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)的更多相关文章
- Docker容器基本命令注意点
Docker 容器基本命令注意点 前言: a. 本文主要为 Docker的视频教程 笔记. b. 本机环境为 Windows 10 专业版,使用的命令行为 PowerShell. 1. docker ...
- 记录以下docker的基本命令
docker search xxx(tag) 在OFFICIAL上ok的是官方镜像 这里也可以去dockerhub上面看到 搜索xxx镜像docker images查看本地所安装的 ...
- 【Docker】基本命令
1.进入容器交互状态 docker exec -ti xxxx /bin/bash 2.查询镜像 docker images 3.查询容器 docker ps
- 【Docker】- 基本命令
1.docker ps -a 显示所有容器 2.doker ps -l 显示最近一次启动的容器 3.docker ps 显示正在运行的容器 4.docker start [容器ID] 启动 ...
- 【Docker】基本命令使用介绍
# docker命令行学习 ## docker run- docker run --help:老实说这条最管用了- docker run -it:交互模式,允许控制台输出 - docker run - ...
- docker 的基本命令
查看命令 docker images 查看镜像 docker ps 查看正在运行的容器 docker ps -a 查看所有的容器 docker inspect container-name 记录着 D ...
- Docker安装基本命令操作,带你了解镜像和容器的概念!
上一章节我们了解了Docker的基本概念,以及相关原理.这一章节进行实操. <Docker这么火爆.章节一:带你详尽了解Docker容器的介绍及使用> 一.Docker安装 声明:Dock ...
- Docker 02 基本命令
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
- 七、docker基本命令
Docker 基本命令 docker的基本命令 docker version :查看docker的版本号,包括客户端.服务端.依赖的Go等 [root@centos7 ~]# docker versi ...
- Docker 基本命令和使用
Docker 基本命令 systemctl start docker : 启动 Docker systemctl stop docker : 停止 Docker systemctl restart d ...
随机推荐
- Unity 配置 SQLite
原Github仓库链接: https://github.com/robertohuertasm/SQLite4Unity3d?tab=readme-ov-file All you have to do ...
- TS2Vec: 面向通用的时间序列表示《TS2Vec: Towards Universal Representation of Time Series》(时间序列、对比学习、多尺度特征(池化操作)、分层对比、上下文一致性(时间戳掩码+随机裁剪))
今天是2024年5月22日,10:24,今天看这篇经典的论文(如果你问我为什么最近频繁看论文,因为我的创新点无了,要找创新点+太菜了,菜就多看多学). 论文:TS2Vec: Towards Unive ...
- Angular 18+ 高级教程 – 关于本教程
版本声明 本教程写于 Angular v17,但往后的所有新功能,API 都有更新到相关文章里头,所以教程总是最新的,大家可以安心学习. 前言 光阴飞逝,一转眼,我尽然已经有两年多的时间完全没有接触 ...
- mongo查看服务状态
转载请注明出处: 查看数据库列表 show dbs 查看当前数据库 db 查看集合列表 show collections 查看数据库的状态 db.stats() 查看集合的状态 db.collecti ...
- tailwindcss 经验
树摇时扫描的文件范围 根据 tailwindcss.config.js 中 content 的配置,跟打包软件加载的模块无关.即未使用的模块中的 class 也会被包含进来.
- 《Spring Data JPA从入门到精通》内容简介、前言
内容简介 本书以Spring Boot为技术基础,从入门到精通,由浅入深地介绍Spring Data JPA的使用.有语法,有实践,有原理剖析. 本书分为12章,内容包括整体认识JPA.JPA基础查询 ...
- manim边学边做--形状匹配
manim中有几个特殊的用于形状匹配的对象,它们的作用是标记和注释已有的对象,本身一般不单独使用. 形状匹配对象一共有4种: BackgroundRectangle:为已有的对象提供一个矩形的背景 C ...
- Java日期时间API系列14-----Jdk8中java.time包中的新的日期时间API类,java日期计算1,获取年月日时分秒等
通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...
- webapi action 参数
使用地址参数传递(queryString)数据:eg:http://localhost:5063/WeatherForecast?age=123 /// <summary> /// GET ...
- redis - 认识 nosql 认识 redis 基础 linux安装 redis
sql和nosql的区别 1. 结构化 非结构化 2. 关联的 非关联的 3. sql查询 非 sql 4. 存储方式 磁盘 内存 5.扩展性 垂直 水平 6. 使用场景: 数据结构固定,相关业务 ...