发布时间:2024-11-12 人气:76次
Docker在centos等安装使用
Docker解决了什么问题?能这么流行 容器,就是一种轻量级的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”。
一句话理解Docker:以前各程序都睡大厅,有了Docker后都睡小房子里面。
Docker容器具有以下三大特点:
轻量化:一台主机上运行的多个Docker容器可以共享主机操作系统内核;启动迅速,只需占用很少的计算和内存资源。
标准开放:Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
安全可靠:Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。
Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台主机。
Docker和虚拟机的区别–
虚拟机VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
#Docker名词 容器、镜像、镜像层、容器编排、横向扩展
#前置技能 掌握基础Linux命令,网络基础 虚拟机搭建或云服务器使用(链接)
#Linux环境安装 虚拟机相关环境安装的文档参考
centos7下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/
vmware下载地址的链接:https://pan.baidu.com/s/1ueLnub1toyG-tpKGt4195g 提取码:g9fx
putty和FileZilla的链接:https://pan.baidu.com/s/11V1cXg_tjX4ZokWMY74Bhw 提取码:0woe #Docker
卸载
如果之前安装过Docker需要卸载可以参照如下命令列出当前docker相关的安装包$ yum list installed|grep docker
containerd.io.x86_64 1.3.7-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:19.03.13-3.el7 @docker-ce-stable
如果yum被占用,提示Another app is currently holding the yum lock; waiting for it to exit… 则可以使用kill -9 pid 这个占用进程,如下 [root@first64 ~]# yum list installed|grep docker
Existing lock /var/run/yum.pid: another copy is running as pid 21308. Another app is currently holding the yum lock; waiting for it to exit… The other application is: PackageKit Memory : 31 M RSS (455 MB VSZ) Started: Tue May 3 14:44:32 2022 - 06:29 ago State : Sleeping, pid: 21308
Exiting on user cancel.
$ kill -9 21308 如果出现BDB2053 Freeing read locks for locker 0x1136: 9370/140057345120064提示
$ yum clean all 即可 # 卸载对应的包
$ yum -y remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64 # 删除docker目录
$ rm -rf /var/lib/docker
$ rm -rf /var/lib/containerd
#安装
注意:且Docker 要求操作系统必须为64位,且centos内核版本为3.1及以上,查看系统内核
$ uname -r 3.10.0-1062.el7.x86_6 # 我这里高于3.1 # 系统我使用的是CentOS 7
$ cat /etc/os-release
NAME=“CentOS Linux”
VERSION=“7 (Core)”
ID=“centos”
ID_LIKE=“rhel fedora”
保证yum包是最新 # 使用root执行,更新到最新
$ yum update
列出可安装的docker包 # 列出可以按照的docker包
$ yum list docker-ce --showduplicates | sort -r
安装(较慢,不推荐) 因为官方下载较慢,这里,我们走阿里云的仓库下载安装:
$ yum install -y yum-utils
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
指定版本安装 # 这里要指定版本
$ yum -y install docker-ce-18.09.6-3.el7
在直接安装最新版docker命令如下:
$ yum install docker-ce -y
查看当前版本
$ docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64
Context: default Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
此处需要重启Docker
不能连接到Docker daemon异常,装完后使用docker命令后会提示异常:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
需要重启下docker
重启 $ service docker restart
配置开机启动
$ systemctl enable docker
#镜像仓库 Docker中央仓库
由于中央仓库网络较慢,通常使用国内镜像,所以需要给当前Docker进行配置
#国内镜像网易【推荐】目前体验下来是最快的 http://hub-mirror.c.163.comdaocloud https://hub.daocloud.io清华大学 https://mirrors.tuna.tsinghua.edu.cn/Docker中国区官方镜像 https://registry.docker-cn.comustc https://docker.mirrors.ustc.edu.cn搜狐 http://mirrors.sohu.com/阿里云 阿里镜像需要登录阿里云控制台获取,每个账号有唯一镜像加速地址 https://cr.console.aliyun.com/#镜像配置 找到cd /etc/docker目录下的vi daemon.json文件进行编辑,
输入如下内容 vi /etc/docker/daemon.json
{ “registry-mirrors”: [“http://hub-mirror.c.163.com”] }
如果没有该文件/etc/docker/daemon.json,可自行创建,也可以使用如下命令
tee /etc/docker/daemon.json <<-‘EOF’
{ “registry-mirrors”: [“http://hub-mirror.c.163.com”] } EOF
重载配置文件,重启docker
$ systemctl daemon-reload
$ systemctl restart docker#部署应用#Docker常用命令指定镜像,运行成一个容器$ docker run redis拉取名为redis的最新的镜像$ docker pull redis查看本地拥有的镜像$ docker images查看本地所有的容器(包含未启动的)$ docker ps -a查看目前镜像情况,根据镜像ID删除其镜像$ docker rmi -f a10f849e1540[]根据容器ID删除其容器$ docker rm -f c7e6480f1590进入已经启动的容器里【linux】$ docker exec -it 容器名称 /bin/bash#镜像私服配置和制作
目前主流的Docker4种私有仓库
docker-registry:docker hub 提供的一直私有仓库解决方案。没有图形化界面
Harbor:带有图形化界面的工具,用户管理,及查看更加方便
Nexus:一般我们Maven和Gradle用得比较多,管理jar包,也能存储docker镜像,由于一个版本一个版本的保存和叠加,所以清理起来比较麻烦。
云平台容器服务(如阿里云,常用于生产环境) 。
这里主要介绍2种相对较友好的镜像私服:“harbor”和“阿里云容器服务”。
系统环境说明:
Centos 7
Docker Version: 20.10.14
#Harbor #简介
Harbor Registry(又称 Harbor 云原生制品仓库或 Harbor 镜像仓库)由 VMware 公司中国研发中心云原生实验室原创,并于 2016 年 3 月开源。Harbor 在 Docker Distribution的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后迅速在中国开发者和用户社区流行,成为中国云原生用户的主流容器镜像仓库。
Harbor特性:
基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制 :镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面 :用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
AD/LDAP 支持 :Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
审计管理 :所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化 :已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API :RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。部署方便 :提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。#下载安装包
Harbor 提供了多种途径来帮助用户快速搭建Harbor 镜像仓库服务,
包括:
离线安装包:通过docker-compose编排运行。安装包除了包含相关的安装脚本外,还包含了所有安装所需要的Harbor组件镜像,可以在离线环境下安装使用。
在线安装包:与离线安装包类似,唯一的区别就是不包含harbor组件镜像,安装时镜像需要从网络上的仓库服务拉取。
手动下载:官方源码戳我,找到最新Tag拉到底部进行下载,
建议采用迅雷
采用wget下载(较慢):
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
这里我们选择离线版。
#安装docker-compose Harbor由多个组件组成,其每个组件都是以Docker容器的形式构建的,官方采用Docker Compose来对它进行部署。
用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml中,这个模板文件中有多个镜像定义,常见如:harbor-log,harbor-db,registry,harbor-core,nginx,harbor-portal,harbor-jobservice等,版本不一样所依赖的容器熟练不一样。所以我们需要提前安装好docker compose。下载 http://github.com/docker/compose/releases网络原因可能会失败
$ curl -L “https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-(uname−s)−(uname -s)-(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose也可以手动下载https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64重命名$ mv docker-compose-linux-x86_64 docker-compose授权$ chmod +x /usr/local/bin/docker-compose可定义全局变量或者软链接,方便执行:$ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose验证$ docker-compose --version Docker Compose version v2.5.0注意如果运行docker-compose出现Segmentation fault错误,可以做如下操作 1. 重启docker服务 2. 删除docker-compose文件重新下载
#生产HTTPS证书
由于我们是在本地或虚拟机,可以不用安装,大家也可以采用其他免费证书官方下载地址https://goharbor.io/docs/1.10/install-config/configure-https/
#安装Harbor 解压配置
$ tar xvf harbor-offline-installer-v2.5.0.tgz -C /usr/local/
$ cd harbor/编辑harbor.yml(老版本是harbor.cfg),修改hostname、https证书路径、admin密码(可选)先复制一份harbor.yml$ cp -f harbor.yml.tmpl harbor.yml
$ vim harbor.yml
– 示例如下用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名。例如 192.168.2.195 或 hub.it235.com。不要使用 localhost 或 127.0.0.1 为主机名。hostname: 192.168.2.195
http:port避免和nginx冲突,改成非80即可,本文改为9080port: 8098注意,如果不开启https,则需要把https节点的内容注释掉,否则安装会报错,在老版本中由enable属性控制 https: port: 443ssl证书地址 仅当协议设置为 https 时才应用。certificate: /your/certificate/path
private_key: /your/private/key/pathharbor默认用户名密码harbor_admin_password: Harbor12345harborDB 用于db_auth 的MySQL数据库root 用户的密码。database:
password: root123
max_idle_conns: 100
max_open_conns: 900The default data volumedata_volume: /data运行$ sh /usr/local/harbor/install.sh
或进入到harbor目录执行
./install.sh # 安装成功的结果
----Harbor has been installed and started successfully.----注意,如果失败,修改相关配置后再次执行./install.sh即可(一般失败原因大多是端口冲突)重启docker-compose # 关闭
$ docker-compose down -v # 启动
$ docker-compose up -d # 如果出现以下错误,请启动docker,或重启docker
$ docker-compose ps no configuration file provided: not found
$ systemctl start docker
$ systemctl restart docker
查看harbor安装情况 # 查看已经拉取的镜像
$ docker images # 查看所有容器
$ docker ps -a # 查看compose容器相关运行情况
$ docker-compose ps
清空所有容器和镜像
docker rm -f
(dockerps−aq)dockerrmi−f(docker ps -aq) docker rmi -f(dockerps−aq)dockerrmi−f(docker images -aq)
访问harbo,如果使用了https出现检查证书的情况,说明证书失效或配置存在问题,可点击继续访问
默认账号密码:admin/Harbor12345,可在harbor.yml中修改
作为开发人员,与harbor打交道最多的就是项目模块,其他模块可以暂时忽略
#镜像推送 在harbor创建项目,找另外一台Linux机器
安装docker环境 配置docker的镜像仓库为harbor的机器注意,这里不再是其他的国内镜像仓库,而是要使用我们的私服harbor
$ cat /etc/docker/daemon.json { “registry-mirrors” : [“http://hub-mirror.c.163.com”],国内镜像代理“insecure-registries” : [“192.168.2.195:8098”],harbor私服“live-restore”: true重载docker守护进程而不重启容器 }在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中 使用命令行的方式登录到harbor在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中$ echo Harbor12345 > /etc/docker_passwd登录,因为harbor对密码有一定的要求,所以要采用这种方式$ cat /etc/docker_passwd | docker login -u admin --password-stdin http://192.168.2.195:8098 Login Succeeded注意:如果出现了https问题,那么请检查daemon.json配置是否与我上面描述的一致。随意从官方仓库下载一个镜像
$ docker pull nginx
给镜像打标签docker tagSOURCE_IMAGE[:TAG] 192.168.2.195:8098/it235/REPOSITORY[:TAG]
$ docker tag redis:latest 192.168.2.195:8098/it235/nginx:v1
推送到harbor仓库docker push 192.168.2.195:8098/it235/REPOSITORY[:TAG]$ docker push 192.168.2.195:8098/it235/nginx:v1
进入ui页面查看
删除已存在的镜像,并从harbor拉取镜像
$ docker rmi nginx
$ docker pull 192.168.2.195:8098/it235/nginx:v1
启动容器并验证
$ docker run -d -p 8888:80 192.168.2.195:8098/it235/nginx:v1
浏览器访问:http://192.168.2.194:8888注意,如果是在云服务器上,需要在安全组中配置8888端口或使用nginx代理才可以在外网访问本地如果有防火墙未直接暴露8888端口,则需要将8888端口加入到防火墙中。