前言:本文安装基于centos7,虚拟机ip 192.168.60.105。
内核版本查看
官方建议linux内核版本在3.10上。
uname -a 或 uname -r
2. 如果不满足内核要求,需要升级内核(生产环境慎重,如更新后不生效,需尝试重启服务器)
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核;
3. 如果之前安装过,需要卸掉旧版本
yum remove docker docker-common docker-selinux docker-engine
1、安装相关软件包
device-mapper-persistent-data和lvm2是devicemapper的驱动依赖。
Device Mapper是Linux系统中基于内核的高级卷管理技术框架。Docker的devicemapper存储驱动就是基于该框架的精简置备和快照功能来实现镜像和容器的管理。
yum-util 提供yum-config-manager功能。
yum install -y yum-utils device-mapper-persistent-data lvm2
2. 配置一个yum源
中央仓库:
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
阿里仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.docker安装
(1)查看可用版本
yum list docker-ce --showduplicates | sort -r
(2)选择一个版本安装
语法:yum install docker-ce-版本号
yum -y install docker-ce-18.03.1.ce
(3)查看版本
docker version
看图中最后一句:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
我们需要启动docker daemon。
(4)启动docker
systemctl start docker
(1)开机自启动
systemctl enable docker
(2)配置daemon.json(没有新建)
vim /etc/docker/daemon.json
添加配置(镜像加速器)
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
(3)添加权限组
ll /var/run/docker.sock
docker.sock是用来与deamon通讯的socket描述符。
如果用户不是root用户或不在用户组docker中,操作时将报错无权限,此时就需要将用户添加到docker组中。
gpasswd -a yph docker #添加用户yph至用户组docker
gpasswd -a yph docker #从用户组docker移除yph
(1)下载registry
docker pull registry #默认下载最新版本
(2)新建目录
mkdir -p /opt/module/docker-registry
备注:Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的 /opt/module/docker-registry目录挂载到该目录,实现将镜像保存到主机的 /opt/module/docker-registry目录。
(3)启动registry
docker run -d --name myRegistry -v /opt/module/docker-registry/images:/var/lib/registry -p 5000:5000 --restart=always registry:latest
(4)给指定镜像打上 Docker Registry 的仓库标签
docker tag hello-world:latest 192.168.60.105:5000/hello-world:latest
(5)测试仓库
docker push 192.168.60.105:5000/hello-world:latest
error:
[root@localhost docker-registry]# docker push 192.168.60.105:5000/hello-world:latestThe push refers to repository [192.168.60.105:5000/hello-world]Get https://192.168.60.105:5000/v2/: http: server gave HTTP response to HTTPS client
原因:registry未采用https服务,而客户端docker却使用了https请求。
解决方案有两种,我们这里先使用第一种(下一节配置第二种),就是配置docker在这个ip访问时使用http:
vim /etc/docker/daemon.json
#多个使用逗号间隔,注意图中结尾的逗号
"insecure-registries":[
"192.168.60.105:5000"
]
(6)重启docker并测试
systemctl restart docker
docker push 192.168.60.105:5000/hello-world:latest
(1)在宿主机的映射目录下创建存储用户密码的文件:
mkdir /opt/module/docker-registry/auth
#使用apache的httpd-tools来创建htpasswd
yum install -y httpd-tools
#创建密码文件,admin 123456htpasswd -Bbn admin 123456 > /opt/module/docker-registry/auth/htpasswd
(2)启动registry容器,指定验证方式和密码文件路径
docker run -p 5000:5000 \--restart=always \--name registry \-v /opt/module/docker-registry:/var/lib/registry \-v /opt/module/docker-registry/auth/:/auth/ \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \-d registry
解析:
REGISTRY_AUTH=htpasswd # 以 htpasswd 的方式REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm # 注册认证REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd # 认证的用户密码
(3)测试
登录前:推送镜像到registry
docker push 192.168.60.105:5000/hello-world:latest
失败!
登录后:
docker login 192.168.60.105:5000
按提示输入账号和密码,回车,登录成功。
推送镜像:
docker push 192.168.60.105:5000/hello-world:latest
成功!
(4)扩展其它登录方式:
# 一般不建议使用明文密码docker login -u 用户名 -p 密码 ip:端口## 不输入密码,回车后,使用交互式输入密码(输入的密码不会显示)docker login -u 用户名 -p ip:端口# 不输入密码和用户名,回车后,使用交互式输入用户名和密码(输入的密码不会显示)docker login ip:端口