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)
-
不同的产品的用户镜像加速地址不一样
-
阿里云镜像地址说明:获取自己的镜像
- 登录自己阿里云
- 控制台 -> 容器镜像服务 -> 镜像加速器 -> 复制镜像加速器地址
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": ["自己的阿里云镜像加速器地址"]
}
-
ustc:老牌的Linux镜像服务提供者;
{
"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数量的库都是官方库
- 查看DockerHub的各个镜像流行度:https://hub.docker.com/search?image_filter=official&type=image
- 国内下载 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