docker一篇概述
文章目录
1:docker简介
docker官网文档:https://docs.docker.com/
docker镜像仓库:https://hub.docker.com/
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。方便我们的部署和环境配置,避免了不同环境部署的各种问题。
虚拟化技术:docker和vmware都属于虚拟化工具,利用现有的系统硬件来虚拟出我们想要的东西
1.1:docker的应用
docker可应用于集群,数据库等应用的部署。
web应用的打包,部署
1.2:优点
1:各个应用间的隔离性,互不干扰
2:快速部署
3:提高服务器的利用率
1.3:docker架构
1:Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。一个镜像可以创建多个容器。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。我们的也可以上传到仓库
Docker 容器通过 Docker 镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。
2:docker的架构
Docker 镜像(Images) :Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) :容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client): Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库Registry :Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 可以有多个版本的镜像
Docker Machine :Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
2:linux 安装docker
概述:我们可以通过选择一台主机进行部署docker,部署时从仓库直接pull拉取docker镜像到主机上。再通过客户端运行镜像来创建容器等操作。
docker安装可以在centos以及windows等多种系统部署,本次以centos举例
安装方式有自动化安装和手动安装两种方式
硬件支持:CentOS 7以及以上
docker安装包对于xpu架构的不同分为x86和arm的架构,需要下载相对应的安装包。离线安装请手动到官网下载安装包再上传安装
下载地址: https://download.docker.com/linux/static/stable
docker联网安装,自行百度
2.1:docker离线内网安装
1、上传后进行解压
tar xvpf docker-18.09.8.tgz
解压后本地文件夹下会多一个docker文件夹
2、复制解压后的文件到/usr/bin下
cp -p docker/* /usr/bin
3、写docker.service配置文件
需要cd /etc/systemd/system 再创建 touch docker.service
将下面内容复制进去后保存退出
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd \
-H tcp://0.0.0.0:4243 \
--selinux-enabled=false \
--log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
vim /etc/sysconfig/docker添加下面内容避免服务器或者docker重启时出现容器网络丢失问题(启动报network not found)
DISABLE_CRASH_FILES_DELETE=true
4、加载配置文件并启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker
2:镜像离线导入
docker镜像仓库
1、官网仓库:https://hub.docker.com/ 搜索要的镜像名称点击targs选择版本复制pull命令使用docker下载镜像包(无法直接下载tar包)
2、国内镜像https://mirrors.tuna.tsinghua.edu.cn/ 可以根据想要的路径去查询:如apache 后再hbase需要逐级查找后可进行下载tar包
离线镜像文件导入
内网环境没法pull镜像,但是docker本身可以将已有的镜像导出成tar文件,并且可以再次导入到docker,利用这一点,可以实现离线镜像文件的下载。
导出:docker save java:8 -o java.tar #将java 8的镜像导出成tar文件
导入:docker load -i file.tar #需要先将下载镜像包导入到服务器目录下
导入后查看镜像:docker images
2.2:docker yum安装
1:卸载旧版本
2:准备安装包
准备安装包:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
默认安装后使用的是默认的docker镜像库,国内网络没有vpn经常是连接不到,docker pull会超时报错的。所以需要修改为国内的镜像库地址
3:配置镜像仓库
提供2个国内仓库源,随意选择一个即可
1:清华源:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2:阿里源:$ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
再执行
3:安装docker相关依赖: sudo yum install docker-ce docker-ce-cli containerd.io
默认安装的是最新版本的docker,也可以指定版本进行安装,如果需要安装其他版本请看下面操作获取版本安装。
查看版本:yum list docker-ce --showduplicates | sort -r
软件包名称:(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1
安装指定版本:sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
检查安装是否成功:docker --version
也可以安装后再配置镜像库。默认是没有配置文件的,自己需要创建 /etc/docker/daemon.json
vim /etc/docker/daemon.json
添加镜像保存退出即可
{
"registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}
4:启动测试docker:
启动docker:systemctl start docker
docker运行状态:systemctl status docker
执行测试:sudo docker run hello-world
可以发现是否部署成功
docker info可查看docker目前的配置
5:国内镜像库加速配置
为了防止从默认国外仓库拉取镜像时失败,可以配置国内的镜像加速
如果文件不存在请新建该文件,默认是没有daemon.json 的。
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com",
" https://docker.anyhub.us.kg",
"https://gallery.ecr.aws",
"https://docker.lmirror.top",
"https://atomhub.openatom.cn"]
}
重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
2.3:卸载docker
如果需要卸载非常简单,仅仅两步
1:移除镜像:sudo yum remove docker-ce docker-ce-cli containerd.io
2:删除安装目录:sudo rm -rf /var/lib/docker
2.4:安装问题总结
安装报:code=exited,status=203/EXEC。
再看安装日志报exec format error注意排查电脑的cpu架构和安装包是否一致,比如都是x86或者都是一样的
3:docker使用
docker run的运行原理:通过找到的镜像去执行我们的应用
1:docker工作原理
Docker 使用客户端-服务器 (Client/Server) 架构模式,使用远程API来管理和创建Docker容器。
docker守护进程在安装的本机上。
使用整体流程如下
2:docker的常用命令
docker info:dicker的系统信息,镜像,容器等信息
docker --version :版本
docker --help:所有命令查看
docker 命令 --hellp:具体使用 比如:docker cp --help
2.1:镜像images
镜像是什么:是轻量级的可执行的软件包,比如我们的系统镜像。
docker官方镜像仓库:https://hub.docker.com/
我们可以在仓库查看我们需要的软件镜像,比如mysql,tomcat,elasticsearch
docker command --help:命令不会用参考说明
查看本地镜像:docker images 可以看到下载的镜像,版本,名字,id,大小
镜像使用:docker images --help
-a :显示本地所有下载的镜像
-f :
-q :只显示镜像的id,也就是唯一编号
搜索镜像:搜索镜像是从仓库去搜索的有两种方式
网址搜索:https://hub.docker.com/
命令搜索:docker search
比如 docker search mysql --filter=STARS=3000
搜索nysql镜像并过滤引用数超过3000的
下载镜像:docker pull NAME[:TAG|@DIGEST]
比如:docker pull ubuntu
不指定版本默认拉取第一个最新的。若需要指定版本,镜像跟版本即可ubuntu:13.10
删除镜像:docker rmi name/id 通过指定name或者ID删除都可以
推送镜像到仓库:$ docker push username/镜像名[:version]
username:我们自己hub仓库的账号,没有可以注册。
镜像名[:version] 我们推送的镜像名,并指定版本,方便我们以后下载
推送仓库后可以用search去搜索我们的镜像
导出镜像为tar包:docker save --o images images.tar
导入镜像包:docker load -i images.tar
2.2:容器命令
有了镜像才能创建容器
如果本地没有镜像需要先拉取镜像:docker pull ubuntu
创建容器: 创建的同时会启动容器
格式: docker run [-d] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
COMMAND:使用COMMAND时必须在指定镜像后再使用
如启动redis并使用redis-server /etc/redis/redis.conf命令
docker run -p 6380:6380 --name redis4 -v /opt/redis.conf:/etc/redis/redis.conf redis:latest redis-server /etc/redis/redis.conf
创建容器并使用:docker run -it ubuntu /bin/bash
后台运行容器:docker run -d ubuntu /bin/bash
退出容器: exit 使用exit退出容器会停止容器。如果是通过
docker exec -it id /bin/bash 进入的容器使用exit退出时不会停止容器
ctrl +p +q 退出容器不停止
查看所有的容器: docker ps -a 会显示出所有的容器,不管是否运行
查看正运行的容器:docker ps 会显示出正在运行的容器
容器详情查看:docker inspect id 可以查看容器的具体元数据信息
进入容器:docker attach id 进入容器创建一个新的终端
docker exec -it id /bin/bash (常用这种进入)
和attach的区别是:exec 进入不会创建新终端窗口,使用exit退出不会停止容器。
启动容器:docker start id
重启:docker restart id
停止容器:docker stop id
docker kill id
删除容器:docker rm id 只能删除指定的已经停止的容器
docker rm -f id 删除容器,不管是否运行
容器日志查看:docker logs id 查看容器执行日志
查看最新100条日志:docker logs --tail=100 -f id
容器启动参数修改:
docker update --restart=always 容器名或容器ID
容器内部运行进程查看:docker top 容器id
拉取docker容器内部文件到本地:docker cp 容器id:/目录/file /local/path
提交容器为镜像:docker commit -a="作者" -m="描述信息" 容器id 起镜像名:版本
提交后用docker images可以看到我们提交的镜像
容器占用内存,cpu,存储查看:docker stats 容器id
1:详解docker run
重要运行参数:
–restart=always 一直保持启动状态,docker重启会自动重启容器
-v /etc/localtime:/etc/localtime 容器时间和宿主机时间同步一致
–privileged=true 挂载文件权限设置,给全部权限,一般不需要设置此配置
格式:docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
可选参数[OPTIONS]如下:
-d 后台运行容器不进入
-i 交互式操作。
-t 终端。 一般i和t一起使用 :比如docker run -it ubuntu /bin/bash 开启一个交互式的容器窗口
-p 容器分配端口,比如 -p 3307:3306 对外暴露端口3307对应容器内的3306端口,也就是容器内外的端口映射
--name 为容器设置名字,不能重复
--rm 容器退出时自动删除容器,一般用来测试用
-m 为容器使用内存设置限制,比如 -m 300m,即最多分配300m给该容器
-e 传递环境变量给容器
-v localpath:dockerpath实现容器内文件和系统文件的挂载
2:docker run实战1
举例:docker run -it ubuntu /bin/bash
若本地没有镜像会先从仓库pull一个镜像再创建一个容器去运行我们的命令。
解释:
ubuntu:15.10 指定运行的镜像,类似于一个小型的linux系统。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
3:docker run实战2:部署es
因为es是非常消耗内存的,在虚拟机测试时请加内存限制,避免虚拟机崩溃
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
:tag 是指定安装es的版本,本次用6.8.13测试
-e 是对es容器运行参数修改。因为es是非常消耗内存的,虚拟机本地测试用可以用下面的命令
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="Xms 128m -Xmx512m" elasticsearch:6.8.13
从端口-p配置看是9200,我们可以用curl localhost:9200 测试发现配置成功,端口开放
[root@localhost ~]# curl localhost:9200
结果
{
"name" : "FXH9X0M",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "gM_h-1BQQDC2yPMp8tCBvg",
"version" : {
"number" : "6.8.13",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "be13c69",
"build_date" : "2020-10-16T09:09:46.555371Z",
"build_snapshot" : false,
"lucene_version" : "7.7.3",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
4:查看容器的启动命令
需要借助工具,用yum进行安装
yum install -y python-pip
pip install runlike
查看启动命令:runlike -p <容器名>|<容器ID>
3:docker管理工具
Docker Machine:Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。
linux安装命令:
base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
Swarm docker集群管理工具
4:docker仓库
仓库中存储了各种的应用镜像,我们可以下载镜像也可以上传自己的镜像到仓库。
官方维护仓库:https://hub.docker.com/
内网也可以搭建企业的docker仓库管理自己的包(参考第7章节)
linux登录官方hub仓库: docker login -u hub仓库账号 输入密码
确定登录成功,我们就可以推送自己的镜像到仓库了
推送镜像到hub官方仓库:$ docker push username/镜像名[:version]
username:我们自己hub仓库的账号,没有可以注册。
镜像名[:version] 我们推送的镜像名,并指定版本,方便我们以后下载
推送仓库后可以用search去搜索我们的镜像
5:容器数据挂载:数据卷
容器数据卷:容器和系统主机,或者容器和容器间的数据同步技术,保证数据共享和数据持久性。不管容器是否启动,对数据的操作示双向改动的。
容器删除不会让本地的数据丢失
方式1:-v 目录挂载 /宿主机localpath/:容器path 实现两个目录间的数据同步
docker run -it -v /opt/data:/home/data image
方式2:容器间数据共享:--volume-from 通过指定容器名或者id进行共享数据,也可以实现备份
docker run -it --volume-from docker-other_Name/id image
4:dockerFile构建镜像
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
由于仓库的镜像都是一些基本功能,为了丰富我们的使用,需要去基于镜像定制化一些我们自己的镜像,这就是dockerfile的作用
文件格式:
“#” 是dockerfile的注释
从基础镜像来添加我们需要的组件功能完成镜像的创建。
1:详解dockerfile
以下测试[]中的内容均是可选的参数
1:from:必须为第一行,选择一个基础镜像
格式: FROM <image> FROM <image>[:<tag>] FROM <image>[@<digest>]
示例: FROM mysql:5.6
2:MAINTAINER:该镜像的开发信息描述。类似于我们开发代码的写的作者
格式: MAINTAINER string
示例: MAINTAINER Jasper Xu
3:ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
格式: ADD <src> <dest> 添加本地文件到容器的那个路径下
示例: ADD hom* /mydir/ # 添加所有以"hom"开头的文件到容器
4:RUN:构建镜像时执行的命令,我们可以通过这来添加一些其他的功能
包括两种执行方式,都可以
shell执行 格式: RUN <command>
exec执行 格式: RUN ["executable执行文件", "参数1", "参数2"]
示例:
RUN ["/etc/execfile", "arg1", "arg1"]
RUN apk update
5:COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
6:CMD:构建容器后调用,也就是在容器启动时才进行调用。多个命令只有最后一个是启动时生效的
cmd中的命令可以在容器run时添加命令替换掉,因为只有一个是生效的但是ENTRYPOINT 不会,注意两种的区别
格式: CMD <shell 命令>
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
示例 CMD echo "This is a test." | wc -
CMD ls #执行容器后执行 ls 命令展示目录
CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
7:ENV:设置环境变量,在后续的操作中可以通过$来取出变量的值进行使用
格式: ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
示例 ENV myName John Doe
8:EXPOSE:指定于外界交互的端口
也就是为容器指定的内部端口,要使外部访问,还需要在容器启动时用 -p 指定端口完成映射
格式: EXPOSE <port> [<port>...]
示例: EXPOSE 80 443
9:WORKDIR:工作目录,类似于cd命令
默认目录是/根目录,启动后会直接执行cd WORKDIR。我们可以看到启动容器后执行pwd就是该目录。
格式: WORKDIR /path/to/workdir
示例: WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
注:通过WORKDIR设置工作目录后,利用该镜像创建启动的容器默认工作目录都在该路径下。
并且Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行
其他的更多命令可以查看其他文档
2:用dockerfile创建镜像
过程总结:
1:编写dockerfile
2:docker build 构建:docker build -t imageName:[tag] -f . dockerfilepath .
-f 指定dockerfile文件路径
-t 指定镜像名和版本号
. 表示是上下文路径,docker执行其他命令的默认路径
最后一个点不要忽略。表示上下文路径指我们的dockerfile存放的路径。docker build 会把该路径下的文件全部打包,所以不要存放其他无用文件
1:编写dockerfile:利用现有的centos添加vim功能
centos-dockerFile
FROM centos
# 我们基于centos添加我们自己的功能
MAINTAINER DJ-dockerFile test
#MAINTAINER注释功能
RUN yum -y install vim
#RUN yum -y install net-tools
#CMD容器启动时执行的命令
CMD echo "build success"
CMD /bin/bash
2:执行构建:可以看到成功
3:镜像测试
执行docker images可以看到我们创建的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1.0 30f692150465 2 minutes ago 272MB
启动容器验证:可以看到功能添加成功!!!
启动容器: docker run -it centos:1.0
[root@618c972e7689 /]# vim test.txt
[root@618c972e7689 /]# cat test.txt
test build image success!!
5:docker网络
安装Docker时,它会自动创建三个网络,bridge桥接模式(创建容器默认连接到此网络)、 none 不配置网络、host仅主机模式(用宿主机的网络)
我们可以通过在docker run时 通过–net指定容器的网络连接方式。
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,是创建容器的默认网络配置。(默认是172.17网段的通过该网桥通信,不是该网段的是不能通信的)。
5.1:容器网络通信
容器ip,网关分配:容器启动时docker0会子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关,容器删除网络配置删除(容器创建时没有指定IP的话重启是会重新分配IP的,IP会变)
容器启动默认用bridge模式网络通信。通过ip连接到docker0虚拟网卡(默认模式,docker安装就有的网卡)再通过物理网卡连接各个容器。
所以:各个容器间网络是互通的,但是进程和文件系统等互相隔离。
容器网络查看:docker inspect id
我们在容器内:cat /etc/hosts 可以发现ip分配一映射
5.2:容器通信实战
容器创建时没有指定IP的话重启是会重新分配IP的,IP会变
- 实战1:现有docker部署的springboot应用、mysql、redis等服务。则java应用中的连接地址应该是docker容器的ip而不是物理服务器的ip。通信直接通过容器网桥交互。
- 实战2:docker部署的NGINX(默认桥接网络),java部署的springboot应用。此时NGINX代理的后端地址是服务器的内网IP而不是localhost或者127.0.0.1。(因为localhost或者127.0.0.1会走docker网桥通信不会走物理机的)
5.3:自定义容器网络
自定义网络功能更加丰富,可以用容器名直接去ping其他容器
作用:集群搭建等时,通过为不同组件设置网关,分离不同组件的通信
不同网段通信是需要走路由的。
自定义命令:docker network create --help
5.4:不同网段的容器通信
docker network --help可以发现其中的connect参数,可以将其他网段的容器直接加到该网段即可。
docker network connect 网桥名称 容器名
6:docker常见问题汇总
6.1:docker build构建镜像报错:Errors during downloading metadata for repository ‘AppStream’:
解决:关闭防火墙导致的,开启防火墙就好。systemctl start firewalld.service
6.2:docker时间和宿主机时间不同步问题
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime
6.3:docker容器启动报网络丢失问题:docker容器:network not found
启动docker-compose创建的容器,在宿主机服务器重启或者docker重启后出现个别容器网络丢失现象:解决:在/etc/sysconfig/docker里面加,如下:
vim /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runsOPTIONS='--live-restore=false'# 这里写上
DISABLE_CRASH_FILES_DELETE=true
7:企业搭建docker私有harbor仓库
7.1、安装
- 安装docker-compose
下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋权
sudo chmod +x /usr/local/bin/docker-compose
查看
docker-compose -version
2. 安装Harbor
下载Harbor安装包
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.3.2.tgz
解压安装包
tar -zxvf harbor-offline-installer-v2.3.2.tgz
3. 修改配置文件
复制harbor.yml.tmpl 文件并重命名为harbor.yml修改此配置文件,需要设置hostname、端口、数据库密码等。
cp harbor.yml.tmpl harbor.yml #拷贝
vim harbor.yml
hostname: 192.168.1.18 //设置访问地址,可以是ip(公网ip或者局域网均可)、主机名,不可以设置为127.0.0.1或localhost
# http related config
http: //启用http
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80 //http默认端口为80
//将https注释掉,以关闭https支持
# https related config
#https: //注释
# https port for harbor, default is 443
# port: 443 //注释
# The path of cert and key files for nginx
# certificate: /your/certificate/path //注释
# private_key: /your/private/key/path //注释
34 harbor_admin_password: Harbor12345 //harbor登录密码
数据和日志目录可不修改。该地址是指定的物理地址,而非容器中的地址。
4. 安装
执行 ./install.sh 命令
5. 登录
http://ip:port/harbor/projects 默认admin
6. 配置docker信任该私有仓库
默认的docker仓库使用https协议。不修改时直接推送镜像会报协议不匹配问题。
vim /etc/docker/daemon.json
添加如下内容
{
“insecure-registries”: [“ip:port”]
}
重启docker:sudo systemctl restart docker
7.2、问题汇总
不要使用2.10.0版本。安装redis存在权限问题。
7.3、docker使用harbor仓库
推送和拉取镜像都必须先docker login登录仓库
- 利用镜像包打标签
docker tag java-demo:v1.0 ip:port/library/java-demo:v1.0
//根据每次上传的镜像版本打相应的标签,做好标识
ip:port为仓库地址,library为仓库上创建项目的名称
Docker images即可看到ip:port/library/java-demo:v1.0 镜像。 - 登录私有仓库
docker login -u admin -p Harbor12345 http://ip:port - 推送镜像
docker push ip:port/library/java-demo:v1.0
推送时出现unauthorized: unauthorized to access repository: 表示没有权限。需检查是否登录和该仓库权限问题 - 拉取镜像
docker pull ip:port/library/java-demo:v1.0