Docker的安装与容器应用部署

一. Docker概述

Docker是一个开源的应用容器引擎,基于Go语言开发。Docker可以让开发者打包他们的应用,

1.1 Docker的应用场景:

  • web应用的自动化打包和发布
  • 自动化测试的持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用

Docker借鉴了标准集装箱的概念。

标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。

1.2 Docker与传统虚拟机的比较

1.2.1传统虚拟机技术

基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等)

**结构:**基础设施–主操作系统–虚拟机管理系统–Virtual Machine–虚拟操作系统

1.2.2Docker容器

是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。

**结构:**基础设施–主操作系统–Docker

**特点:**docker启动速度比较快,占用体积较小;

**注意:**这里的docker不会像vm传统的虚拟系统一样在主系统上虚拟出来,而是一个与主系统并存的平级的操作系统;

1.3 Docker的组成部分

Docker的安装与容器应用部署_第1张图片

Docker守护进程:就是驻扎在基础设施上的并行的操作系统,是Docker服务器端进程,负责支撑Docker 容器的运行以及镜像的管理

仓库Registry:一个存放多个镜像的仓库,可以理解为代码控制中的代码仓库

镜像Images:用于创建Docker容器的模板,镜像是基于联合文件系统的一个层式结构,由一系列指令一步步构建的系统指令。

容器:容器是独立运行的一个或一组应用,实质就是虚拟系统;

Docker客户端:Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信

2. Docker安装与启动

2.1 Docker的安装

Docker可以运行在多种操作系统上,本例使用CentOS7。

安装步骤:

1.更新yum源为ustc;

sudo yum update

2.安装docker;

#安装需要的安装包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

注意:yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖;

3.设置yum源

3.1更新docker的镜像源为ustc;

sudo yum-config-manager --add-repo http://mirrors.ustc.edu.cn/dockerce/linux/centos/docker-ce.repo

3.2更新docker的镜像源为anliyun(可能失败);

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo

4.安装docker,-y代表输入界面确认

sudo yum install -y docker-ce
sudo yum install docker-ce

注意:出现输入的界面时,都要选择y;

5.使用docker命令操作docker

# 查看docker的版本
docker -v
# 启动
systemctl start docker
# 停止
systemctl stop docker
#查看docker启动状态
systemctl status docker

2.2. 镜像相关命令

2.2.1设置ustc镜像(安装docker必要步骤)

ustc是老牌的linux镜像服务提供者了。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

安装镜像步骤:

1.编辑json文件

#在 /etc/docker/daemon.json下编辑(先创建,如果没有的话)
mkdir /etc/docker #创建文件夹
vi /etc/docker/daemon.json #创建并编辑文件

2.在json文件中编辑

{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

2.2.2 查看镜像

docker images

**注意:**查询结果列表中的各个字段的意思为:

  • REPOSITORY:镜像名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期
  • SIZE:镜像文件的大小

2.2.3 搜索镜像

#在网络中去查询所需要的镜像名
docker search 镜像名称

注意:在查询结果列表中的各项含义:

  • NAME:镜像名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

2.2.4 拉取镜像

#从中央Docker仓库去下载镜像到本地,如果限制版本号,默认下载最新
docker pull 镜像名称

2.2.5 删除镜像

#可以按照镜像的id来删除
docker images
docker rmi 镜像id
#删除所有镜像
docker rmi $(docker images -q)
docker rmi `docker images -q`

2.3 Docker启动和停止命令

# 启动docker服务: 
systemctl start docker
# 停止docker服务: 
systemctl stop docker 
# 重启docker服务: 
systemctl restart docker 
# 查看docker服务状态: 
systemctl status docker 
# 设置开机启动docker服务: 
systemctl enable docke

注意:

拉取:docker pull 镜像名称:版本号(若不指定则会拉取最新的版本)

删除全部镜像:docker rmi ` docker images -q ` (慎用)

2.4 容器相关命令

容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同Java语言中类和对象的关系。

2.4.1 查看容器

#查看正在运行的容器
docker ps
#查看所有容器使用命令
docker ps -a

2.4.2 创建并启动容器

可以基于已有的镜像来创建和启动容器,创建与启动容器使用命令

docker run 容器类型 --name=容器名 镜像名 /bin/bash

参数说明:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 --name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件 映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

3. 创建并启动交互式容器

以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式 启动容器,如果退出容器,则容器会进入停止状态

操作步骤:

1.拉取镜像(容器是基于镜像运行);

docker pull centos7

2.创建并启动交互式容器,docker交互式容器(启动容器之后会直接进入容器的命令行终端,如果退出则容器停止运行)

docker run -it --name=mycentos7 centos:7 /bin/bash

小结

# 查看容器
docker ps -a

# 创建并启动交互式容器mycentos7
docker run -it --name=mycentos7 centos:7 /bin/bash

启动交互式容器之后是直接进入容器终端;可以查看容器的文件结构;使用exit命令则会退出终端并且停止容器。

4. 创建并启动守护式容器

创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称 不能重复):

操作步骤:

创建并启动docker容器,可以在后台运行;

# 创建并启动守护式容器mycentos2
docker run -di --name=mycentos2 centos:7

在创建交互式容器之后如果退出的话,容器处于停止状态,可以使用命令再次启动容器,使用命令进入容器并操作。

# 启动容器后再进入容器
docker exec -it mycentos2 /bin/bash

小结

守护式容器在启动之后会一直在后台运行,即使进入容器之后执行exit命令也不会停止容器;

适用于需要长期运行容器的情况

5. 停止&拷贝&挂载&查看ip&删除容器

5.1 容器停止、启动

#停止正在运行的容器,通过容器名称或容器id
docker stop mycentos2
#启动已运行的容器,通过容器名称或容器id
docker start mycentos2

5.2 拷贝文件:容器与宿主机之间的文件互拷

将linux宿主机的文件拷贝到容器中

#创建文件
touch abc.txt 
#拷贝到容器目录下,这就把文件拷贝到容器根目录了
docker cp abc.txt mycentos2:/
#进入到mycentos2容器
docker exec -it mycentos2 /bin/bash

ll # 查看的根目录下的文件

exit #退出容器,从容器cp到宿主机

#在宿主机下执行,将根目录下的/abc.txt复制到宿主机的root目录下
docker cp mycentos2:/abc.txt /root
#注意这里的cba.txt在根目录与bin/bash无关

5.3 目录挂载:将宿主机的目录映射到容器对于目录

在创建容器的时候,将宿主机的目录与容器内的目录进行映射,两者就可以共享该文件夹了,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

# 创建linux宿主机器要挂载的目录 
mkdir /usr/local/test

# 创建并启动容器mycentos3,并挂载linux中的/usr/local/test目录到容器的/usr/local/test;也就是在 linux中的/usr/local/test中操作相当于对容器相应目录操作 
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7

# 在linux下创建文件 
touch /usr/local/test/def.txt

# 进入容器 
docker exec -it mycentos3 /bin/bash

注意:共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。

5.4 查看容器IP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNBLI9ZU-1603091450880)(G:/迅雷下载/springboot课件/docker/笔记/assets/1559728403934.png)]

#在linux宿主机下查看 mycentos3 的ip
docker inspect mycentos3

**注意:**容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的物理机笔记本是不能与容器直接通 信的,如果需要则需要通过宿主机器端口的代理。

5.5 容器删除:只能删除停止状态的容器;

#删除容器
docker rm mycentos7 
#删除所有容器,慎用
docker rm docker `ps -a -q`
docker rm docker $(ps -a -q)

**注意:**如果容器是运行状态则删除失败,需要停止容器才能删除

二.Docker应用部署

2.1 MySQL容器部署

2.2.1 拉取(下载)mysql镜像;

# 拉取MySQL 5.7镜像
docker pull centos/mysql-57-centos7

2.2.2 创建并启动守护式容器;

在创建mysql容器的时候使用-p指定端口映射实现连接;

# 创建mysql5.7容器 
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7

注意:

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用root登录的话, 那么其密码为空

2.2.3 在容器中操作mysql;

# 拉取MySQL 5.7镜像 
docker exec -it mysql5.7 /bin/bash
# 登录容器里面的mysql 
mysql -u root -p

2.2.4 远程登陆MySql

# 查看ip;如果以后要内部连接该mysql,如其他容器中要连接mysql容器的mysql的时候,可以使用如下命令查看Ip 
docker inspect mysql5.7

在创建容器的时候mysql的root用户可以指定远程访问的密码。

2.2.5 使用远程登陆新版MySql

USE mysql;
#1.查看用户信息
select host,user,plugin,authentication_string from mysql.user;
#我们需要更新root和%host两个账号的密码为登陆密码root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#更新权限
FLUSH PRIVILEGES;

小结

在创建容器的时候指定环境变量MYSQL_ROOT_PASSWORD表示使用root进行远程连接时候的密码。如果需要进行远程连接的话可以使用-p进行端口映射。

2.2 Tomcat容器部署

2.2.1 拉取tomcat镜像;

将项目文件上传到容器中的tomcat目录(webapps)

创建容器的时候可以指定-v进行目录挂载,tomcat在容器中的目录(/usr/local/tomcat/webapps)

#拉取镜像
docker pull tomcat

2.2.2 创建并启动tomcat容器;

将默认的8080端口映射到宿主机的9000端口;

把wabapps的文件夹共享到宿主机;

#创建tomcat容器,挂载webapps目录
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat

**注意:**本机的tomcat是空的,访问后是404状态

# 如果出现 WARNING: IPv4 forwarding is disabled. Networking will not work. #执行如下操作 
# 1、编辑 sysctl.conf 
vi /etc/sysctl.conf
# 2、在上述打开的文件中后面添加 
net.ipv4.ip_forward=1
# 3、重启network 
systemctl restart network

2.2.3 访问容器中tomcat

http://192.168.76.128:9000

小结

上传项目文件可以使用容器的目录挂载功能,外部访问可以使用端口映射

2.3 Nginx容器部署

2.3.1 拉取nginx镜像;

# 拉取nginx镜像
docker pull nginx

2.3.2 创建并启动nginx容器;

nginx的默认访问端口是:80

在创建容器的时候需要进行端口映射,指定-p,映射到宿主机的端口80,然后通过宿主机的80端口来访问;

# 创建nginx容器 
docker run -di --name=mynginx -p 80:80 nginx

在浏览器上访问容器中nginx,http://192.168.76.128

小结

如果宿主机被占用了80端口,那么在指定映射的时候可以改变宿主机的端口映射,在访问时也需要带上端口号。

2.4 Redis容器部署

2.4.1 拉取redis镜像;

# 拉取redis镜像 
docker pull redis

2.4.2 创建并启动redis容器;

默认端口是6379,如果需要外部访问则可以使用端口映射;

# 创建redis容器 
docker run -di --name=myredis -p 6379:6379 redis

2.4.3 连接redis容器:

①使用命令行客户端 ②使用图形界面工具

#进入redis容器 
docker exec -it myredis /bin/bash
#进入redis安装目录 
cd /usr/local/bin
#连接redis 
./redis-cli

2.4.4. 远程连接redis

可以使用redis图形界面客户端工具连接redis,端口也是6379。

2.5 RabbitMq备署

docker run -id --name=changgou-rabbit -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15672:15672 -p 25672:25672 rabbitmq:management

三 、备份环境迁移(快速部署)

3.1 docker-compose简介&安装

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的 docker应用工具。

使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件 创建和运行所有的服务。

3.1.1 下载安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/dockercompose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

注意:在设置文件可执行权限中:

+X ,加可执行, +r,可读,+w,可写

docker-compose是一个应用工具;可以通过配置docker-compose.yml文件同时启动多个容器。

部署项目时可以编写一个docker-compose.yml文件作为启动项目单位,同时启动项目相关的那些容器。

3.1.2 卸载

#二进制包方式安装的,删除二进制文件即可 
rm /usr/local/bin/docker-compose

3.2 compose常用命令

指令 功能
build 指定服务镜像Dockerfile所在路径
cap_add, cap_drop 指定容器的内核能力(capacity)分配
command 覆盖容器启动后默认执行的命令
cgroup_parent 指定父cgroup组,意味着将基础该组的资源限制
container_name 指定容器名称。默认将会使用项目名称服务名称序号这样的格式
devices 指定设置映射关系
dns 自定义DNS服务器。可以是一个值,也可以是一个列表
dns_search 配置DNS搜索域。可以是一个值,也可以是一个列表
dockerfile 指定额外编译镜像的Dockerfile文件,可以通过该指令来指定
env_file 从文件中获取环境变量,可以为单独的文件路径或列表
environment 设置环境变量,可以使用数组或字典两种格式
expose 暴露端口
external_links 链接到docker-compose.yml外部的容器,甚至可以是非Compose管理的外部容器
extra_hosts 指定额外的host名称映射信息
image 指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜
labels 指定服务镜像Dockerfile所在路径
links 链接到其他服务中的容器
log_driver 指定日志驱动类型,类似于Docker中的–log-driver参数。目前支持三种日志驱动类型: log_driver:“json-file”、log_driver:“syslog”、log_driver:“none”
log_opt 日志驱动的相关参数

3.3 docker-compose应用

docker-compose来实现一次启动多个容器;

通过配置docker-compose模板文件(docker-compose.yml),在这个配置文件中去配置各个容器及其相关的依赖。

3.3.1 编写模板yml文件;

version: "2" 
services:    
  web:        
    images: nginx        
    ports: - "8080:80"        
    volumes: - /usr/local/abc:/usr/local/cba 
#volumes:
#networks

3.3.2 创建并启动docker-compose项目

(模板文件所在的目录,docker-compose.yml)

# 创建文件夹 
mkdir -p /usr/local/mycompose
#进入文件夹 
cd /usr/local/mycompose
#创建 docker-compose.yml文件;内容如下 
vi docker-compose.yml

3.3.3 编写模板yml文件

version: '3' 
services:  
  redis1:    
    image: redis #镜像
    ports: #端口
      - "6379:6379"    
    container_name: "redis1" #容器名    
    networks: #网路
      - dev  
  mysql1:   
    image: centos/mysql-57-centos7   
    environment:            
      MYSQL_ROOT_PASSWORD: "root"    
    ports:
      - "3306:3306"    
    container_name: "mysql1"    
    networks:
      - dev  
  web1:
    image: tomcat    
    ports:
    - "9090:8080"
    container_name: "web1"
    networks:
    - dev
    - pro 
  networks:
    dev:    
      driver: bridge  
    pro:    
      driver: bridge

注意:docker-compose可以配置一个模板文件实现一次可以启动多个容器,运行时候可以执行一个up则会创建并启动模板文件中的各个服务。

模板文件是yml格式的;编写的时候需要注意其格式。

3.3.4 启动

#启动前最好把docker重启,不然原来的tomcat/mysql/redis容器也是启动状态的话,那么端口会冲突而启动失败 
systemctl restart docker
cd /usr/local/mycompose
docker-compose up
# 如果后台启动则使用如下命令 
docker-compose up -d
# 若要停止 
docker-compose stop

3.4 迁移与备份

在当前的容器中安装了各种组件;期望在其他服务器上也能快速拥有该容器的一切环境;可以将当前的容器制作为一个镜像,再将该奖项复制到其他服务器,其他服务器再基于镜像运行容器。

3.4.1 将容器保存为一个镜像;

第一个是我的docker名,第二个是保持的镜像名

docker commit mynginx mynginx

3.4.2 备份镜像tar文件;

docker save -o mynginx.tar mynginx

3.4.3 加载恢复镜像;

#删除mynginx容器
docker rm mynginx
#删除mynginx容器
docker rmi mynginx
#加载新镜像
docker load -i mynginx.tar

注意:在执行docker load命令恢复镜像时,需要先删除原镜像

3.4.4 基于镜像再次运行容器

docker run -di --name=mynginx -p 80:80 mynginx

小结

docker容器可以保存为一个镜像;备份为一个镜像包(*.tar)可以复制迁移到其他服务器,再恢复该tar包中的镜像,基于镜像运行容器实现环境的一致。

3.5 使用Dockerfile创建镜像

我们可以使用pull的方式从docker仓库下载镜像,也可以是使用自己打包的开发镜像tar;这里再提供一种方式:使用Dockerfile创建一个自定义jdk1.8的镜像的方式;

注意第一种不带有环境的镜像,其余两种都可以复制镜像环境;

自定义镜像将环境集成到内部;Dockerfile将镜像的配置信息道Dockerfile文件中,进行脚本执行;两者效果一致,第二种更好。

3.5.1 Dockerfile的概念

Dockerfile是由一系列命令和参数构成的文本文件,在文件中可以指定各个组件资源和运行命令等。

分析

假设在centos7作为基础镜像上;添加jdk1.8并构建一个包含jdk1.8的centos7新镜像。

Dockerfile是由一系列命令和参数构成的文本文件,在文件中可以指定各个组件资源和运行命令等。

3.5.2 Dockerfile的常用命令

实现步骤:

  1. 拉取centos7镜像;
#先查看有没有
#创建目录
mkdir -p /usr/local/dockerjdk8/
ll
cd /usr/local/dockerjdk8/
#在jdk8的目录下创建Dockfile文件
vi Dockerfile

FROM centos:7 
MAINTAINER ITCAST 
WORKDIR /usr 
RUN mkdir  /usr/local/java 
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/ 
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202 
ENV JRE_HOME $JAVA_HOME/jre 
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH 
ENV PATH $JAVA_HOME/bin:$PATH
# 4、执行命令构建镜像;不要忘了后面的那个 "." 
docker build -t='jdk1.8' .
# 5、查看镜像是否建立完成 
docker images
  1. 上传jdk1.8;
  2. 编写Dockerfile文件;
  3. 构建镜像;
  4. 测试(基于新镜像创建并运行容器,运行java -version)

小结

Dockerfile可以基于镜像制作镜像;docker build -t='jdk1.8' .

3.6 私有仓库搭建与配置

有时候我们的服务器无法访问互联网,或者你不希望将自己的镜 像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

私有仓库的搭建步骤

# 1、拉取私有仓库镜像 
docker pull registry
# 2、启动私有仓库容器,默认端口5000
docker run -di --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://宿主机ip:5000/v2/_catalog
#看到{"repositories":[]} 表示私有仓库 搭建成功

# 4、修改宿主机daemon.json,之前只信任中央仓库ip
vi /etc/docker/daemon.json    
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将宿主机ip修改为自己宿主机真实ip 
{"insecure-registries":["宿主机ip:5000"]} 

# 5、重启docker服务 
systemctl restart docker
# 启动私有仓库
docker start registry

小结

拉取registry镜像;基于镜像创建私有仓库容器;

需要去修改docker的一个配置文件指定私有仓库地址;再访问私有仓库:http://ip:5000/v2/_catalog

3.7 将镜像上传至私有仓库

目标:将制作的jdk1.8的镜像上传到私有仓库

# 1、标记镜像jdk1.8为私有仓库的镜像
docker tag jdk1.8 宿主机IP(192..):5000/jdk1.8
# 2、再次启动私有仓库容器
docker restart registry 
# 3、上传标记的镜到私有仓库
docker push 宿主机IP:5000/jdk1.8
# 4、输入网址查看仓库效果
192.168.76.128:5000/v2/_catalog

小结

将本地镜像打标签(标记本地镜像为一个私有仓库中的镜像);将打了标签的镜像推送到私有仓库。

3.8 从私有仓库拉取镜像

  • 私有仓库与拉取镜像的服务器是在同一台机器上:直接拉取镜像; docker pull 私有仓库地址/镜像名称
# 因为私有仓库所在的服务器上已经存在相关镜像;所以先删除;请指定镜像名,不是id 
docker rmi 服务器ip:5000/jdk1.8
#拉取镜像 
docker pull 服务器ip:5000/jdk1.8
#可以通过如下命令查看 
docker 的信息;了解到私有仓库地址 docker inf
  • 私有仓库与拉取镜像的服务器是不在同一台机器上:需要去修改docker的配置文件,指定私有仓库地址;再执行拉取镜像的命令。
#打开配置文件 
vi /usr/lib/systemd/system/docker.service
# 在打开的上述文件中按照下面的图,添加如下的内容;注意修改下面内容中的ip地址 
--add-registry=192.168.12.135:5000 
--insecure-registry=192.168.12.135:5000 \
# 修改完后需要重新加载docker配置文件并重启
docker systemctl daemon-reload systemctl restart docker

如果本地存在同名的镜像需要先删除镜像后拉取

dk1.8 宿主机IP(192…):5000/jdk1.8

2、再次启动私有仓库容器

docker restart registry

3、上传标记的镜到私有仓库

docker push 宿主机IP:5000/jdk1.8

4、输入网址查看仓库效果

192.168.76.128:5000/v2/_catalog




**小结**:

将本地镜像打标签(标记本地镜像为一个私有仓库中的镜像);将打了标签的镜像推送到私有仓库。

## 3.8 从私有仓库拉取镜像

- 私有仓库与拉取镜像的服务器是在同一台机器上:直接拉取镜像; `docker pull 私有仓库地址/镜像名称`

```shell
# 因为私有仓库所在的服务器上已经存在相关镜像;所以先删除;请指定镜像名,不是id 
docker rmi 服务器ip:5000/jdk1.8
#拉取镜像 
docker pull 服务器ip:5000/jdk1.8
#可以通过如下命令查看 
docker 的信息;了解到私有仓库地址 docker inf
  • 私有仓库与拉取镜像的服务器是不在同一台机器上:需要去修改docker的配置文件,指定私有仓库地址;再执行拉取镜像的命令。
#打开配置文件 
vi /usr/lib/systemd/system/docker.service
# 在打开的上述文件中按照下面的图,添加如下的内容;注意修改下面内容中的ip地址 
--add-registry=192.168.12.135:5000 
--insecure-registry=192.168.12.135:5000 \
# 修改完后需要重新加载docker配置文件并重启
docker systemctl daemon-reload systemctl restart docker

如果本地存在同名的镜像需要先删除镜像后拉取

感谢阅读,如有错误之处,请批评指正

你可能感兴趣的:(docker,docker,linux)