首页 > 其他分享 >Docker

Docker

时间:2022-11-10 08:23:06浏览次数:62  
标签:容器 创建 宿主机 镜像 Docker docker

1、Docker 简介

1.1、虚拟化

  • 虚拟化,通过虚拟化技术将一台计算机虚拟为多台逻辑计算机

  • 在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

  • 虚拟化技术分类:

    • 软件虚拟化
    • 硬件虚拟化
    • 内存虚拟化
    • 网络虚拟化(vip)
    • 桌面虚拟化
    • 服务虚拟化
    • 虚拟机
    • ···
  • Docker 背景:

    • 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验 , 这个时候 Docker 横空出世,是因为它对此给出了一个标准化的解决方案

    • 以前,每发布一个程序,就要重新走一遍以上的流程

1.2、什么是Docker

  • Docker 是一个开源的应用容器引擎,基于 Go 语言开发
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
  • Docker的主要目标是 “Build,Ship and Run Any App,Anywhere
    • 就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行
  • 即,只需要一次配置好环境,换到别的机子上就可以一键部署好

  • Docker 的优势:

    • 一致的运行环境:Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;
    • 更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
    • 隔离性:避免公用的服务器,资源会容易受到其他用户的影响
    • 弹性伸缩,快速扩展:善于处理集中爆发的服务器使用压力
    • 迁移方便:可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况
    • 持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署
  • Docker应用场景:

    • Web 应用的自动化打包和发布;
    • 自动化测试和持续集成、发布;
    • 在服务型环境中部署和调整数据库或其他的后台应用;
  • Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性:

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

1.3、容器与虚拟机比较

  • 虚拟机技术:
    • 基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用
  • 容器(Docker为例):
    • Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统

  • 对比:

    • 实现层面上,虚拟机是在硬件层面实现;容器是在操作系统层面上实现虚拟化;
    • 使用上的区别:
  • 简单的说:容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高

1.4、Docker 组件

1.4.1、Docker组成部分

  • Docker是一个(C/S)架构程序
    • Docker客户端只需要向Docker服务器或者守护进程(后台进程)发出请求,服务器或者守护进程将完成所有工作并返回结果;
  • Docker提供了一个命令行工具Docker以及一整套RESTful API:
    • 可以在同一台宿主机上运行 Docker守护进程 和 客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程 Docker守护进程

  • 相关的名词解释:

1.4.2 Docker镜像与容器

  • 镜像:类似虚拟机镜像 , 是一个特殊的文件系统

    • 操作系统分为内核和用户空间;对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统
    • Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变
  • 容器:类似 Linux系统环境,运行和隔离应用。是镜像运行时的实体

    • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
  • 仓库:集中存放镜像文件的地方

    • 镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的地方,比如后面我们要学的,Docker Registry就是这样的服务

1.4.3 Registry(注册中心)

  • Docker 用 Registry 来保存用户构建的镜像

  • Registry分类:

    • 公共
    • 私有
  • Docker公司运营的,公共Registry :Docker Hub

    • 用户可以在Docker Hub注册账号,分享并保存自己的镜像
    • 在Docker Hub下载镜像巨慢,可以自己构建私有的Registry
  • Docker Hub官网:https://hub.docker.com/

2、Docker 安装与启动

2.1、Docker 卸载

1、停止 Docker 服务:

systemctl stop docker 

2、卸载 docker 社区版:

yum -y remove docker-ce

3、移除 程序运行所需的数据文件目录

# 删除Docker中的所有镜像
rm -rf /var/lib/docker

2.1.1、旧版本卸载

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2.2、安装Docker-CentOS7

  • Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的;在很多版本的CentOS中是不支持更新最新的一些补丁包的
  • 注意:在CentOS6.x的版本中,安装前需要安装其他很多的环境,而且Docker很多补丁不支持更新;推荐CentOS 7.x

2.2.1、具体步骤

1、确保是 CentOS 7 及以上版本:

# 查看Linux的版本
cat /etc/redhat-release

2、yun 方式 安装 gcc:

# 1.查看是否已安装了gcc、gcc-c++
gcc -v	  #或者执行:whereis gcc
whereis g++

#2.未安装,安装即可
yum -y install gcc
yum -y install gcc-c++

3、安装需要相关的软件包:

yum install -y yum-utils device-mapper-persistent-data lvm2

4、设置镜像仓库:推荐使用阿里云Docker仓库:

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

5、更新yum软件包索引:

yum makecache fast

6、安装Docker CE(社区版)

  • Docker EE(企业版收费)
yum -y instal docker-ce

7、启动docker

#手动启动
systemctl start docker

#自启动
systemctl start docker

8、测试:

#检查版本
docker version

#下载并运行HelloWorld
docker run hello-world

  • run 命令的执行原理:

9、配置镜像加速pull 默认是从Docker Hub中下载的,可配置镜像加速,从国内镜像中 pull

  • 不同的产品的用户镜像加速地址不一样

  • 阿里云镜像地址说明:获取自己的镜像

  1. 登录自己阿里云
  2. 控制台 -> 容器镜像服务 -> 镜像加速器 -> 复制镜像加速器地址
  1. daemon.json:创建该文件,并指定镜像加速
# 1.创建 docker文件夹【新版的Docker ,该文件夹已存在,无需创建】
mkdir -p /etc/docker

#2.创建 daemon.json,并编辑文件内容
vim  /etc/docker/daemon.json

{
"registry-mirrors": ["https://q2coi2sb.mirror.aliyuncs.com"]    
}
  • 网易云镜像:
{
"registry-mirrors": ["自己的网易云镜像加速器地址"]	
}
  • 阿里云镜像
{
"registry-mirrors": ["自己的阿里云镜像加速器地址"]
}
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

2、重启守护进程:

systemctl daemon-reload

3、重启 Docker 服务:

systemctl restart docker

2.2 Docker的启动与停止

2.2.1、相关的常用命令

  • 常用命令:
命令 描述
systemctl start docker 启动docker
systemctl stop docker 停止docker
systemctl restart docker 重启docker
systemctl status docker 查看docker状态
systemctl enable docker 开机自启动
systemctl disable docker 禁用docker
docker info 查看docker概要
docker --help 查看docker帮助文档

2.2.2、帮助手册:docker --help

  • 常用的命令解释说明:

2.2.3、常用指令

指令 描述
cp 本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝
exec 登录一个容器,使用命令行操作正在运行的容器。
images 镜像的集合查询。
ps 容器列表
pull 下载镜像
restart 重启一个或多个容器
rm 删除一个或多个容器
rmi 删除一个或多个镜像
. 创建一个容器,并运行起来
save 导出镜像到一个文件(tar)中
search 搜索镜像(从Docker Hub)
start 启动一个或多个已经停止的容器
stop 停止一个或多个正在运行的容器

3、常用命令

3.1、镜像

  • Docker镜像:由文件系统叠加而成(是一种文件的存储形式);
  • Docker镜像,是Docker中的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地
    • 比如,开发人员可以从docker仓库拉取(下载)一个只包含centos7系统的基础镜像,然后在这个镜像中安装jdk、mysql、Tomcat和自己开发的应用,最后将这些环境打成一个新的镜像。开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像就可以了,这样就可以保证开发人员的环境和测试人员的环境完全一致

3.1.1、镜像相关命令

  • 镜像存储路径:/var/lib/docker

  • 查看镜像:docker images

    • REPOSITORY:镜像名称
    • TAG:镜像标签
    • IMAGE ID:镜像ID;由Docker分配,并不是固定的
    • CREATED:镜像的创建日期(不是获取该镜像的日期)
    • SIZE:镜像大小

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

  • 拉取镜像:docker pull 镜像名称
    • 从 Docker仓库 下载镜像到本地,镜像名称格式为 【名称:版本号】,如果版本号不指定则是最新的版本

1、拉取 Nginx 的镜像【不指定版本,会下载最新版本】

  • 一个镜像是由多个层组成的;若下载的层在本地已存在,则只会下载除已下载的其它层

2、查看本地是否存在了该镜像:

  • 删除镜像:
    • docker rmi 镜像ID
    • docker rmo 镜像名:版本
#1.首先要查看到要删除的镜像ID
docker images

#2.通过镜像ID 删除镜像
docker rmi fcb5a96e19cl
#2.通过镜像名 删除镜像
docker rmo centos:7

#强制删除单个镜像
docker rmi  -f 镜像ID

#删除多个镜像
docker rmi -f 镜像名1:版本 镜像名2:版本

#删除所有镜像
docker rmi -f $(docker images -qa)

从Docker Hub拉取(国内太慢)

  • Docker镜像首页,包括官方镜像和其它公开镜像
  • Docker Hub上最受欢迎的10大镜像
  • 通过Docker registry API获取不了镜像被pull的个数,只能通过镜像的stars数量来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库

  • 国内下载 Docker Hub官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器

3.2、容器相关命令

  • 容器,也是docker中的核心概念,镜像是创建容器的软件 , 容器是由镜像运行产生的运行实例

    • 镜像和容器的关系,就如同Java语言中类和对象的关系
  • 我们现在所说的容器存放的东西可能更偏向于应用

    • 比如:网站、程序甚至是系统环境

3.2.1、查看容器的指令

  • 查看容器的相关指令:
指令 描述
docker ps 查看正在运行的容器
docker ps -a ⭐查看所有容器
docker ps -l 查看最后一次运行的容器
docker ps -f status=exited 强制查看停止的容器

3.2.2、创建与启动容器

  • 宿主机:是相对于子机而言的
    • 比如你安装有虚拟机的话,那么相对于虚拟机而言,你正在使用的计算机就是宿主机,虚拟机是安装在主机上的,必须在主机上才能运行,主机就是一个“宿主”

创建容器

  • 创建容器:docker run
    • ⭐⭐run 指令后可带的参数和说明:
-i:表示运行容器

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

--name :为创建的容器命名

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

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

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
创建容器的多种方式
  • 创建容器的方式:
    • 交互式创建容器
    • 守护式(后台运行)创建容器
交互式方式创建容器
  • 交互式:当退出交互时,该镜像就会停止运行

  • 启动完成后,直接进入当前容器;如果退出容器,则容器会进入停止状态

  • 语法:

docker run -it --name=容器名称 镜像名称:标签(标签) /bin/bash
# /bin/bash 	交互方式:使用bin/bash文件进行交互

1、创建 容器:

# 举例:
docker run -it --name=mycentos centos:7 /bin/bash
# docker run:表示创建容器
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos:7:使用该镜像创建
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

2、通过 dir 命令,其实容器内部也是一个 centos , 可以把每个容器都看成一个小电脑或者服务器

3、退出当前容器:exit

  • 首次退出容器,会直接停止容器运行,但没有删除

守护式方式创建容器⭐
  • 适用于需要长期运行的容器(理解成在后台运行的容器
  • 语法格式:
    • 标签:即,镜像版本
docker run -id --name=容器名称 镜像名称:标签

1、创建后台容器:centos7

docker run -id --name=mycentos2 centos:7

2、查看 docker 该容器已经运行

3、⭐进入容器

#语法格式:
docker exec -it 容器名称 (或者容器ID)  /bin/bash

#示例:
docker exec -it Mycent2 /bin/bash

3.2.3、停止与启动容器

停止容器

  • 停止容器的格式:
docker stop 容器名(或者容器ID)
  • 示例:
docker stop Mycentos

启动容器

  • 启动容器的格式:
docker start 容器名称(或者容器ID)
  • 示例:
 docker start Mycentos2

容器自启动的开启和关闭

  • 容器自启动,语法:
#新建容器时配置自启参数
docker run --restart=always 容器id 或 容器名称

#已存在的容器配置自启
docker update --restart=always 容器id 或 容器名称

#批量设置容器自启
docker update --restart=always $(docker ps -aq)

#关闭容器自启
docker update --restart=no 容器id 或 容器名称

3.2.4、删除容器

  • 删除容器的格式:
    *
docker rm 容器名称(容器ID)
  • 删除容器的时候,如果容器在运行,会报错,必须先停止容器
#1.停止容器
docker stop mycentos11

#2.删除centos11容器
docker rm mycentos11
  • 强制删除正在运行的容器:
docker rm -f 容器名称或id

3.2.5、文件拷贝

  • 若要在容器中安装软件,一般是将软件上传到宿主机,宿主机再将其拷贝到容器的某个目录下:

宿主机资源拷贝到容器的具体步骤

1、通过虚拟机的IP 将 Win 中的指定的文件上传到 虚拟Linux中;
2、将文件拷贝到容器内:

# 语法:
docker cp 需要拷贝的文件或目录 容器名称:容器目录

# 示例:
docker cp /opt/Nginx.tar Mycentos2:/opt

容器资源拷贝到宿主机的具体步骤

1、进入容器:

docker exec -it Mycentos2 /bin/bash

2、将文件从容器内拷贝出来:

# 语法:
docker cp 容器名称:需要拷贝的文件或目录路径 宿主机存放的目录

# 示例:
docker cp mycentos2:/opt/jdk1.8.0_152.tar /root

3.2.6、目录挂载⭐

  • 实际开发中,在创建容器时,都会通过将宿主机的目录与容器内的目录进行映射两者的目录都是相互影响
  • 语法:
docker run -it --name=容器名称 -v 宿主机的映射目录:被映射的容器目录 镜像名称:标签
  • 示例:
    • 创建容器时,当映射和被映射的目录不存在时,会自动创建
# Mycentos2容器的 /container 目录映射到 宿主机的 /host/opt 目录
docker run -di --name=Mycentos2 -v /host/opt:/container/opt centos:7

3.2.7、查看容器 IP地址

  • 查看容器的各种数据,语法:
docker inspect 容器名称(容器ID)
  • 示例:
docker inspect Mycentos2
  • 其中的网络配置:

  • 只查看容器的某个信息:

    • 如:IP

      docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
      
      # 示例:
      docker inspect --format='{{.NetworkSettings.IPAddress}}' Mycentos2
      

在容器安装指定命令(ifconfig为例)

  • 在OS容器中,会有大量的命令不可用;可以安装相关命令

1、在OS容器中,使用命令:ifconfig

  • 网络工具包未安装

2、安装 网络工具包:

yum install -y net-tools.x86_64

3、安装后,网络相关命令就可以使用了

4、应用部署

4.1、MySQL部署

  • ⭐MySQL部署 原理:

具体步骤

1、拉取mysql5.7 镜像:

docker pull centos/mysql-57-centos7

2、创建容器:

  • 宿主机端口 若和 容器端口 保持一致,在连接时,可能出现端口占用的问题【因为连接的IP地址是宿主机的IP地址,连接会连接到宿主的端口,而不是容器的端口】
  • 实际开发中,宿主机是不安装相关软件的,通过 Docker 下载相关镜像即可
docker run -di --name=mysql5.7 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

# 语法:
#docker run -id --name=容器名字 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=mysql密码 镜像名称

3、远程登录 MySQL:

  • 连接端口:33306【映射 容器端口3306的宿主机映射端口】
  • 连接的IP:宿主的IP地址

4、连接容器MySQL后,创建数据库和表:

CREATE DATABASE vue;
USE vue;
CREATE TABLE USER(
  id INT PRIMARY KEY AUTO_INCREMENT,
  age INT,
  username VARCHAR(20),
  password VARCHAR(50),
  email VARCHAR(50),
  sex VARCHAR(20)
)

4.2、Tomcat部署

  • Tomcat镜像文件大于CentOS7原因:

    • Tomcat 镜像文件中,包含了CentOS7和JDK

1、拉取镜像:tomcat:8

  • 拉取的tomcat8
docker pull tomcat:8

2、创建容器,并做目录挂载:

docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:8

3、/usr/local/webapps:将项目上传到宿主机的挂载目录下

4、访问测试:http://192.168.6.100:9000/mavenweb/index.jsp

4.3、Nginx 部署

1、拉取镜像:

docker pull nginx

2、创建Nginx容器:

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

3、访问测试:http://192.168.6.100

4.4、 Redis 部署

1、拉取镜像:

docker pull redis

2、创建容器:

docker run -di --name=myredis -p 6379:6379 redis

3、Redis 客户端工具测试【或者 创建 Jdis 对象测试】

5、迁移与备份

  • Docker 具体使用流程图解:
    • docker commit:容器保存为镜像
    • docker save:镜像备份为tar文件
    • docker load:根据tar文件恢复为镜像

5.1、容器保存为镜像

  • 语法:
    • 镜像名必须小写
    • 未指定镜像版本,默认是 lastest 版本
docker commit 容器名称  镜像名称:版本
  • 示例:
docker commit mynginx mynginx_i

5.2、镜像备份

  • 将镜像备份成一个 tar压缩包

  • 语法:

# -o:output
docker save –o tar文件名称 镜像名
  • 示例:
docker  save -o mynginx.tar mynginx_i    #-o:output

5.3、镜像恢复与迁移

  • 把备份好的 镜像tar文件 恢复成镜像;

    • 首先删除被打包的镜像【当已存在相同镜像名时,镜像恢复会报错】

  • 语法:

docker load -i tar文件名称
  • 示例:
docker load -i mycentos2.tar

6、Dockerfile

6.1、Dockerfile 简介

  • Dockerfile,自开发镜像
  • Dockerfile 其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取 Dockerfile文件,并根据 Dockerfile 文件的描述步骤来构建镜像;
    • 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
    • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
    • 对于运维人员:在部署时,可以实现应用的无缝移植

6.2、常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录

6.3、脚本创建镜像

1、创建存放自开发镜像的目录:

mkdir –p /usr/local/dockerjdk8

2、下载 jdk-8u144-linux-x64.tar.gz并上传到服务器(虚拟机)中的该目录下

3、该目录下,创建文件:Dockerfile【固定文件名称】,并编辑:

# 固定的文件名称:Dockerfile
[root@localhost dockerjdk8]# vi Dockerfile


#依赖镜像名称和版本,会从Docker找,没有就下载
FROM centos:7
#指定镜像创建者信息
MAINTAINER HorJ
#切换工作目录:当进入到该容器时的,默认路径
WORKDIR /usr
#RUN yum install -y glibc.i686:在自制的镜像容器中,不能使用java命令,就添加该依赖包
#RUN:执行一个命令,创建一个目录
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中(将压缩包解压到指定目录)
ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/
#配置java环境变量,jdk1.8.0_144:压缩包解压后的名称
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
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

5、保存退出后,构建镜像

#-t:镜像名		空格和点,不要省略!!
docker build -t='jdk1.8' .

6、查看镜像是否建立完成

docker images

7、创建自制的镜像容器,容器中,执行 java相关的命令报错:

  • 容器中,缺少依赖插件:【Dockerfile 文件中,若定义了该依赖的安装,则不会报错】
yum install  -y glibc.i686

7、Docker 私有仓库

  • 大型公司,都会搭建自己的私有仓库来存储和管理自己的镜像

7.1 私有仓库搭建与配置

1、拉取私有仓库镜像(此步可省略,在创建该镜像的容器时,会自动拉取)

docker pull registry

2、创建私有仓库容器:

docker run -di --name=registry -p 5000:5000 registry

3、 查看容器是否创建成功:

docker ps

4、查看私有仓库中的容器等:http://192.168.6.100:5000/v2/_catalog【路径固定】

  • 默认仓库为空:Docker默认是不信任私有仓库的,镜像是不能存放在私有仓库中的

5、daemon.json:使Docker信任指定的地址和IP,使得可以将镜像存放在私有仓库中:

#1.编辑 daemon.json
vi /etc/docker/daemon.json

#2.添加内容:使Docker信任该地址和IP
"insecure-registries":["192.168.6.100:5000"]

6、重启docker 服务:

systemctl restart docker

7.2、镜像上传至私有仓库

1、标记镜像:jdk1.8是私有仓库的镜像:

  • 语法:

    • 自定义私有仓库中的镜像名称:一般格式:私有仓库的IP:端口/标记为私有仓库所属的镜像名称

      • 如果自定义,则需要输入登录 DockerHub 的用户名和密码

        docker tag 被标记为私有仓库的镜像名称  自定义私有仓库中的镜像名称
        # 将标记为私有仓库的镜像后,会在本地创建该镜像的别名
        

docker tag jdk1.8  registry/jdk1.8 192.168.6.100:5000/jdk1.8

2、再次启动私服容器

docker start registry

3、上传标记的镜像:

# docker push 镜像名
docker push 192.168.6.100:5000/jdk1.8

4、重新访问:http://192.168.6.100/v2/_catalog

7.3、从私有仓库拉取镜像

  • 拉取私有仓库中的镜像:
docker pull 宿主机IP:端口/私有仓库中的镜像名称

docker pull 192.168.211.144:5000/jdk1.8

标签:容器,创建,宿主机,镜像,Docker,docker
From: https://www.cnblogs.com/horJXu/p/16875832.html

相关文章

  • Docker WSLl2 目录相关记录
    windows10中的docker是基于wls2的。想访问docker的配置文件的话可以通过wsl2的目录来访问。在资源管理器中输入\\wsl$就可以找到相关的目录。比如我要改一个容器中的目......
  • Nginx:Docker Compose部署Nginx
    使用​​DockerCompose​​​部署​​Nginx​​​,创建​​docker-compose.yaml​​:[root@192~]#vimdocker-compose.yaml输入以下内容:version:'3'services:nginx:......
  • docker.sock: connect: permission denied 解决
    问题描述xjun@DESKTOP-L2R4GKN:~$dockerrun-ithello-worlddocker:GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/......
  • Docker:安装Docker Compose
    ​​DockerCompose​​​是一个在​​Docker​​​上运行多容器应用程序的工具,使用​​Compose​​​文件格式定义。​​Compose​​文件用于定义组成应用程序的一个或多个......
  • Docker - Docker Image及Image命令详解
    Docker-DockerImage及Image命令详解什么是镜像(Image)Docker镜像(DockerImage)就是一个只读的模板。比如,一个镜像可以包含一个完整的Ubuntu操作系统环境。镜像可以用来创建D......
  • Docker学习笔记五:Docker安装Jenkins
    一、安装准备1、安装软件JDKMavenGit(不需要单独安装,直接通过Jenkins安装Git插件即可)2、拉取docker镜像命令:dockerpulljenkins/jenkins二、开始安装1、安......
  • Docker | 常用命令——排错很有帮助
    众所周知,docker排查问题相较而言是困难的。因此,熟知一些常用命令对我们快速的排查定位问题是非常有帮助的。下面让我们一起来学习一下吧......
  • docker面试题
    什么DockerDocker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。Docker与虚拟机有何不同Docker不是虚......
  • 86-《P7云原生架构师2期》03-云原生架构体系-Docker基础_ev
                                   ......
  • docker新建Ubuntu18.04镜像的容器使用jupyter可以网页访问链接
    0,使用官网ubuntu18.04镜像dockerpullubuntu:18.04查看镜像列表dockerimages可以看到新的镜像的名称和ID1,创建一个带端口链接的容器(ubuntu1804为自定义容器名称......