docker一篇概述

docker一篇概述

1:docker简介

docker官网文档:https://docs.docker.com/
docker镜像仓库:https://hub.docker.com/
docker

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成功部署
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
“#” 是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、安装

  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登录仓库

  1. 利用镜像包打标签
    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 镜像。
  2. 登录私有仓库
    docker login -u admin -p Harbor12345 http://ip:port
  3. 推送镜像
    docker push ip:port/library/java-demo:v1.0
    推送时出现unauthorized: unauthorized to access repository: 表示没有权限。需检查是否登录和该仓库权限问题
  4. 拉取镜像
    docker pull ip:port/library/java-demo:v1.0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值