目前docker 已经分为社区版 (docker CE)和 商业版(docker EE),最新的版本由原来的1.13直接跳到了17.06,目前由于17.06的刚刚发布,在使用Docker 的时候可以根据自己的需求选择相应的版本。
安装新版本docker (docker-ce)
以下内容根据 官方文档 修改而来。
如果你之前安装过 docker,请先删掉
sudo yum remove docker docker-common docker-selinux docker-engine
安装一些依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
根据你的发行版下载repo文件: CentOS/RHEL Fedora
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
把软件仓库地址替换为 TUNA:
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
最后安装:
sudo yum makecache fast sudo yum install docker-ce
启动docker:
1
|
systemctl start docker
|
Docker 安装(旧版)
先移除其他非官方的版本:
1
2
|
yum -y remove docker docker-common container-selinux
yum -y remove docker-selinux
|
添加yum源,这里选择1.13的版本:
1
2
|
yum
install
-y yum-utils
yum-config-manager --add-repo https:
//docs
.docker.com
/v1
.13
/engine/installation/linux/repo_files/centos/docker
.repo
|
对yum仓库快速缓存:
1
|
yum makecache fast
|
安装docker:
1
|
yum -y
install
docker-engine-1.13.1
|
如果对版本有特殊要求,这里可以使用如下命令,列出可选的版本信息,然后指定版本安装:
1
|
yum list docker-engine.x86_64 --showduplicates |
sort
-r
|
在启动的配置文件中添加国内的镜像仓库:
1
2
3
4
|
vim
/usr/lib/systemd/system/docker
.service
...
ExecStart=
/usr/bin/dockerd
--registry-mirror https:
//qxx96o44
.mirror.aliyuncs.com
...
|
启动docker:
1
|
systemctl start docker
|
Docker Registry
我们可以使用docker registry 作为我们的私有镜像仓库,当本地制作好镜像后,可以直接上传到镜像仓库中,方便其他主机拉取镜像。
在生产环境中,官方建议使用权威的CA证书,如果我们可以申请到公共的CA证书,就可以部署我们的共有镜像仓库。
也可以通过创建私有的证书,在需要访问仓库的主机上添加认证即可。
由于目前都是内部使用,加上服务器权限控制非常严格,所以这里直接使用免CA证书的方式(官方强烈不推荐)
修改registry配置为免CA模式,指定Registry服务器的域名或者IP地址,并指定访问端口(端口可任意,和registry容器端口映射上即可)
创建daemon.json:
1
|
vim
/etc/docker/daemon
.json
|
1
2
3
|
{
"insecure-registries"
: [
"192.168.60.18:5000"
]
}
|
重启docker 服务:
1
|
systemctl restart docker
|
配置用户密码
1
|
mkdir
auth
|
下载registry镜像,并配置账户密码:
1
|
docker run --entrypoint htpasswd registry -Bbn trying 123123 > auth
/htpasswd
|
这个命令会拉取registry镜像,以htpasswd的方式对密码进行加密,指定用户 trying 和密码123123,并将密码存在指定文件中。
启动容器仓库:
1
2
3
4
|
docker run -d -p 5000:5000 --restart=always --name registry_docker \
-
v
`
pwd
`
/auth
:
/auth
-e
"REGISTRY_AUTH=htpasswd"
\
-e
"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
\
-e
"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"
registry:2
|
指定容器的映射端口,容器启动时应用自动启动,指定一个数据卷,挂载验证文件htpasswd,并指定验证信息。
使用账号登录仓库,输入账号密码:
1
|
docker login 192.168.60.18:5000
|
推送本地镜像到仓库:
1
2
|
docker tag 256ab8c63c04 192.168.60.18:5000/self-registry:v1
docker push 192.168.60.18:5000/self-registry:v1
|
其他主机下载镜像:
在另外一台需要获取镜像的主机上配置registry为无CA模式:
1
|
vim
/etc/docker/daemon
.json
|
1
2
3
|
{
"insecure-registries"
: [
"192.168.60.18:5000"
]
}
|
启动docker, 登录:
1
2
|
docker login 192.168.60.18:5000
docker pull 192.168.60.18:5000
/self-registry
:v1
|
拉取成功:
1
2
3
|
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.60.18:5000
/self-registry
v1 256ab8c63c04 About an hour ago 401 MB
|
查看仓库镜像:
使用浏览器访问: http://192.168.60.18:5000/v2/_catalog ,输入之前设置的账号密码 trying/123123登录,即可查看到镜像信息
{"repositories":["self-registry"]}
补充说明:
1、内网的其他主机如果需要从本地仓库拉取镜像,都需要添加daemon.json的文件。
2、在registry的容器中,我们可以看到挂载的宿主机磁盘信息:
1
2
3
4
5
6
7
8
|
# df -h
Filesystem Size Used Available Use% Mounted on
overlay 80.0G 3.3G 76.7G 4% /
/dev/vda1
80.0G 3.3G 76.7G 4%
/auth
/dev/vda1
80.0G 3.3G 76.7G 4%
/etc/resolv
.conf
/dev/vda1
80.0G 3.3G 76.7G 4%
/etc/hostname
/dev/vda1
80.0G 3.3G 76.7G 4%
/etc/hosts
/dev/vda1
80.0G 3.3G 76.7G 4%
/var/lib/registry
|
在容器中,镜像的存放位置为/var/lib/registry/docker/registry/v2/repositories/ 那么对应的宿主机目录是/var/lib/docker/image/
可以在启动registry时,挂载宿主机上指定的目录到容器的/var/lib/registry上,当容器发生故障后,可以重启一个新的,存储的镜像不会有任何影响。
这里将docker 镜像仓库映射到宿主机的 /data/images目录下:
1
2
3
4
|
docker run -d -p 5000:5000 --restart=always --name registry1 -
v
`
pwd
`
/auth
:
/auth
\
-
v
/data/images
:
/var/lib/registry
-e
"REGISTRY_AUTH=htpasswd"
\
-e
"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
\
-e
"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"
registry:2
|
3、如果我们要改变registry宿主机上的映射端口,所有的主机上的daemon.jason文件都需要修改为对应的端口,并重启docker 服务。