介绍
-
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。最重要的是,它不依赖于任何语言、框架或系统。
-
目标是实现轻量级的操作系统虚拟化解决方案
-
基础:Linux 容器( LXC)
-
Go 语言实现
Docker组成
Docker Images:Docker image 是 Docker container 最基本的模板。image 通过容器使系统和应用易于安装,Docker image 是用来运行的容器,可以在 https://hub.docker.com/找到许多 images 。
Docker Registry:Docker registry 是为 Docker images 提供的库。它提供了公共和私有库。公共 Docker 库被叫做 Docker Hub。这里我们能够上传 push 和 pull 我们自己的 images。
Docker Container:Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。Docker 是一个联合的文件系统作为容器后台,容器的任何变化,都将被保存在一个基本 image 新的层上。我们安装应用程序的层就是容器。每个在主机上运行的容器都是独立的,因此,提供了一个安全的应用平台。
虚拟机和容器的区别
虚拟化
容器化技术
虚拟化技术和容器技术性能对比
| 特性 | 虚拟机 | 容器 |
|---|---|---|
| 硬盘空间 | GB级别 | MB级别 |
| 启动 | 分钟级 | 秒级 |
| 资源消耗 | 很大,单机一般几十个VM,硬盘使用一般为GB | 很小,单机支持上千个容器,硬盘使用一般为MB |
| 隔离性 | 强 | 弱 |
| 镜像大小 | 几百MB到几G | 可小至几MB |
| 性能 | 通过对硬件层的模拟,增加了系统调用链路的环节,有性能损耗 | 共享内核,接近原生,几乎没有性能损耗 |
| 系统覆盖 | Linux、Windows、Mac | 内核所支持的OS |
Docker应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
CentOS 7安装Docker-CE社区版
前言
在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。
注意:本文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面要加 sudo
查看当前内核版本
[lilbai@localhost ~]$ uname -r
3.10.0-1160.el7.x86_64

更新yum包(这个命令不是必须的)
生产环境中此步操作需慎重,看自己情况,学习的话随便搞
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核
卸载旧版本的docker
如果你确信你的Linux 没装过docker,那么可以不执行这条命令
yum remove docker docker-common docker-selinux docker-engine
安装docker依赖yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2


设置yum源(二选一)
设置一个yum源,第一个是Docker官方的yum仓库,第二个是阿里云的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

查看docker版本有那些
yum list docker-ce --showduplicates | sort -r

选择一个版本安装
yum -y install docker-ce-18.03.1.ce

安装成功
出现下入说明已经安装成功了

设置开机启动docker
刚安装完的docker是还没启动的,需要启动才能执行docker命令
systemctl start docker
设置开机不启动docker
systemctl enable docker
Ubuntu18.04安装Docker-CE社区版
本次安装环境在华为服务器Ubuntu安装Docker
因为Ubuntu官方系统里自带的Docker版本不是最新的,为了安装最新版本,我们要从官方Docker库里下载,为此,需要先添加几个包源,添加GPG公钥来确保下载和安装的有效性。
更新现有包列表
sudo apt update

安装几个依赖包,让apt可以支持HTTPS
sudo apt -y install apt-transport-https ca-certificates curl software-properties-common

将官方Docker库的GPG公钥添加到系统中
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将Docker库添加到APT里
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

再次更新现有包列表
sudo apt update

查看Docker库的版本
为了确保修改生效,让新的安装从Docker库里获取,而不是从Ubuntu自己的库里获取
apt-cache policy docker-ce
可能会看到如下图的输出,各个系统的情况可能略有不同

输出显示,docker-ce(ce是社区版的意思)还没有安装
开始安装
本次实验默认安装最新版Docker,如果你想执行下载某个版本,可以通过在软件包名后面添加版本=来指定安装版本,比如指定安装
5.20.10.6~3-0,则安装指令为:
sudo apt -y install docker-ce=<5:20.10.7~3-0~ubuntu-focal> docker-ce-cli=<5:20.10.7~3-0~ubuntu-focal> containerd.io
sudo apt -y install docker-ce docker-ce-cli containerd.io
安装这三个程序的作用:
docker-ce:Docker守护进程,这是执行所有管理工作的部分,在Linux上需要另外两个守护进程。docker-ce-cli:CLI工具来控制守护程序,如果要控制远程Docker守护程序,你也可以单独安装它们。containerd.io:守护进程与OS API连接,从本质上将Docker与OS分离,还为非Docker容器管理器提供容器服务。

查看运行状态
现在Docker应该已经安装好了,守护进程也开启了,开机启动也开启了。我们看看Docker的运行状态吧
systemctl status docker
你看到的输出应该是这样的

{% note success simple %}
到这里就安装成功啦
{% endnote %}
设置开启自启Docker
docker自启动(开机自启)
systemctl enable docker.service
关闭开机自动启动
systemctl disable docker.service
查看开机启动的程序
查看开机启动的程序中是否有docker
systemctl list-unit-files | grep enable
安装docker-compose
安装环境:CentOS 7
[root@localhost]# uname -r
3.10.0-1160.el7.x86_64
方式一:官网方式
下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
下载过程出错
如果出现以下错误,是标识连接失败的意思,重新下载即可,下载地址在GitHub上面,国内下载是稍微有点问题。
curl: (35) TCP connection reset by peer

添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose --version
方式二:pip方式安装
安装pip
yum -y install epel-release
yum -y install python-pip
查看pip版本
pip --version
更新pip
pip install --upgrade pip
安装docker-compose
pip install docker-compose
查看docker-compose版本
docker-compose version
方式三:手动安装
下载docker-compose
wget https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-aarch64
将文件改名为docker-compose
mv docker-compose-linux-aarch64 docker-compose
将文件移动到/usr/local/bin/
mv docker-compose /usr/local/bin/
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
查看docker-compose版本
docker-compose -v
首次使用
我们每次使用docker运行容器所需的镜像来源都是官方的镜像仓库,由于docker的镜像仓库在国外,可能在访问时存在网络问题,可能有时候会拉取失败,所以我们将docker镜像源设置为国内的镜像源,这样下载的成功了也会高一点。
添加镜像源
一键添加镜像源
或者你也可以按照以下步骤,在/etc/docker/daemon.json文件添加镜像源,如果没有该文件则新建一个。
进入root管理员
su root
一键添加源
mkdir -p /etc/docker/ && cd /etc/docker/ && touch daemon.json && echo {\"registry-mirrors\":[\"https://docker.mirrors.ustc.edu.cn\"]} >> daemon.json
打开文件
vim /etc/docker/daemon.json
写入镜像源(此处用中科大源)
{% tabs %}
将以下内容写入到/etc/docker/daemon.json文件中
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
进入阿里云的镜像加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,复制图片中内容到`/etc/docker/daemon.json`文件中。

{% endtabs %}
加载配置 && 重启docker
sudo systemctl daemon-reload # 重新加载配置
sudo systemctl restart docker # 重启docker服务
部署Docker的容器
介绍
已经安装完Docker、docker-compose了,就可以开始部署Docker服务了。这里的服务一般表示为一个软件执行生成的服务,比如运行一个mysql、frp服务,我们要运行这些服务,我们在Windows上想要运行这个服务,是不是先要下载安装包,然后安装软件,安装完后打开软件,配置软件运行参数,然后启动运行。
我们使用docker部署一个服务,也是需要下载安装包,然后设置运行参数,然后启动就好了,比在Windows上省略了一点步骤。这里的下载安装包就是在docker下载镜像,设置运行参数就是编写docker-compose.yml文件,启动容器就是docker-compose up -d,如果你使用docker run XXX这种方式启动容器更快,是不是感觉使用docker运行一个服务比传统安装方式方便许多呢。
下面我们具体举例运行一个docker容器,比如,我这里安装一个Docker web控制面板portainer为例,这个portainer服务功能就是将Docker的运行情况显示在web页面上,通过web页面鼠标点点代替命令行管理Docker容器。
每一个服务都是一个独立的容器。
使用命令行部署服务
下载portainer镜像
在运行portainer程序前,我们需要下载portainer镜像,就类似我们在使用某个APP时,要下载安装包,然后安装软件才能使用。
docker pull portainer/portainer

运行容器
运行容器,类似用安装包安装软件一样,安装完后自动启动这个portainer容器,一个容器可以当做是一个或多个服务来理解,因为有些容器里面有运行多个服务的。
docker run -d --name portainerUI -p 9000:9000 -v /home/docker/portainer:/var/run/docker.sock portainer/portainer
解释:
-d:让该服务在后台运行--name:给该容器起一个名字-p:定义端口映射。主机端口:容器端口-v:数据卷挂载。主机路径:容器路径portainer/portainer:你要运行的镜像名。
上面这些参数一般看镜像介绍文档,看具体需要加什么参数,不加的话,对应的功能就没有办法使用,可能还会导致运行失败。
其中比较重要的参数-p,想从外网访问该容器的服务器,就没有办法访问了,因为这个端口就类似一条通道,放开该通道给外网访问,不作端口映射,表示不添加这条通道,外网就找不到这条通道了。
-v:数据挂载。就是将你宿主机的某个文件夹挂载到docker容器里面,这样你的docker容器里面就可以访问到你挂载的文件夹了。
在作端口映射时,记得给主机开放端口。

查看portainer安装效果
http://IP:9000
上面我们使用命令行运行了一个Docker容器,如果你要运行其他容器,也是类似这样子,先下载镜像,然后运行容器就可以了,只有简单的两步。
当然,你也是可以选择docker-compose这种方式部署容器,这种方式部署容器有个好处就是,方便管理,因为你这个容器的全部配置信息都可以通过这个docker-compose.yml文件可以看到,你下一次要配置和这个一模一样的容器环境,你只需要复制这个docker-compose.yml文件信息就可以了。
使用docker-compose创建容器
我们在安装docker时,一般都是推荐一起安装docker-compose的。
Docker Compose是一个用于定义和管理多个Docker容器的工具。Docker Compose通过定义docker-compose.yml容器配置来生成容器,同时也可以使用docker-compose命令管理docker-compose.yml所定义的全部容器,比如使用docker-compose down关闭docker-compose.yml所定义全部容器。
使用docker-compose的好处是可以做到配置持久化,这样过一段时间再来查看该容器,可以通过查看docker-compose.yml就知道该容器的配置情况,同时,容器的可定制程度更加方便。
新建一个docker-compose.yml文件
一般建议在/home/docker/下新建一个文件夹来存储每个Docker服务的数据。

编写docker-compose.yml
version: '3.1'
services:
portainer: # 服务名称
image: portainer/portainer # 镜像版本 默认最新
restart: always # 启动方式
container_name: portainer #容器名称
volumes: # 本机路径:容器路径,这里我使用相对路径
- ./docker.sock:/var/run/docker.sock
ports: # 端口映射,本机端口:容器端口
- 9000:9000

这里有个要注意的点:
- 如果你是首次启动这个
docker-compose.yml服务,version的版本不能大于x.1,比如,你写3.2,可能会导致启动失败 - 每一个容器的名字都是唯一的,容器之间的名字不能相同
要是启动容器前没有下载镜像,也是没有关系的,因为我们在docker-compose.yml指定了镜像名,在启动容器docker-compose up -d时,docker会自动下载镜像。
启动服务
docker-compose up -d
up:启动程序服务-d:在后台运行
关闭服务
如果需要关闭该服务,则进入docker-compose.yml父目录下,执行docker-compose down,

你可能会有个疑虑了,我们启动这么多容器,每一个容器里面都有一个Linux系统,会不会很占存储呢?其实占用的存储还是有的,但不是很大,相比传统的虚拟机,虚拟出一整个完整的系统,docker容器就显得很小了。
因为在docker容器中,我们首先是拉取了一个镜像,我们创建的容器都是基于这个镜像进行生成的,我们每创建一个容器,每需要添加或修改的内容都在是这个镜像上面进行叠加层,就好像叠瓦片一样,每在docker容器里面修改容器,就在原来的基础上叠一个瓦片,这样就可以做到既不对原有的镜像进行修改,又可以做到我们想要的内容。
更新docker-compose
如果在启动完服务之后有需要修改某些服务的配置时,可以直接对docker-compose.yml修改,修改完之后,关闭服务(关闭服务,表示销毁该容器,如果容器内数据需要备份,则应先复制出来宿主机),再重新启动服务即可。
docker-compose down
docker-compose up -d
down:表示关闭该服务up:启动docker-compose-d:表示该docker-compose运行的容器在后台启动
如果有重要的数据在容器中,一般都是强烈建议将数据挂载到宿主机,这样可以保证数据的安全性,因为谁知道哪天docker容器出什么问题,数据就没了,一旦挂载到宿主机,数据就存在宿主机,安全性提高很多,如果这个数据还是很重要,那还是做个备份吧,备份到其他云上,比如duplicaty备份工具。
创建容器但不启动
用nginx:latest镜像创建一个容器名为nginx-test
docker create --name nginx-test nginx:latest
create:效果等于run,表示创建一个新容器--name:自定义容器名
创建容器并运行命令
OPTIONS参数含义说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;-d: 后台运行容器,并返回容器ID;-i: 以交互模式运行容器,通常与 -t 同时使用;-P: 随机端口映射,容器内部端口随机映射到主机的端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;--name="nginx-lb": 为容器指定一个名称;--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;-h "mars": 指定容器的hostname;-e username="ritchie": 设置环境变量;--env-file=[]: 从指定文件读入环境变量;--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;- **
-m:**设置容器使用内存最大值; --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;--link=[]: 添加链接到另一个容器;--expose=[]: 开放一个端口或一组端口;--volume , -v: 绑定一个卷
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
案例
1-使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
2-使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
3-使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
4-绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
5-使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
Docker常用的指令
查看容器、镜像
由于Docker的容器ID、镜像ID比较长,我们在使用到容器ID、镜像ID时,可以输入ID的前面几位,一般大于2位以上来替代完整的ID。
查看Docker全部镜像
docker images
查看Docker已启动的服务
docker ps
查看Docker全部容器
docker ps -a
启动、停止、重启容器
启动容器是指已经创建好的容器,但已经停止该容器,还没删除的容器,此时可以重启该容器,类似手机开关机。
停止、重启容器有两个方式,一个是通过指定容器ID,一个方式是指定容器名,即CREATED。
查看容器ID
docker ps -a
启动容器
启动容器可一次性启动一个容器或多个容器。
指定容器ID启动
docker start 容器ID [容器ID]
指定容器名启动
docker start 容器名 [容器名]
停止容器
指定容器ID
docker stop 容器ID
指定容器名
docker stop 容器名
停止正在运行的全部容器
如果有需要停止全部容器的话,使用**docker stop `docker ps -a -q`**最好用
docker stop `docker ps -a -q`
重启容器
指定容器ID
docker restart 容器ID
指定容器名
dockre restart 容器名
删除容器
删除容器三步法:
- 查看容器ID:
docker ps -a - 停止容器:
docker stop 容器ID - 删除容器:
docker rm 容器ID
查看容器ID
docker ps -a
停止容器
docker stop 容器ID
删除容器
docker rm -f 容器ID [容器ID]
-f:表示停止该容器并删除容器ID:可以输入前几位即可或者完整ID
可以一起删除多个容器,在容器ID后累加即可。
删除镜像
因为容器是基于镜像运行起来的,如果要删除镜像,表面你也不需要这个服务了,那该镜像产生的容器也应该要删除掉,这样可以减少多余的垃圾对服务器的影响。
总的来说,应先删除容器,再删除镜像。
通过ID删除镜像
docker rmi IMAGEID # 使用镜像ID删除镜像
docker rmi 0e901e68141f # 删除镜像
docker rmi 0e9 #或者使用简短的ID前三位
通过TAG删除镜像
docker rmi REPOSITORY:TAG # 删除镜像样例
docker rmi nginx:latest # 删除镜像
docker images # 查看镜像

rm参数含义
- **
-f:**通过SIGKILL信号强制删除一个运行中的容器。 - **
-l:**移除容器间的网络连接,而非容器本身。 - **
-v:**删除与容器关联的卷。
删除所有已经停止的容器
谨慎操作,这是删除全部已停止的容器
docker rm $(docker ps -a -q)
进入Docker容器
我们有时候需要进去Docker容器查看什么文件,或者修改某个配置文件等等操作,我们比较常用的还是使用docker exec ....
方法一:exec(推荐)
docker ps
docker exec -it ID /bin/bash
**区别:**进入正在运行的容器,不会新建别的容器
-i:表示运行对容器进行交互式操作-t:在容器中创建一个伪终端
方法二:attach
docker run -it IMAGE(镜像名) /bin/bash
**区别:**进入一个新建的容器,而不是原本已经存在的容器
run:创建一个新的容器-i:表示运行对容器进行交互式操作-t:在容器中创建一个伪终端
更改镜像名
查看镜像
docker images
更改镜像名
docker tag <Image ID> 新镜像名
docker tag 4ec22c7a983e transmission-hikki
容器之间通信
需求总是多变的,比如我们要部署了Nginx、MySQL、Jenkins容器,我们怎么让容器之间互相通信呢?
我们可以使用--link指令在容器之间建立一条网络通信隧道,就好比你和隔壁家拉一条水管,可以使用水管来传输东西。
创建httpd容器web1
docker run -d -P --name web1 httpd
创建httpd容器web2
docker run -d -P --name web2 --link web1:web1 httpd
run:运行容器-d:表示该容器在后台运行-P:将容器内部使用的网络端口随机映射到我们使用的主机上--name:给该容器命名--link:建立通信隧道
进入容器ping测试
进入web2容器:
docker exec -it web2 /bin/bash
我这里使用的是Ubuntu系统,下面会使用ping工具,需要先安装ping
apt-get -y install iputils-ping
ping 测试
ping web1
查看Docker容器日志
docker logs [OPTIONS] CONTAINER(容器名)
OPTIONS(可选参数):
-
--details:显示更多的信息 -
-f:跟踪实时日志 -
--since:显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) -
--tail:从日志末尾显示多少行日志, 默认是all -
-t:显示时间戳 -
--until:显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
实战案例
查看指定时间后的日志,只显示最后100行
docker logs -f -t --since="2022-11-06" --tail=50 容器ID
查看最近30分钟的日志
docker logs --since 30m 容器ID
查看某时间之后的日志
docker logs -t --since="2022-11-06T13:23:37" 容器ID
查看某时间段日志
docker logs -t --since="2022-11-05T13:23:37" --until "2022-11-06T12:23:37" 容器ID
将容器资源复制到本机
从容器复制文件 到本地
# 将容器nginx01 的html资源复制到本机的/home/lilbai/docker_app/nginx(当前文件夹下无html文件夹)
# 格式 docker cp 容器名:容器路径 本机路径
# 格式 docker cp 容器ID:容器路径 本机路径
# 方法一:使用绝对路径
sudo docker cp nginx01:/usr/share/nginx/html /home/lilbai/docker_app/nginx # 使用容器名
# 方法二:使用相对路径 我现在在/home/lilbai/docker_app/nginx路径下
sudo docker cp 3dec77ff864f:/usr/share/nginx/html ./html # 使用容器ID
将本地文件复制到容器
靠近容器ID或者容器名是容器路径
# 格式 docker cp 本机路径容器名:容器路径
# 格式 docker cp 本机路径容器ID:容器路径
#方法一:
docker cp /home/lilbai/docker_app/nginx nginx01:/usr/share/nginx/html # 容器名
docker cp /home/lilbai/docker_app/nginx 3dec77ff864f:/usr/share/nginx/html # 容器ID
Docker容器内常见的问题
Docker内不能用vim
Docker容器内本来是非常精简的,会减少尽量不必要的程序,vi和vim编辑器都是没有的,所以需要自己在容器内安装一个vim编辑器。
用特殊方法进入容器
# docker -it -u 0 容器ID或者容器名 /bin/bash
docker run -it -u 0 imaegoo/twikoo /bin/bash
更新包
apt-get update
安装vim
apt-get install vim
docker内不能使用ll命令
ll指令是由ls -l组成的,想方便使用ll指令,则编辑bash指令文件,添加快捷指令即可,因为需要编辑文件,需要先安装vim。
不能使用ll
root@3052a7d5f95b:/app/data# ll
bash: ll: command not found
编辑.bashrc
vim ~/.bashrc
添加alias
alias ll='ls -l'
加载.bashrc文件
source ~/.bashrc
docker compose 相关指令
docker compose配置文件字段
| 字段 | 描述 |
|---|---|
| build dockerfile context | 指定Dockerfile文件名构建镜像上下文路径 |
| image | 指定镜像 |
| command | 执行命令,覆盖默认命令 |
| container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
| deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
| environment | 添加环境变量 |
| networks | 加入网络 |
| ports | 暴露容器端口,与-p相同,但端口不能低于60 |
| volumes | 挂载宿主机路径或命令卷 |
| restart | 重启策略,默认no,always,no-failure,unless-stoped |
| hostname | 容器主机名 |
docker compose命令
使用格式:docker-compose [options] [COMMAND] [ARGS...]
| 命令 | 描述 |
|---|---|
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示容器进程 |
| logs | 查看容器输出 |
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |
Docker私有仓库
Harbor介绍
- Vmware公司开源的企业级Docker Registry项目
Harbor优势:
- 管理UI
- 基于角色的访问控制
- 基于镜像的复制策略
- AD/LDAP集成
- 审计
- RESTful API
Docker私有仓库架构拓扑

Harbor的主要组件
Proxy:通过一个前置的反向代理统一将请求转发给后端不同的服务
**Registry:**负责储存Docker镜像,并处理docker push/pull 命令
**Core services:**Harbor的核心功能,包括UI、webhook0、token 服务
**Datebase:**为core services提供数据库服务
**Log collector:**负责收集其他组件的log,供日后进行分析
安装Harbor
{% note blue ‘fas fa-link’ flat %}
Github仓库地址:https://github.com/goharbor/harbor/
{% endnote %}
{% note blue ‘fas fa-wind’ flat %}
安装Harbor需要docker-compose,还没安装可以看文字上面安装docker-compose
{% endnote %}
下载Harbor
wget -c https://github.com/goharbor/harbor/releases/download/v2.5.6/harbor-offline-installer-v2.5.6.tgz
升级Docker版本
原因
如果你一开始安装的docker-ce版本比较低,在后面拉取镜像可能会出现以下这种问题,找不到某些镜像,这时候升级版本可能可以解决你的问题。

卸载docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装Docker
然后按照文章上面的安装步骤重新安装即可。或如按照下面命令安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
其他问题
如果没有卸载旧版的docker会出现如下问题:



