上一篇介绍了一下,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://
进行登录注册,申请一个账户,
常见操作:
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://",
"https://",
"http://f1361db2.m.daocloud.io",
"https://"
],
"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,它集成了一些镜像管理功能,可以完全可视化的管理仓库镜像和访问用户。这个服务的搭建,我会后面专门开一篇文章介绍于搭建